Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2010-03-15 13:36:22 (GMT)
committer Tomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-08-20 13:02:26 (GMT)
commitf02ae3b37cc683e7c87a91bbe215433719cc29ca (patch)
tree4b6bbd6b7468e8795a8592790e1dc268fb5a4d5f
parent0b64471fbd233f53a48760cbe52ddcc317817f40 (diff)
Keep aliases updated and handle buddies going offline
-rw-r--r--src/jarabe/model/neighborhood.py57
1 files changed, 41 insertions, 16 deletions
diff --git a/src/jarabe/model/neighborhood.py b/src/jarabe/model/neighborhood.py
index 9789bbf..6838d42 100644
--- a/src/jarabe/model/neighborhood.py
+++ b/src/jarabe/model/neighborhood.py
@@ -21,25 +21,25 @@ import gobject
import gconf
import dbus
from dbus import PROPERTIES_IFACE
-from telepathy.interfaces import CONNECTION
-from telepathy.interfaces import CONNECTION_INTERFACE_REQUESTS
-from telepathy.interfaces import CONNECTION_INTERFACE_ALIASING
-from telepathy.interfaces import CONNECTION_INTERFACE_CONTACT_CAPABILITIES
-from telepathy.interfaces import CONNECTION_INTERFACE_CONTACTS
-from telepathy.interfaces import CHANNEL_INTERFACE
-from telepathy.interfaces import CHANNEL_INTERFACE_GROUP
-from telepathy.interfaces import ACCOUNT_MANAGER
-from telepathy.interfaces import CHANNEL_DISPATCHER
-from telepathy.interfaces import CHANNEL_REQUEST
-from telepathy.interfaces import CLIENT
-from telepathy.interfaces import CLIENT_HANDLER
-from telepathy.constants import HANDLE_TYPE_LIST
-from telepathy.client import Connection
-from telepathy.client import Channel
+from telepathy.interfaces import CONNECTION, \
+ CONNECTION_INTERFACE_REQUESTS, \
+ CONNECTION_INTERFACE_ALIASING, \
+ CONNECTION_INTERFACE_CONTACT_CAPABILITIES, \
+ CONNECTION_INTERFACE_CONTACTS, \
+ CONNECTION_INTERFACE_SIMPLE_PRESENCE, \
+ CHANNEL_INTERFACE, \
+ CHANNEL_INTERFACE_GROUP, \
+ ACCOUNT_MANAGER, \
+ CHANNEL_DISPATCHER, \
+ CHANNEL_REQUEST, \
+ CLIENT, \
+ CLIENT_HANDLER
+from telepathy.constants import HANDLE_TYPE_LIST, \
+ CONNECTION_PRESENCE_TYPE_OFFLINE
+from telepathy.client import Connection, Channel
from telepathy.server import DBusProperties
from sugar.graphics.xocolor import XoColor
-from sugar.presence import presenceservice
from sugar import activity
from sugar import dispatch
@@ -184,10 +184,35 @@ class Neighborhood(gobject.GObject):
'MembersChanged',
partial(self.__members_changed_cb, connection))
+ connection[CONNECTION_INTERFACE_ALIASING].connect_to_signal(
+ 'AliasesChanged',
+ partial(self.__aliases_changed_cb, connection))
+
+ connection[CONNECTION_INTERFACE_SIMPLE_PRESENCE].connect_to_signal(
+ 'PresencesChanged',
+ partial(self.__presences_changed_cb, connection))
+
handles = channel[PROPERTIES_IFACE].Get(CHANNEL_INTERFACE_GROUP, 'Members')
if handles:
self._add_handles(connection, handles)
+ def __presences_changed_cb(self, connection, presences):
+ logging.debug('__presences_changed_cb %r', presences)
+ for handle, presence in presences.iteritems():
+ if (connection.service_name, handle) in self._buddies:
+ presence_type, status, message = presence
+ if presence_type == CONNECTION_PRESENCE_TYPE_OFFLINE:
+ buddy = self._buddies[(connection.service_name, handle)]
+ del self._buddies[(connection.service_name, handle)]
+ self.emit('buddy-removed', buddy)
+
+ def __aliases_changed_cb(self, connection, aliases):
+ logging.debug('__aliases_changed_cb %r', aliases)
+ for handle, alias in aliases:
+ if (connection.service_name, handle) in self._buddies:
+ buddy = self._buddies[(connection.service_name, handle)]
+ buddy.props.nick = alias
+
def _add_handles(self, connection, handles):
interfaces = [CONNECTION, CONNECTION_INTERFACE_ALIASING]
attributes = connection[CONNECTION_INTERFACE_CONTACTS].GetContactAttributes(