Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-09-22 11:46:31 (GMT)
committer Tomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-09-29 14:30:14 (GMT)
commit21004e5ba178f364ca04ed49b9a2206175cb8fdc (patch)
treeea995eccd99dc399ba2c33c1cb0326bd42b341e7
parent2c429471b3c4384ec2f3fe23513f6964e8f39a72 (diff)
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.
-rw-r--r--src/jarabe/model/neighborhood.py26
1 files changed, 16 insertions, 10 deletions
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: