diff --git a/.gear/rules b/.gear/rules new file mode 100644 index 0000000..eedd5e3 --- /dev/null +++ b/.gear/rules @@ -0,0 +1,2 @@ +tar: v@version@:. +diff: v@version@:. . exclude=.gear exclude=*.spec diff --git a/.gear/tags/list b/.gear/tags/list new file mode 100644 index 0000000..3a9def2 --- /dev/null +++ b/.gear/tags/list @@ -0,0 +1 @@ +02baf04eaa3a5fd546fdf9e507ea515bad973cc3 v0.7.9 diff --git a/.gear/upstream/remotes b/.gear/upstream/remotes new file mode 100644 index 0000000..d86e54b --- /dev/null +++ b/.gear/upstream/remotes @@ -0,0 +1,3 @@ +[remote "upstream"] + url = https://github.com/trigg/Discover.git + fetch = +refs/heads/*:refs/remotes/upstream/* diff --git a/README.md b/README.md index ac59d35..49aa571 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,11 @@ This will close out any already running discover overlay for this user #### Close the overlay `discover-overlay --close` or `discover-overlay -x` -This closes the process running the overlay, hence any `--rpc` commands sent afterwards will do nothing +This closes the process running the overlay. Any control commands sent afterwards will do nothing + +#### Show version + +`discover-overlay --version` or `discover-overlay --V` #### Open configuration window `discover-overlay --configure` or `discover-overlay -c` @@ -38,40 +42,43 @@ This closes the process running the overlay, hence any `--rpc` commands sent aft This will redirect all debug to the file `~/.config/discover-overlay/output.txt` #### Hide the currently shown overlays -`discover-overlay --rpc --hide` +`discover-overlay --hide` -This will not stop the process running the overlay. This means the `--rpc` commands sent afterwards continue working as expected, and the `--show` is much quicker than starting the overlay from the start. +This will not stop the process running the overlay. This means the control commands sent afterwards continue working as expected, and the `--show` is much quicker than starting the overlay from the start. #### Show the overlays -`discover-overlay --rpc --show` +`discover-overlay --show` Note that if the process running the overlay has stopped or crashed then this will do nothing #### Mute yourself in voice chat -`discover-overlay --rpc --mute` +`discover-overlay --mute` #### Unmute yourself in voice chat -`discover-overlay --rpc --unmute` +`discover-overlay --unmute` #### Deafen yourself in voice chat -`discover-overlay --rpc --deaf` +`discover-overlay --deaf` #### Undeafen yourself in voice chat -`discover-overlay --rpc --undeaf` +`discover-overlay --undeaf` +### Attempt to leave the current voice channel + +`discover-overlay --leave` or `discover-overlay -l` #### Attempt to join voice channel by room ID -`discover-overlay --rpc --moveto=X` +`discover-overlay --moveto=X` Using a Room ID from Discord to replace `X`, this will attempt to join the voice channel. #### Populate the channel RPC file with a list of guilds -`discover-overlay --rpc --refresh-guilds` +`discover-overlay --refresh-guilds` Requests a list of guilds. Once collected, it will write them to `~/.config/discover-overlay/channels.rpc` as a JSON object #### Populate the channel RPC file with a list of channels from a guild -`discover-overlay --rpc --guild-request=X` +`discover-overlay --guild-request=X` Using a Server ID from Discord to replace `X`, this will request a list of channels (text & voice) from the given guild. Once collected, it will write them to `~/.config/discover-overlay/channels.rpc` as a JSON object. diff --git a/discover-overlay.spec b/discover-overlay.spec new file mode 100644 index 0000000..8eb2536 --- /dev/null +++ b/discover-overlay.spec @@ -0,0 +1,68 @@ +%define pypi_name discover_overlay + +Name: discover-overlay +Version: 0.7.9 +Release: alt1 +Summary: Yet another Discord overlay for Linux written in Python using GTK3 +License: GPL-3.0-only +Group: Networking/Other +URL: https://github.com/trigg/Discover +VCS: https://github.com/trigg/Discover +Source: %name-%version.tar +BuildRequires: rpm-build-python3 +BuildRequires: python3-module-pygobject3 +BuildRequires: python3-module-websocket-client +BuildRequires: python3-module-pyxdg +BuildRequires: python3-module-requests +BuildRequires: python3-module-pillow +BuildRequires: python3-module-xlib +BuildRequires: python3-module-setuptools +BuildRequires: python3-module-pulsectl-asyncio +BuildRequires: bash + +%description +Discover-Overlay is a GTK3 overlay written in Python3. +It can be configured to show who is currently talking on discord or +it can be set to display text and images from a preconfigured channel. +It is fully customisable and can be configured to display anywhere +on the screen. We fully support X11 and wlroots based environments. +We felt the need to make this project due to the shortcomings in support +on Linux by the official discord client. + +%package -n python3-module-%pypi_name +Summary: Moonraker - API Web Server for Klipper +BuildArch: noarch +Group: Development/Python3 + +%description -n python3-module-%pypi_name +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + +%prep +%setup + +%build +export PDM_BUILD_SCM_VERSION=%version +%pyproject_build + +%install +%pyproject_install + +%files +%_bindir/discover-overlay +%_desktopdir/%{pypi_name}* +#%_iconsdir/* +/usr/share/icons/hicolor/256x256/apps/discover-overlay-default.png +/usr/share/icons/hicolor/256x256/apps/discover-overlay-tray.png +/usr/share/icons/hicolor/256x256/apps/discover-overlay.png +/usr/share/icons/hicolor/scalable/apps/discover-overlay-default.svg +/usr/share/icons/hicolor/scalable/apps/discover-overlay-tray.svg +/usr/share/icons/hicolor/scalable/apps/discover-overlay.svg + + +%files -n python3-module-%pypi_name +%python3_sitelibdir_noarch/%pypi_name +%python3_sitelibdir_noarch/%pypi_name-%version.dist-info + +%changelog +* Fri Feb 20 2026 Tesla Bittgenstein 0.7.9-alt1 +- Initial build. diff --git a/discover_overlay/discover_overlay.py b/discover_overlay/discover_overlay.py index 705e7f0..4e75283 100755 --- a/discover_overlay/discover_overlay.py +++ b/discover_overlay/discover_overlay.py @@ -97,35 +97,6 @@ class Discover: """ Read in arg list from command or RPC and act accordingly """ - if "--help" in data or "-h" in data: - print(_("Usage") + ": discover-overlay [OPTIONS]... ") - print(_("Show an X11 or wlroots overlay with information")) - print(_("from Discord client")) - print("") - print(" -c, --configure ", _("Open configuration window")) - print(" -x, --close ", - _("Close currently running instance")) - print(" -v, --debug ", - _("Verbose output for aid in debugging")) - print(" -h, --help ", _("This screen")) - print(" --hide ", _("Hide overlay")) - print(" --show ", _("Show overlay")) - print(" --rpc ", - _("Send command, not start new instance.")) - print(" --mute ", _("Set own user to mute")) - print(" --unmute ", _("Set unmuted")) - print(" --toggle-mute ", _("Toggle muted")) - print(" --deaf ", _("Set own user to deafened")) - print(" --undeaf ", _("Unset user deafened state")) - print(" --toggle-deaf ", _("Toggle deaf")) - print(" --moveto=XX ", - _("Move the user into voice room, by Room ID")) - print(" --minimized ", - _("If tray icon is enabled, start with only tray icon and no configuration window")) - print("") - print(_("For gamescope compatibility ensure ENV has 'GDK_BACKEND=x11'")) - if normal_close: - sys.exit(0) if "--close" in data or "-x" in data: self.exit() if "--steamos" in data or "-s" in data: @@ -155,6 +126,9 @@ class Discover: if "--refresh-guilds" in data: if self.connection: self.connection.req_guilds() + if "--leave" in data or "-l" in data: + if self.connection: + self.connection.change_voice_room(None) pattern = re.compile("--moveto=([0-9]+)") if any((match := pattern.match(x)) for x in data): if self.connection: @@ -487,6 +461,60 @@ class Discover: if deaf is not None: GLib.idle_add(self.connection.set_deaf, deaf) +def show_help(): + print(_("Usage") + ": discover-overlay [OPTIONS]... ") + print(_("Show an X11 or wlroots overlay with information")) + print(_("from Discord client")) + print("") + print(" -c, --configure ", _("Open configuration window")) + print(" -x, --close ", + _("Close currently running instance")) + print(" -v, --debug ", + _("Verbose output for aid in debugging")) + print(" -h, --help ", _("This screen")) + print(" -V, --version ", _("Show version information")) + print(" --hide ", _("Hide overlay")) + print(" --show ", _("Show overlay")) + print(" --mute ", _("Set own user to mute")) + print(" --unmute ", _("Set unmuted")) + print(" --toggle-mute ", _("Toggle muted")) + print(" --deaf ", _("Set own user to deafened")) + print(" --undeaf ", _("Unset user deafened state")) + print(" --toggle-deaf ", _("Toggle deaf")) + print(" --moveto=XX ", + _("Move the user into voice room, by Room ID")) + print(" --leave ", _("Leave the current voice channel")) + print(" --minimized ", + _("If tray icon is enabled, start with only tray icon and no configuration window")) + print("") + print(_("For gamescope compatibility ensure ENV has 'GDK_BACKEND=x11'")) + +def show_version(): + print(pkg_resources.get_distribution('discover_overlay').version) + +def is_a_controller(argv): + + actions = { + "-x", "--close", + "--hide", "--show", + "--mute", "--unmute", "--toggle-mute", + "--deaf", "--undeaf", "--toggle-deaf", + "-l", "--leave", + "--refresh-guilds", + } + controls = { + "--moveto=", + "--guild-request=", + } + for arg in argv: + # Match the actions (i.e --mute, --deafen) + if arg in actions: + return True + # Match the controls (i.e --moveto=123456789 and --guild-request=987654321) + for control in controls: + if arg.startswith(control): + return True + return False def entrypoint(): """ @@ -502,6 +530,12 @@ def entrypoint(): """ signal.signal(signal.SIGINT, signal.SIG_DFL) + if "--help" in sys.argv or "-h" in sys.argv: + show_help() + return + if "--version" in sys.argv or "-V" in sys.argv: + show_version() + return # Find Config directory config_dir = os.path.join(xdg_config_home, "discover_overlay") os.makedirs(config_dir, exist_ok=True) @@ -512,6 +546,17 @@ def entrypoint(): config_file = os.path.join(config_dir, "config.ini") debug_file = os.path.join(config_dir, "output.txt") + if "-c" in sys.argv or "--configure" in sys.argv: + _settings = MainSettingsWindow(config_file, rpc_file, channel_file, sys.argv[1:]) + Gtk.main() + return + + if is_a_controller(sys.argv): + line = " ".join(arg for arg in sys.argv[1:]).strip() + with open(rpc_file, "w", encoding="utf-8") as f: + f.write(line) + return + # Prepare logger logging.getLogger().setLevel(logging.INFO) log_format = "%(levelname)s - %(name)s - %(message)s" @@ -528,30 +573,14 @@ def entrypoint(): if 'GAMESCOPE_WAYLAND_DISPLAY' in os.environ: os.unsetenv("WAYLAND_DISPLAY") + # Catch any errors and log them try: - if "--rpc" in sys.argv: - # Send command to overlay - line = "" - for arg in sys.argv[1:]: - line = f"{line} {arg}" - with open(rpc_file, "w", encoding="utf-8") as tfile: - tfile.write(line) - log.warning("Sent RPC command") - else: - if "-c" in sys.argv or "--configure" in sys.argv: - # Show config window - _settings = MainSettingsWindow( - config_file, rpc_file, channel_file, sys.argv[1:]) - Gtk.main() - else: - # Tell any other running overlay to close - with open(rpc_file, "w", encoding="utf-8") as tfile: - tfile.write("--close") - # Show the overlay - Discover(rpc_file, config_file, channel_file, - debug_file, sys.argv[1:]) - return + with open(rpc_file, "w", encoding="utf-8") as tfile: + tfile.write("--close") + # Show the overlay + Discover(rpc_file, config_file, channel_file, + debug_file, sys.argv[1:]) except Exception as ex: # pylint: disable=broad-except log.error(ex)