Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2007-05-24 15:54:15 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2007-05-24 15:54:15 (GMT)
commit9786385baa523e074584f825e9a5127f1dc23f8f (patch)
treebc2de593e129ebe3fdf574ea9f98b27036876689
parent98c5c0734ecfbf3e996b80bbe0b615e63b94295a (diff)
parent494e17b3cd03aa43a5d170d42e4463428a000272 (diff)
Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
-rw-r--r--services/presence/buddy.py38
-rw-r--r--services/presence/server_plugin.py1
-rw-r--r--sugar/presence/presenceservice.py45
3 files changed, 72 insertions, 12 deletions
diff --git a/services/presence/buddy.py b/services/presence/buddy.py
index 53999e8..ab397ef 100644
--- a/services/presence/buddy.py
+++ b/services/presence/buddy.py
@@ -236,6 +236,28 @@ class Buddy(ExportedGObject):
full set of properties, just the changes.
"""
+ @dbus.service.signal(_BUDDY_INTERFACE, signature='sou')
+ def TelepathyHandleAdded(self, tp_conn_name, tp_conn_path, handle):
+ """Another Telepathy handle has become associated with the buddy.
+
+ This must only be emitted for non-channel-specific handles.
+
+ tp_conn_name -- The bus name at which the Telepathy connection may be
+ found
+ tp_conn_path -- The object path at which the Telepathy connection may
+ be found
+ handle -- The handle of type CONTACT, which is not channel-specific,
+ newly associated with the buddy
+ """
+
+ @dbus.service.signal(_BUDDY_INTERFACE, signature='sou')
+ def TelepathyHandleRemoved(self, tp_conn_name, tp_conn_path, handle):
+ """A Telepathy handle has ceased to be associated with the buddy,
+ probably because that contact went offline.
+
+ The parameters are the same as for TelepathyHandleAdded.
+ """
+
# dbus methods
@dbus.service.method(_BUDDY_INTERFACE,
in_signature="", out_signature="ay")
@@ -294,6 +316,22 @@ class Buddy(ExportedGObject):
props[_PROP_CURACT] = ""
return props
+ @dbus.service.method(_BUDDY_INTERFACE,
+ in_signature='', out_signature='a(sou)')
+ def GetTelepathyHandles(self):
+ """Return a list of non-channel-specific Telepathy contact handles
+ associated with this Buddy.
+
+ :Returns:
+ An array of triples (connection well-known bus name, connection
+ object path, handle).
+ """
+ ret = []
+ for plugin in self.handles:
+ conn = plugin.get_connection()
+ ret.append((str(conn.service_name), conn.object_path,
+ self.handles[plugin]))
+
# methods
def object_path(self):
"""Retrieve our dbus.ObjectPath object"""
diff --git a/services/presence/server_plugin.py b/services/presence/server_plugin.py
index d4930c9..daa31aa 100644
--- a/services/presence/server_plugin.py
+++ b/services/presence/server_plugin.py
@@ -125,6 +125,7 @@ class ServerPlugin(gobject.GObject):
"""
gobject.GObject.__init__(self)
+ self._conn = None
self._icon_cache = BuddyIconCache()
self._registry = registry
diff --git a/sugar/presence/presenceservice.py b/sugar/presence/presenceservice.py
index 1bc9a57..a0b60ee 100644
--- a/sugar/presence/presenceservice.py
+++ b/sugar/presence/presenceservice.py
@@ -16,20 +16,15 @@
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
-import dbus, dbus.glib, gobject
import logging
-# XXX use absolute imports
-# from sugar.presence import buddy, activity
-# this *kind* of relative import is deprecated
-# with an explicit relative import slated to be
-# introduced (available in Python 2.5 with a __future__
-# import), that would read as:
-# from . import buddy, activity
-# see PEP: http://docs.python.org/whatsnew/pep-328.html
+import dbus
+import dbus.exceptions
+import dbus.glib
+import gobject
-import buddy
-from activity import Activity
+from sugar.presence.buddy import Buddy
+from sugar.presence.activity import Activity
DBUS_SERVICE = "org.laptop.Sugar.Presence"
@@ -159,7 +154,7 @@ class PresenceService(gobject.GObject):
obj = self._objcache[object_path]
except KeyError:
if object_path.startswith(self._PS_BUDDY_OP):
- obj = buddy.Buddy(self._bus, self._new_object,
+ obj = Buddy(self._bus, self._new_object,
self._del_object, object_path)
elif object_path.startswith(self._PS_ACTIVITY_OP):
obj = Activity(self._bus, self._new_object,
@@ -317,6 +312,32 @@ class PresenceService(gobject.GObject):
return None
return self._new_object(buddy_op)
+ def get_buddy_by_telepathy_handle(self, tp_conn_name, tp_conn_path,
+ handle):
+ """Retrieve single Buddy object for the given public key
+
+ :Parameters:
+ `tp_conn_name` : str
+ The well-known bus name of a Telepathy connection
+ `tp_conn_path` : dbus.ObjectPath
+ The object path of the Telepathy connection
+ `handle` : int or long
+ The handle of a Telepathy contact on that connection,
+ of type HANDLE_TYPE_CONTACT. This may not be a
+ channel-specific handle.
+ :Returns: the Buddy object, or None if the buddy is not found
+ """
+ try:
+ buddy_op = self._ps.GetBuddyByTelepathyHandle(tp_conn_name,
+ tp_conn_path,
+ handle)
+ except dbus.exceptions.DBusException, err:
+ _logger.warn('Unable to retrieve buddy handle for handle %u at '
+ 'conn %s:%s from presence service: %s',
+ handle, tp_conn_name, tp_conn_path, err)
+ return None
+ return self._new_object(buddy_op)
+
def get_owner(self):
"""Retrieves the laptop "owner" Buddy object."""
try: