Compare commits
2 commits
40edf315ea
...
559ac5933d
| Author | SHA1 | Date | |
|---|---|---|---|
| 559ac5933d | |||
|
|
6ec3ee0524 |
6 changed files with 172 additions and 62 deletions
2
.gear/rules
Normal file
2
.gear/rules
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
tar: v@version@:.
|
||||||
|
diff: v@version@:. . exclude=.gear exclude=*.spec
|
||||||
1
.gear/tags/list
Normal file
1
.gear/tags/list
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
02baf04eaa3a5fd546fdf9e507ea515bad973cc3 v0.7.9
|
||||||
3
.gear/upstream/remotes
Normal file
3
.gear/upstream/remotes
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
[remote "upstream"]
|
||||||
|
url = https://github.com/trigg/Discover.git
|
||||||
|
fetch = +refs/heads/*:refs/remotes/upstream/*
|
||||||
29
README.md
29
README.md
|
|
@ -27,7 +27,11 @@ This will close out any already running discover overlay for this user
|
||||||
#### Close the overlay
|
#### Close the overlay
|
||||||
`discover-overlay --close` or `discover-overlay -x`
|
`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
|
#### Open configuration window
|
||||||
`discover-overlay --configure` or `discover-overlay -c`
|
`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`
|
This will redirect all debug to the file `~/.config/discover-overlay/output.txt`
|
||||||
|
|
||||||
#### Hide the currently shown overlays
|
#### 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
|
#### 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
|
Note that if the process running the overlay has stopped or crashed then this will do nothing
|
||||||
|
|
||||||
#### Mute yourself in voice chat
|
#### Mute yourself in voice chat
|
||||||
`discover-overlay --rpc --mute`
|
`discover-overlay --mute`
|
||||||
|
|
||||||
#### Unmute yourself in voice chat
|
#### Unmute yourself in voice chat
|
||||||
`discover-overlay --rpc --unmute`
|
`discover-overlay --unmute`
|
||||||
|
|
||||||
#### Deafen yourself in voice chat
|
#### Deafen yourself in voice chat
|
||||||
`discover-overlay --rpc --deaf`
|
`discover-overlay --deaf`
|
||||||
|
|
||||||
#### Undeafen yourself in voice chat
|
#### 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
|
#### 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.
|
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
|
#### 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
|
Requests a list of guilds. Once collected, it will write them to
|
||||||
`~/.config/discover-overlay/channels.rpc`
|
`~/.config/discover-overlay/channels.rpc`
|
||||||
as a JSON object
|
as a JSON object
|
||||||
|
|
||||||
#### Populate the channel RPC file with a list of channels from a guild
|
#### 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
|
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`
|
`~/.config/discover-overlay/channels.rpc`
|
||||||
as a JSON object.
|
as a JSON object.
|
||||||
|
|
|
||||||
68
discover-overlay.spec
Normal file
68
discover-overlay.spec
Normal file
|
|
@ -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 <tesla@altlinux.org> 0.7.9-alt1
|
||||||
|
- Initial build.
|
||||||
|
|
@ -97,35 +97,6 @@ class Discover:
|
||||||
"""
|
"""
|
||||||
Read in arg list from command or RPC and act accordingly
|
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:
|
if "--close" in data or "-x" in data:
|
||||||
self.exit()
|
self.exit()
|
||||||
if "--steamos" in data or "-s" in data:
|
if "--steamos" in data or "-s" in data:
|
||||||
|
|
@ -155,6 +126,9 @@ class Discover:
|
||||||
if "--refresh-guilds" in data:
|
if "--refresh-guilds" in data:
|
||||||
if self.connection:
|
if self.connection:
|
||||||
self.connection.req_guilds()
|
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]+)")
|
pattern = re.compile("--moveto=([0-9]+)")
|
||||||
if any((match := pattern.match(x)) for x in data):
|
if any((match := pattern.match(x)) for x in data):
|
||||||
if self.connection:
|
if self.connection:
|
||||||
|
|
@ -487,6 +461,60 @@ class Discover:
|
||||||
if deaf is not None:
|
if deaf is not None:
|
||||||
GLib.idle_add(self.connection.set_deaf, deaf)
|
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():
|
def entrypoint():
|
||||||
"""
|
"""
|
||||||
|
|
@ -502,6 +530,12 @@ def entrypoint():
|
||||||
"""
|
"""
|
||||||
|
|
||||||
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
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
|
# Find Config directory
|
||||||
config_dir = os.path.join(xdg_config_home, "discover_overlay")
|
config_dir = os.path.join(xdg_config_home, "discover_overlay")
|
||||||
os.makedirs(config_dir, exist_ok=True)
|
os.makedirs(config_dir, exist_ok=True)
|
||||||
|
|
@ -512,6 +546,17 @@ def entrypoint():
|
||||||
config_file = os.path.join(config_dir, "config.ini")
|
config_file = os.path.join(config_dir, "config.ini")
|
||||||
debug_file = os.path.join(config_dir, "output.txt")
|
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
|
# Prepare logger
|
||||||
logging.getLogger().setLevel(logging.INFO)
|
logging.getLogger().setLevel(logging.INFO)
|
||||||
log_format = "%(levelname)s - %(name)s - %(message)s"
|
log_format = "%(levelname)s - %(name)s - %(message)s"
|
||||||
|
|
@ -528,30 +573,14 @@ def entrypoint():
|
||||||
if 'GAMESCOPE_WAYLAND_DISPLAY' in os.environ:
|
if 'GAMESCOPE_WAYLAND_DISPLAY' in os.environ:
|
||||||
os.unsetenv("WAYLAND_DISPLAY")
|
os.unsetenv("WAYLAND_DISPLAY")
|
||||||
|
|
||||||
|
|
||||||
# Catch any errors and log them
|
# Catch any errors and log them
|
||||||
try:
|
try:
|
||||||
if "--rpc" in sys.argv:
|
with open(rpc_file, "w", encoding="utf-8") as tfile:
|
||||||
# Send command to overlay
|
tfile.write("--close")
|
||||||
line = ""
|
# Show the overlay
|
||||||
for arg in sys.argv[1:]:
|
Discover(rpc_file, config_file, channel_file,
|
||||||
line = f"{line} {arg}"
|
debug_file, sys.argv[1:])
|
||||||
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
|
|
||||||
|
|
||||||
except Exception as ex: # pylint: disable=broad-except
|
except Exception as ex: # pylint: disable=broad-except
|
||||||
log.error(ex)
|
log.error(ex)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue