Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/jarabe/model/neighborhood.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/jarabe/model/neighborhood.py')
-rw-r--r--src/jarabe/model/neighborhood.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/jarabe/model/neighborhood.py b/src/jarabe/model/neighborhood.py
index c355e25..022a35a 100644
--- a/src/jarabe/model/neighborhood.py
+++ b/src/jarabe/model/neighborhood.py
@@ -336,6 +336,8 @@ class _Account(gobject.GObject):
logging.debug('_Account.__current_activity_changed_cb %r %r %r', contact_handle, activity_id, room_handle)
if contact_handle in self._buddy_handles:
contact_id = self._buddy_handles[contact_handle]
+ if not activity_id and room_handle:
+ activity_id = self._activity_handles.get(room_handle, '')
self.emit('current-activity-updated', contact_id, activity_id)
def __get_current_activity_cb(self, contact_handle, activity_id, room_handle):
@@ -366,6 +368,16 @@ class _Account(gobject.GObject):
error_handler=partial(self.__error_handler_cb,
'ActivityProperties.GetProperties'))
+ # Sometimes we'll get CurrentActivityChanged before we get to
+ # know about the activity so we miss the event. In that case,
+ # request again the current activity for this buddy.
+ connection = self._connection[CONNECTION_INTERFACE_BUDDY_INFO]
+ connection.GetCurrentActivity(
+ buddy_handle,
+ reply_handler=partial(self.__get_current_activity_cb, buddy_handle),
+ error_handler=partial(self.__error_handler_cb,
+ 'BuddyInfo.GetCurrentActivity'))
+
if not activity_id in self._buddies_per_activity:
self._buddies_per_activity[activity_id] = set()
self._buddies_per_activity[activity_id].add(buddy_handle)
@@ -746,6 +758,10 @@ class Neighborhood(gobject.GObject):
logging.debug('__current_activity_updated_cb Unknown buddy with '
'contact_id %r', contact_id)
return
+ if activity_id and activity_id not in self._activities:
+ logging.debug('__current_activity_updated_cb Unknown activity with '
+ 'id %s', activity_id)
+ activity_id = ''
buddy = self._buddies[contact_id]
if buddy.props.current_activity is not None: