Blob Blame History Raw
diff -ur '--exclude=*~' '--exclude=*pycache*' gphotoframe-2.0.2-hg2084299dffb6/lib/dbus/idlecheck.py gphotoframe-2.0.2-hg2084299dffb6.new/lib/dbus/idlecheck.py
--- gphotoframe-2.0.2-hg2084299dffb6/lib/dbus/idlecheck.py	2019-08-21 01:34:09.000000000 +0900
+++ gphotoframe-2.0.2-hg2084299dffb6.new/lib/dbus/idlecheck.py	2021-03-16 12:39:35.187129612 +0900
@@ -1,6 +1,8 @@
 import sys
+import re
 
 from gi.repository import Gio
+from gi.repository import GLib
 
 from ..utils.gnomescreensaver import is_screensaver_mode
 
@@ -9,6 +11,9 @@
 
     def __init__(self):
         self.is_screensaver = is_screensaver_mode()
+        self.is_service_active = True
+        self.service_known_times = 0
+        self.pattern_service_unknown = re.compile(r"org\.freedesktop\.DBus\.Error\.ServiceUnknown")
 
         try:
             bus = Gio.bus_get_sync(Gio.BusType.SESSION, None)
@@ -24,9 +29,17 @@
         status = False
 
         try:
-            status = False if self.is_screensaver else self.proxy.GetActive()
+            status = False if self.is_screensaver else ( self.is_service_active and self.proxy.GetActive() )
         except AttributeError:
             pass
+        except GLib.Error:
+            errormsg = str(sys.exc_info()[1])
+            print ("Exception: %s" % errormsg)
+            if self.pattern_service_unknown.search(errormsg):
+                self.service_known_times += 1
+                if self.service_known_times >= 3:
+                    print ("Disabling idle status polling.")
+                    self.is_service_active = False
         except:
             print ("Exception: %s" % sys.exc_info()[1])