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/02cca30da43bdb5d33e3e89cc1def16593835bf4

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/02cca30da43bdb5d33e3e89cc1def16593835bf4
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to