From 1d241d94a873373e4fa97ae3d3b980f45e550baf Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Mon, 12 Jan 2026 11:53:29 -0500 Subject: [PATCH] Updates to dbus remote for plugins. --- README-REMOTE-CONTROLLER.md | 35 ++++++++++++++ REMOTE-CONTROLLER-COMMANDS.md | 28 +++++++++++ .../plugins/WindowTitleReader/plugin.py | 47 +++++++++++++++++++ 3 files changed, 110 insertions(+) diff --git a/README-REMOTE-CONTROLLER.md b/README-REMOTE-CONTROLLER.md index 281fdca..a9b2356 100644 --- a/README-REMOTE-CONTROLLER.md +++ b/README-REMOTE-CONTROLLER.md @@ -144,6 +144,41 @@ Plugins that expose D-Bus decorators are automatically registered as modules usi convention `Plugin_` (e.g., `Plugin_GameMode`, `Plugin_WindowTitleReader`). Use `ListModules` to discover available plugin modules at runtime. +#### Plugin_WindowTitleReader + +Controls for the Window Title Reader plugin: + +- Parameterized command: `SetEnabled` (`enabled`: bool) +- Runtime getter: `Enabled` + +Example: + +```bash +gdbus call --session --dest org.stormux.Cthulhu.Service \ + --object-path /org/stormux/Cthulhu/Service/Plugin_WindowTitleReader \ + --method org.stormux.Cthulhu.Module.ExecuteParameterizedCommand \ + 'SetEnabled' '{"enabled": }' false + +# Check current state +gdbus call --session --dest org.stormux.Cthulhu.Service \ + --object-path /org/stormux/Cthulhu/Service/Plugin_WindowTitleReader \ + --method org.stormux.Cthulhu.Module.ExecuteRuntimeGetter 'Enabled' +``` + +Busctl example: + +```bash +busctl --user call org.stormux.Cthulhu.Service \ + /org/stormux/Cthulhu/Service/Plugin_WindowTitleReader \ + org.stormux.Cthulhu.Module ExecuteParameterizedCommand \ + s a{sv} b 'SetEnabled' 1 enabled b true false + +# Check current state +busctl --user call org.stormux.Cthulhu.Service \ + /org/stormux/Cthulhu/Service/Plugin_WindowTitleReader \ + org.stormux.Cthulhu.Module ExecuteRuntimeGetter s 'Enabled' +``` + ### PluginSystemManager Module The `PluginSystemManager` module provides session-only plugin control: diff --git a/REMOTE-CONTROLLER-COMMANDS.md b/REMOTE-CONTROLLER-COMMANDS.md index 5655766..bf0a5a6 100644 --- a/REMOTE-CONTROLLER-COMMANDS.md +++ b/REMOTE-CONTROLLER-COMMANDS.md @@ -66,6 +66,34 @@ Session-only plugin control (does not persist preferences): Plugins that expose D-Bus decorators are automatically registered as modules using the naming convention `Plugin_` (e.g., `Plugin_GameMode`, `Plugin_WindowTitleReader`). +#### WindowTitleReader (Plugin_WindowTitleReader) + +- `SetEnabled` (parameterized) -> enabled (bool) +- `Enabled` (runtime getter) + +Example: + +```bash +gdbus call --session --dest org.stormux.Cthulhu.Service \ + --object-path /org/stormux/Cthulhu/Service/Plugin_WindowTitleReader \ + --method org.stormux.Cthulhu.Module.ExecuteParameterizedCommand \ + 'SetEnabled' '{"enabled": }' false +``` + +Busctl example: + +```bash +busctl --user call org.stormux.Cthulhu.Service \ + /org/stormux/Cthulhu/Service/Plugin_WindowTitleReader \ + org.stormux.Cthulhu.Module ExecuteParameterizedCommand \ + s a{sv} b 'SetEnabled' 1 enabled b true false +``` + +# Check current state +busctl --user call org.stormux.Cthulhu.Service \ + /org/stormux/Cthulhu/Service/Plugin_WindowTitleReader \ + org.stormux.Cthulhu.Module ExecuteRuntimeGetter s 'Enabled' + See [README-REMOTE-CONTROLLER.md](README-REMOTE-CONTROLLER.md) for comprehensive D-Bus API documentation and usage examples. ## Verifying D-Bus Service Status diff --git a/src/cthulhu/plugins/WindowTitleReader/plugin.py b/src/cthulhu/plugins/WindowTitleReader/plugin.py index 494fb26..b6284f8 100644 --- a/src/cthulhu/plugins/WindowTitleReader/plugin.py +++ b/src/cthulhu/plugins/WindowTitleReader/plugin.py @@ -25,6 +25,7 @@ import logging from gi.repository import GLib from cthulhu import debug +from cthulhu import dbus_service from cthulhu.plugin import Plugin, cthulhu_hookimpl xlibAvailable = True @@ -136,6 +137,52 @@ class WindowTitleReader(Plugin): self._present_message("Window title reader unavailable") return True + @dbus_service.parameterized_command + def set_enabled( + self, + enabled: bool, + notify_user: bool = True + ) -> bool: + """Enable or disable window title reader tracking.""" + + if enabled: + if self._enabled: + if notify_user: + self._present_message("Window title reader on") + return True + + if not xlibAvailable: + if notify_user: + self._present_message("Window title reader unavailable") + debug.printMessage( + debug.LEVEL_INFO, + f"WindowTitleReader: python-xlib unavailable: {xlibImportError}", + True, + ) + return False + + if self._start_tracking(): + if notify_user: + self._present_message("Window title reader on") + return True + + if notify_user: + self._present_message("Window title reader unavailable") + return False + + if self._enabled: + self._stop_tracking() + + if notify_user: + self._present_message("Window title reader off") + return True + + @dbus_service.getter + def get_enabled(self) -> bool: + """Returns True if the window title reader is enabled.""" + + return self._enabled + def _present_message(self, messageText): if not self.app: return