From 9bd7a5970c15a67da441af0ab1c184cfa0f33aaa Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Sun, 2 Nov 2025 00:27:57 +0100 Subject: [PATCH] Implemented getting and displaying backend service log on Android --- sbapp/sideband/core.py | 30 ++++++++++++++++++++++++++++++ sbapp/ui/utilities.py | 27 ++++++++++++++++++++++----- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/sbapp/sideband/core.py b/sbapp/sideband/core.py index 5aa22ac..7bfef1d 100644 --- a/sbapp/sideband/core.py +++ b/sbapp/sideband/core.py @@ -2135,6 +2135,8 @@ class SidebandCore(): elif "stop_tracking" in call: args = call["stop_tracking"] connection.send(self.stop_tracking(object_addr=args["object_addr"])) + elif "get_service_log" in call: + connection.send(self.get_service_log()) else: connection.send(None) @@ -4156,6 +4158,34 @@ class SidebandCore(): def get_log(self): return "\n".join(self.log_deque) + def _service_get_service_log(self): + if not RNS.vendor.platformutils.is_android(): + return False + else: + if self.is_client: + try: return self.service_rpc_request({"get_service_log": True }) + except Exception as e: + RNS.log("Error while sending message over RPC: "+str(e), RNS.LOG_DEBUG) + RNS.trace_exception(e) + return False + else: + return False + + def get_service_log(self): + if self.allow_service_dispatch and self.is_client: + try: return self._service_get_service_log() + + except Exception as e: + RNS.log("Error while getting service log: "+str(e), RNS.LOG_ERROR) + RNS.trace_exception(e) + return False + + else: + try: return "\n".join(self.log_deque) + except Exception as e: + RNS.log("An error occurred while getting message transfer stamp cost: "+str(e), RNS.LOG_ERROR) + return None + def __start_jobs_immediate(self): if self.log_quiet: selected_level = 0 diff --git a/sbapp/ui/utilities.py b/sbapp/ui/utilities.py index d3adcc7..80dd163 100644 --- a/sbapp/ui/utilities.py +++ b/sbapp/ui/utilities.py @@ -182,14 +182,23 @@ class Utilities(): threading.Thread(target=self.update_logviewer_job, daemon=True).start() def update_logviewer_job(self, sender=None): - try: - output = self.app.sideband.get_log() - except Exception as e: - output = f"An error occurred while retrieving log entries:\n{e}" + try: output = self.app.sideband.get_log() + except Exception as e: output = f"An error occurred while retrieving log entries:\n{e}" + + if not RNS.vendor.platformutils.is_android(): service_output = None + else: + try: service_output = self.app.sideband.get_service_log() + except Exception as e: service_output = f"An error occurred while retrieving log entries:\n{e}" + self.logviewer_screen.log_contents = output def cb(dt): - self.logviewer_screen.ids.logviewer_output.text = f"[font=RobotoMono-Regular][size={int(dp(12))}]{output}[/size][/font]" + if not RNS.vendor.platformutils.is_android(): + self.logviewer_screen.ids.logviewer_output.text = f"[font=RobotoMono-Regular][size={int(dp(12))}]{output}[/size][/font]" + else: + self.logviewer_screen.ids.logviewer_output.text = f"[size=18dp][b]Frontend Log[/b][/size][size=5dp]\n \n[font=RobotoMono-Regular][size={int(dp(12))}]{output}[/size][/font]" + self.logviewer_screen.ids.slogviewer_output.text = f"\n[size=18dp][b]Service Log[/b][/size][size=5dp]\n \n[font=RobotoMono-Regular][size={int(dp(12))}]{service_output}[/size][/font]" + self.logviewer_screen.log_contents += f"\n\n{service_output}" Clock.schedule_once(cb, 0.2) if self.app.root.ids.screen_manager.current == "logviewer_screen": @@ -377,6 +386,14 @@ MDScreen: size_hint_y: None text_size: self.width, None height: self.texture_size[1] + + MDLabel: + id: slogviewer_output + markup: True + text: "" + size_hint_y: None + text_size: self.width, None + height: self.texture_size[1] """ layout_advanced_screen = """