What I said was 0.8.15 was really 0.8.16
[theonering] / src / contacts.py
index 9906a10..41aca94 100644 (file)
@@ -15,7 +15,9 @@ class ContactsMixin(telepathy.server.ConnectionInterfaceContacts):
                telepathy.CONNECTION : 'contact-id',
                telepathy.CONNECTION_INTERFACE_SIMPLE_PRESENCE : 'presence',
                telepathy.CONNECTION_INTERFACE_ALIASING : 'alias',
+               telepathy.CONNECTION_INTERFACE_AVATARS : 'token',
                telepathy.CONNECTION_INTERFACE_CAPABILITIES : 'caps',
+               telepathy.CONNECTION_INTERFACE_CONTACT_CAPABILITIES : 'capabilities'
        }
 
        def __init__(self):
@@ -39,16 +41,17 @@ class ContactsMixin(telepathy.server.ConnectionInterfaceContacts):
                                                        out_signature='a{ua{sv}}', sender_keyword='sender')
        def GetContactAttributes(self, handles, interfaces, hold, sender):
                #InspectHandle already checks we're connected, the handles and handle type.
+               supportedInterfaces = set()
                for interface in interfaces:
-                       if interface not in self.ATTRIBUTES:
-                               raise telepathy.errors.InvalidArgument(
-                                       'Interface %s is not supported by GetContactAttributes' % (interface)
-                               )
+                       if interface in self.ATTRIBUTES:
+                               supportedInterfaces.add(interface)
+                       else:
+                               _moduleLogger.debug("Ignoring unsupported interface %s" % interface)
 
                handle_type = telepathy.HANDLE_TYPE_CONTACT
-               ret = {}
+               ret = dbus.Dictionary(signature='ua{sv}')
                for handle in handles:
-                       ret[handle] = {}
+                       ret[handle] = dbus.Dictionary(signature='sv')
 
                functions = {
                        telepathy.CONNECTION:
@@ -57,8 +60,12 @@ class ContactsMixin(telepathy.server.ConnectionInterfaceContacts):
                                lambda x: self.GetPresences(x).items(),
                        telepathy.CONNECTION_INTERFACE_ALIASING:
                                lambda x: self.GetAliases(x).items(),
+                       telepathy.CONNECTION_INTERFACE_AVATARS :
+                               lambda x: self.GetKnownAvatarTokens(x).items(),
                        telepathy.CONNECTION_INTERFACE_CAPABILITIES:
                                lambda x: self.GetCapabilities(x).items(),
+                       telepathy.CONNECTION_INTERFACE_CONTACT_CAPABILITIES :
+                               lambda x: self.GetContactCapabilities(x).items()
                }
 
                #Hold handles if needed
@@ -67,8 +74,9 @@ class ContactsMixin(telepathy.server.ConnectionInterfaceContacts):
 
                # Attributes from the interface org.freedesktop.Telepathy.Connection
                # are always returned, and need not be requested explicitly.
-               interfaces = set(interfaces + [telepathy.CONNECTION])
-               for interface in interfaces:
+               supportedInterfaces.add(telepathy.CONNECTION)
+
+               for interface in supportedInterfaces:
                        interface_attribute = interface + '/' + self.ATTRIBUTES[interface]
                        results = functions[interface](handles)
                        for handle, value in results: