diff --git a/discover_overlay/discover_overlay.py b/discover_overlay/discover_overlay.py index ffc365b..5810b29 100755 --- a/discover_overlay/discover_overlay.py +++ b/discover_overlay/discover_overlay.py @@ -145,19 +145,9 @@ class Discover: if "--steamos" in data or "-s" in data: self.steamos = True if "--hide" in data: - if self.voice_overlay: - self.voice_overlay.set_hidden(True) - if self.text_overlay: - self.text_overlay.set_hidden(True) - if self.notification_overlay: - self.notification_overlay.set_hidden(True) + self.config_set("general", "hideoverlay", "True") if "--show" in data: - if self.voice_overlay: - self.voice_overlay.set_hidden(False) - if self.text_overlay: - self.text_overlay.set_hidden(False) - if self.notification_overlay: - self.notification_overlay.set_hidden(False) + self.config_set("general", "hideoverlay", "False") if "--mute" in data: if self.connection: self.connection.set_mute(True) @@ -182,6 +172,15 @@ class Discover: if self.connection: self.connection.request_text_rooms_for_guild(match.group(1)) + def config_set(self, context, key, value): + config = ConfigParser(interpolation=None) + config.read(self.config_file) + if not context in config.sections(): + config.add_section(context) + config.set(context, key, value) + with open(self.config_file, 'w') as file: + config.write(file) + def rpc_changed(self, _a=None, _b=None, _c=None, _d=None): """ Called when the RPC file has been altered @@ -391,6 +390,11 @@ class Discover: self.set_force_xshape( config.getboolean("general", "xshape", fallback=False)) + hidden = config.getboolean("general", "hideoverlay", fallback=False) + self.voice_overlay.set_hidden(hidden) + self.text_overlay.set_hidden(hidden) + self.notification_overlay.set_hidden(hidden) + def get_monitor_index(self, name): """ Helper function to find the index number of the monitor @@ -479,23 +483,26 @@ def entrypoint(): """ Entry Point. - Check for PID & RPC. + Find all needed file locations and read args - If an overlay is already running then pass the args along and close + if '--rpc' simply pass them over the rpc file - Otherwise start up the overlay! + if '-c' or '--configure' start the config window only + + otherwise start overlay """ + # Find Config directory config_dir = os.path.join(xdg_config_home, "discover_overlay") os.makedirs(config_dir, exist_ok=True) - line = "" - for arg in sys.argv[1:]: - line = "%s %s" % (line, arg) + # Find RPC, Channel info, config and debug files rpc_file = os.path.join(config_dir, "discover_overlay.rpc") channel_file = os.path.join(config_dir, "channels.rpc") config_file = os.path.join(config_dir, "config.ini") debug_file = os.path.join(config_dir, "output.txt") + + # Prepare logger logging.getLogger().setLevel(logging.INFO) FORMAT = "%(levelname)s - %(name)s - %(message)s" if "--debug" in sys.argv or "-v" in sys.argv: @@ -506,21 +513,30 @@ def entrypoint(): log = logging.getLogger(__name__) log.info("Starting Discover Overlay: %s", pkg_resources.get_distribution('discover_overlay').version) + + # Catch any errors and log them try: if "--rpc" in sys.argv: + # Send command to overlay + line = "" + for arg in sys.argv[1:]: + line = "%s %s" % (line, arg) with open(rpc_file, "w") 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() - sys.exit(0) - with open(rpc_file, "w") as tfile: - tfile.write("--close") - Discover(rpc_file, config_file, channel_file, - debug_file, sys.argv[1:]) + else: + # Tell any other running overlay to close + with open(rpc_file, "w") 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: diff --git a/discover_overlay/glade/settings.glade b/discover_overlay/glade/settings.glade index 3be2a5b..b03605d 100644 --- a/discover_overlay/glade/settings.glade +++ b/discover_overlay/glade/settings.glade @@ -2091,7 +2091,7 @@ - + True False @@ -2207,6 +2207,31 @@ 1 + + + True + False + Hide overlays + 0 + + + 0 + 4 + + + + + core_hide_overlay + True + True + False + True + + + 1 + 4 + + 4 diff --git a/discover_overlay/glade/settings.glade~ b/discover_overlay/glade/settings.glade~ index e88ac8c..ca2ac5e 100644 --- a/discover_overlay/glade/settings.glade~ +++ b/discover_overlay/glade/settings.glade~ @@ -642,7 +642,6 @@ False 1 5 - True True @@ -2092,7 +2091,7 @@ - + True False @@ -2208,6 +2207,32 @@ 1 + + + True + False + Hide overlays + 0 + + + 0 + 4 + + + + + core_hide_overlay + True + True + False + True + + + + 1 + 4 + + 4 diff --git a/discover_overlay/settings_window.py b/discover_overlay/settings_window.py index 62f0252..0e5774e 100644 --- a/discover_overlay/settings_window.py +++ b/discover_overlay/settings_window.py @@ -51,6 +51,7 @@ class MainSettingsWindow(): self.channel_ids = [] self.current_guild = "0" self.current_channel = "0" + self.hidden_overlay = False self.menu = self.make_menu() self.make_sys_tray_icon(self.menu) @@ -125,17 +126,20 @@ class MainSettingsWindow(): self.monitor_channel = channel_file.monitor_file(0, None) self.monitor_channel.connect("changed", self.populate_guild_menu) - self.read_config() self.server_handler = self.widget['text_server'].connect( 'changed', self.text_server_changed) self.channel_handler = self.widget['text_channel'].connect( 'changed', self.text_channel_changed) + self.hidden_overlay_handler = self.widget['core_hide_overlay'].connect( + 'toggled', self.core_hide_overlay_changed) + + self.read_config() self.populate_guild_menu() builder.connect_signals(self) print(args) - if not ( self.show_sys_tray_icon and '--minimized' in self.args ): + if not (self.show_sys_tray_icon and '--minimized' in self.args): window.show() def request_channels_from_guild(self, guild_id): @@ -445,6 +449,9 @@ class MainSettingsWindow(): "general", "showsystray", fallback=True) self.set_sys_tray_icon_visible(self.show_sys_tray_icon) self.widget['core_show_tray_icon'].set_active(self.show_sys_tray_icon) + self.hidden_overlay = self.show_sys_tray_icon = config.getboolean( + "general", "hideoverlay", fallback=False) + self.update_toggle_overlay() def make_colour(self, col): col = json.loads(col) @@ -533,19 +540,41 @@ class MainSettingsWindow(): """ menu = Gtk.Menu() settings_opt = Gtk.MenuItem.new_with_label(_("Settings")) + self.toggle_opt = Gtk.MenuItem.new_with_label(_("Hide overlay")) close_overlay_opt = Gtk.MenuItem.new_with_label(_("Close Overlay")) close_opt = Gtk.MenuItem.new_with_label(_("Close Settings")) menu.append(settings_opt) + menu.append(self.toggle_opt) menu.append(close_overlay_opt) menu.append(close_opt) settings_opt.connect("activate", self.present_settings) + self.toggle_opt.connect("activate", self.toggle_overlay) close_overlay_opt.connect("activate", self.close_overlay) close_opt.connect("activate", self.close_app) menu.show_all() return menu + def toggle_overlay(self, _a=None, _b=None): + self.hidden_overlay = not self.hidden_overlay + print("TOGGLE TO %s" % (self.hidden_overlay)) + self.config_set("general", "hideoverlay", "%s" % (self.hidden_overlay)) + self.update_toggle_overlay() + + def update_toggle_overlay(self, _a=None, _b=None): + self.widget['core_hide_overlay'].handler_block( + self.hidden_overlay_handler) + + self.widget['core_hide_overlay'].set_active(self.hidden_overlay) + + self.widget['core_hide_overlay'].handler_unblock( + self.hidden_overlay_handler) + if self.hidden_overlay: + self.toggle_opt.set_label(_("Show overlay")) + else: + self.toggle_opt.set_label(_("Hide overlay")) + def close_overlay(self, _a=None, _b=None): with open(self.rpc_file, 'w') as f: f.write('--rpc --close') @@ -955,3 +984,6 @@ class MainSettingsWindow(): def core_show_tray_icon_changed(self, button): self.set_sys_tray_icon_visible(button.get_active()) self.config_set("general", "showsystray", "%s" % (button.get_active())) + + def core_hide_overlay_changed(self, button): + self.toggle_overlay()