Use BuddyHandleJoined/Left to track buddy handles
This commit is contained in:
parent
f1df5361e1
commit
a618c95fe3
@ -69,8 +69,10 @@ class Activity(gobject.GObject):
|
|||||||
self._ps_del_object = del_obj_cb
|
self._ps_del_object = del_obj_cb
|
||||||
bobj = bus.get_object(self._PRESENCE_SERVICE, object_path)
|
bobj = bus.get_object(self._PRESENCE_SERVICE, object_path)
|
||||||
self._activity = dbus.Interface(bobj, self._ACTIVITY_DBUS_INTERFACE)
|
self._activity = dbus.Interface(bobj, self._ACTIVITY_DBUS_INTERFACE)
|
||||||
self._activity.connect_to_signal('BuddyJoined', self._buddy_joined_cb)
|
self._activity.connect_to_signal('BuddyHandleJoined',
|
||||||
self._activity.connect_to_signal('BuddyLeft', self._buddy_left_cb)
|
self._buddy_handle_joined_cb)
|
||||||
|
self._activity.connect_to_signal('BuddyHandleLeft',
|
||||||
|
self._buddy_handle_left_cb)
|
||||||
self._activity.connect_to_signal('NewChannel', self._new_channel_cb)
|
self._activity.connect_to_signal('NewChannel', self._new_channel_cb)
|
||||||
self._activity.connect_to_signal('PropertiesChanged',
|
self._activity.connect_to_signal('PropertiesChanged',
|
||||||
self._properties_changed_cb,
|
self._properties_changed_cb,
|
||||||
@ -180,8 +182,9 @@ class Activity(gobject.GObject):
|
|||||||
self.emit('buddy-joined', self._ps_new_object(object_path))
|
self.emit('buddy-joined', self._ps_new_object(object_path))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _buddy_joined_cb(self, object_path):
|
def _buddy_handle_joined_cb(self, object_path, handle):
|
||||||
gobject.idle_add(self._emit_buddy_joined_signal, object_path)
|
gobject.idle_add(self._emit_buddy_joined_signal, object_path)
|
||||||
|
self._handle_to_buddy[handle] = self._ps_new_object(handle)
|
||||||
|
|
||||||
def _emit_buddy_left_signal(self, object_path):
|
def _emit_buddy_left_signal(self, object_path):
|
||||||
"""Generate buddy-left GObject signal with presence Buddy object
|
"""Generate buddy-left GObject signal with presence Buddy object
|
||||||
@ -191,8 +194,10 @@ class Activity(gobject.GObject):
|
|||||||
self.emit('buddy-left', self._ps_new_object(object_path))
|
self.emit('buddy-left', self._ps_new_object(object_path))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _buddy_left_cb(self, object_path):
|
def _buddy_handle_left_cb(self, object_path, handle):
|
||||||
gobject.idle_add(self._emit_buddy_left_signal, object_path)
|
gobject.idle_add(self._emit_buddy_left_signal, object_path)
|
||||||
|
# XXX This may still lose the mapping we need:
|
||||||
|
del self._handle_to_buddy[handle]
|
||||||
|
|
||||||
def _emit_new_channel_signal(self, object_path):
|
def _emit_new_channel_signal(self, object_path):
|
||||||
"""Generate new-channel GObject signal with channel object path
|
"""Generate new-channel GObject signal with channel object path
|
||||||
@ -223,18 +228,6 @@ class Activity(gobject.GObject):
|
|||||||
still get the buddy after they have left the activity.
|
still get the buddy after they have left the activity.
|
||||||
"""
|
"""
|
||||||
buddy = self._handle_to_buddy.get(handle, None)
|
buddy = self._handle_to_buddy.get(handle, None)
|
||||||
if not buddy:
|
|
||||||
try:
|
|
||||||
buddyhandle = self._activity.GetBuddyByHandle(handle)
|
|
||||||
except:
|
|
||||||
# FIXME: Need to catch NotFoundError but that's defined
|
|
||||||
# in presence-service psutils
|
|
||||||
buddyhandle = None
|
|
||||||
if buddyhandle:
|
|
||||||
buddy = self._ps_new_object(buddyhandle)
|
|
||||||
self._handle_to_buddy[handle] = buddy
|
|
||||||
else:
|
|
||||||
buddy = None
|
|
||||||
return buddy
|
return buddy
|
||||||
|
|
||||||
def invite(self, buddy, message, response_cb):
|
def invite(self, buddy, message, response_cb):
|
||||||
|
Loading…
Reference in New Issue
Block a user