diff options
author | Dan Williams <dcbw@redhat.com> | 2007-04-23 17:11:21 (GMT) |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2007-04-23 17:11:21 (GMT) |
commit | 86ab6ca36b2ab0b45096bd209bbfb72db47683f4 (patch) | |
tree | 89184ab21756329fd41b30e92bca8a489b19dde8 | |
parent | 30a50bd9fc2d2f0e794b7dafca7b7d8181defd0a (diff) |
Reconnect to the PS if it goes away and comes back
-rw-r--r-- | sugar/presence/presenceservice.py | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/sugar/presence/presenceservice.py b/sugar/presence/presenceservice.py index cd5db0c..c3ed5c7 100644 --- a/sugar/presence/presenceservice.py +++ b/sugar/presence/presenceservice.py @@ -71,20 +71,27 @@ class PresenceService(gobject.GObject): """ gobject.GObject.__init__(self) self._objcache = {} + + # Get a connection to the session bus + self._bus = dbus.SessionBus() + self._bus.add_signal_receiver(self._name_owner_changed_cb, + signal_name="NameOwnerChanged", + dbus_interface="org.freedesktop.DBus") + # attempt to load the interface to the service... self._allow_offline_iface = allow_offline_iface self._get_ps() - - _bus_ = None - def _get_bus(self): - """Retrieve dbus session-bus or create new""" - if not self._bus_: - self._bus_ = dbus.SessionBus() - return self._bus_ - _bus = property( - _get_bus, None, None, - """DBUS SessionBus object for user-local communications""" - ) + + def _name_owner_changed_cb(self, name, old, new): + if name != DBUS_SERVICE: + return + if (old and len(old)) and (not new and not len(new)): + # PS went away, clear out PS dbus service wrapper + self._ps_ = None + elif (not old and not len(old)) and (new and len(new)): + # PS started up + self._get_ps() + _ps_ = None def _get_ps(self): """Retrieve dbus interface to PresenceService |