From 21004e5ba178f364ca04ed49b9a2206175cb8fdc Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Wed, 22 Sep 2010 11:46:31 +0000 Subject: Don't miss early nick updates from our contacts #2355 We were receiving the nick before the BuddyModel for that contact had been created, so we were failing to store it. This means we create the BuddyModel as soon as we have a contact-id but Neighborhood defers buddy-added emission until we have gotten the key property. --- diff --git a/src/jarabe/model/neighborhood.py b/src/jarabe/model/neighborhood.py index fc7a0f1..ed23f7f 100644 --- a/src/jarabe/model/neighborhood.py +++ b/src/jarabe/model/neighborhood.py @@ -160,8 +160,7 @@ class _Account(gobject.GObject): 'activity-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([object])), 'buddy-added': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - ([object, object, object, object])), + gobject.TYPE_NONE, ([object, object, object])), 'buddy-updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([object, object])), 'buddy-removed': (gobject.SIGNAL_RUN_FIRST, @@ -536,8 +535,6 @@ class _Account(gobject.GObject): def __got_buddy_info_cb(self, handle, nick, properties): logging.debug('_Account.__got_buddy_info_cb %r', handle) - self.emit('buddy-added', self._buddy_handles[handle], nick, - properties.get('key', None), handle) self.emit('buddy-updated', self._buddy_handles[handle], properties) def __get_contact_attributes_cb(self, attributes): @@ -587,8 +584,8 @@ class _Account(gobject.GObject): error_handler=partial(self.__error_handler_cb, 'BuddyInfo.GetCurrentActivity'), timeout=_QUERY_DBUS_TIMEOUT) - else: - self.emit('buddy-added', contact_id, nick, None, handle) + + self.emit('buddy-added', contact_id, nick, handle) def __got_activities_cb(self, buddy_handle, activities): logging.debug('_Account.__got_activities_cb %r %r', buddy_handle, @@ -811,7 +808,7 @@ class Neighborhood(gobject.GObject): if needs_reconnect: account.Reconnect() - def __buddy_added_cb(self, account, contact_id, nick, key, handle): + def __buddy_added_cb(self, account, contact_id, nick, handle): logging.debug('__buddy_added_cb %r', contact_id) if contact_id in self._buddies: @@ -822,12 +819,9 @@ class Neighborhood(gobject.GObject): nick=nick, account=account.object_path, contact_id=contact_id, - key=key, handle=handle) self._buddies[contact_id] = buddy - self.emit('buddy-added', buddy) - def __buddy_updated_cb(self, account, contact_id, properties): logging.debug('__buddy_updated_cb %r', contact_id) if contact_id is None: @@ -840,9 +834,21 @@ class Neighborhood(gobject.GObject): return buddy = self._buddies[contact_id] + + is_new = buddy.props.key is None and 'key' in properties + if 'color' in properties: buddy.props.color = XoColor(properties['color']) + if 'key' in properties: + buddy.props.key = properties['key'] + + if 'nick' in properties: + buddy.props.nick = properties['nick'] + + if is_new: + self.emit('buddy-added', buddy) + def __buddy_removed_cb(self, account, contact_id): logging.debug('Neighborhood.__buddy_removed_cb %r', contact_id) if contact_id not in self._buddies: -- cgit v0.9.1