From 86ab6ca36b2ab0b45096bd209bbfb72db47683f4 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 23 Apr 2007 17:11:21 +0000 Subject: Reconnect to the PS if it goes away and comes back --- (limited to 'sugar') 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 -- cgit v0.9.1