Philipp Hörist pushed to branch master at gajim / gajim
Commits: 02cca30d by André at 2020-11-25T20:16:14+01:00 Support idle time from org.freedesktop.ScreenSaver
- - - - -
2 changed files:
- flatpak/org.gajim.Gajim.yaml - gajim/common/idle.py
Changes:
===================================== flatpak/org.gajim.Gajim.yaml ===================================== @@ -21,6 +21,7 @@ finish-args: - --talk-name=org.mpris.MediaPlayer2.* - --talk-name=org.freedesktop.portal.Fcitx # Automatic status + - --talk-name=org.freedesktop.ScreenSaver - --talk-name=org.gnome.Mutter.IdleMonitor # Keyring - --talk-name=org.freedesktop.secrets
===================================== gajim/common/idle.py ===================================== @@ -33,6 +33,57 @@ log = logging.getLogger('gajim.c.idle')
+class DBusFreedesktopIdleMonitor: + + def __init__(self): + self.last_idle_time = 0 + self._extended_away = False + + log.debug('Connecting to D-Bus') + self.dbus_proxy = Gio.DBusProxy.new_for_bus_sync( + Gio.BusType.SESSION, + Gio.DBusProxyFlags.NONE, + None, + 'org.freedesktop.ScreenSaver', + '/org/freedesktop/ScreenSaver', + 'org.freedesktop.ScreenSaver', + None + ) + log.debug('D-Bus connected') + + # Only the following call will trigger exceptions if the D-Bus + # interface/method/... does not exist. Using the failing method + # for class init to allow other idle monitors to be used on failure. + self._get_idle_sec_fail() + log.debug('D-Bus call test successful') + + def _get_idle_sec_fail(self): + (idle_time,) = self.dbus_proxy.call_sync( + 'GetSessionIdleTime', + None, + Gio.DBusCallFlags.NO_AUTO_START, + -1, + None + ) + return idle_time//1000 + + def get_idle_sec(self): + try: + self.last_idle_time = self._get_idle_sec_fail() + except GLib.Error as error: + log.warning( + 'org.freedesktop.ScreenSaver.GetSessionIdleTime() failed: %s', + error) + + return self.last_idle_time + + def set_extended_away(self, state): + self._extended_away = state + + def is_extended_away(self): + return self._extended_away + + class DBusGnomeIdleMonitor:
def __init__(self): @@ -257,15 +308,19 @@ def _get_idle_monitor(): return WindowsIdleMonitor()
try: - return DBusGnomeIdleMonitor() + return DBusFreedesktopIdleMonitor() except GLib.Error as error: log.info('Idle time via D-Bus not available: %s', error)
- try: - return XssIdleMonitor() - except OSError as error: - log.info('Idle time via XScreenSaverInfo ' - 'not available: %s', error) + try: + return DBusGnomeIdleMonitor() + except GLib.Error as error: + log.info('Idle time via D-Bus (GNOME) not available: %s', error) + + try: + return XssIdleMonitor() + except OSError as error: + log.info('Idle time via XScreenSaverInfo not available: %s', error)
def get_idle_sec(self): return self._idle_monitor.get_idle_sec()
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/02cca30da43bdb5d33e3e89cc1def1659...