Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2007-05-25 11:14:39 (GMT)
committer Simon McVittie <simon.mcvittie@collabora.co.uk>2007-05-25 11:14:39 (GMT)
commit56b95264cfb62e1b2b52872609487d804530655f (patch)
tree4a0b0b0ea52c22986195f06aa09bfaa6928ce643 /services
parentfdd8c315cf473731193187fb2b50a4b4a62c4928 (diff)
services/presence/psutils, buddy: Track NameOwnerChanged in IP4AddressMonitor
This means Buddy and its subclasses no longer need to care about NameOwnerChanged at all. The old code might not have worked anyway, since it was watching for NameOwnerChanged on the session bus, but invoking NM methods on the system bus.
Diffstat (limited to 'services')
-rw-r--r--services/presence/buddy.py7
-rw-r--r--services/presence/psutils.py31
2 files changed, 12 insertions, 26 deletions
diff --git a/services/presence/buddy.py b/services/presence/buddy.py
index 714b816..8ab9f10 100644
--- a/services/presence/buddy.py
+++ b/services/presence/buddy.py
@@ -533,19 +533,12 @@ class GenericOwner(Buddy):
self._owner = True
self._bus = dbus.SessionBus()
- self._bus.add_signal_receiver(self._name_owner_changed_cb,
- signal_name="NameOwnerChanged",
- dbus_interface="org.freedesktop.DBus")
def _ip4_address_changed_cb(self, monitor, address):
"""Handle IPv4 address change, set property to generate event"""
props = {_PROP_IP4_ADDRESS: address}
self.set_properties(props)
- def _name_owner_changed_cb(self, name, old, new):
- """Handle D-Bus services we care about appearing and disappearing."""
- self._ip4_addr_monitor.handle_name_owner_changed(name, old, new)
-
def get_registered(self):
"""Retrieve whether owner has registered with presence server"""
return self._registered
diff --git a/services/presence/psutils.py b/services/presence/psutils.py
index 97b1a5f..65a94d3 100644
--- a/services/presence/psutils.py
+++ b/services/presence/psutils.py
@@ -53,23 +53,13 @@ class IP4AddressMonitor(gobject.GObject):
def __init__(self):
gobject.GObject.__init__(self)
self._nm_present = False
+ self._nm_has_been_present = False
self._matches = []
self._addr = None
self._nm_obj = None
sys_bus = dbus.SystemBus()
- bus_object = sys_bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
- try:
- if bus_object.GetNameOwner(NM_SERVICE, dbus_interface='org.freedesktop.DBus'):
- self._nm_present = True
- except dbus.DBusException:
- pass
-
- if self._nm_present:
- self._connect_to_nm()
- else:
- addr = self._get_address_fallback()
- self._update_address(addr)
+ self._watch = sys_bus.watch_name_owner(NM_SERVICE, self._nm_owner_cb)
def do_get_property(self, pspec):
if pspec.name == "address":
@@ -163,20 +153,23 @@ class IP4AddressMonitor(gobject.GObject):
if new_state == 4: # NM_STATE_DISCONNECTED
self._update_address(None)
- def handle_name_owner_changed(self, name, old, new):
+ def _nm_owner_cb(self, unique_name):
"""Clear state when NM goes away"""
- if name != NM_SERVICE:
- return
- if (old and len(old)) and (not new and not len(new)):
- # NM went away
+ if unique_name == '':
+ # NM went away, or isn't there at all
self._nm_present = False
for match in self._matches:
match.remove()
self._matches = []
- self._update_address(None)
- elif (not old and not len(old)) and (new and len(new)):
+ if self._nm_has_been_present:
+ self._update_address(None)
+ else:
+ addr = self._get_address_fallback()
+ self._update_address(addr)
+ elif not self._nm_present:
# NM started up
self._nm_present = True
+ self._nm_has_been_present = True
self._connect_to_nm()
def _get_iface_address(self, iface):