Adding ConnectionInterfaceContactCapabilities, bringing ourselves inline with butterfly
authorEd Page <eopage@byu.net>
Sat, 29 May 2010 00:43:02 +0000 (19:43 -0500)
committerEd Page <eopage@byu.net>
Sat, 29 May 2010 01:16:46 +0000 (20:16 -0500)
See
"""
    capabilities: implement ContactCapabilities
"""
and
"""
    contacts: add ContactCapabilities contact attributes
"""

src/capabilities.py
src/contacts.py

index 9657b8b..a64c38b 100644 (file)
@@ -1,15 +1,20 @@
 import logging
 
+import dbus
 import telepathy
 
 import tp
+from tp._generated import Connection_Interface_Contact_Capabilities
 import util.misc as misc_utils
 
 
 _moduleLogger = logging.getLogger(__name__)
 
 
-class CapabilitiesMixin(tp.ConnectionInterfaceCapabilities):
+class CapabilitiesMixin(
+       tp.ConnectionInterfaceCapabilities,
+       Connection_Interface_Contact_Capabilities.ConnectionInterfaceContactCapabilities,
+):
 
        _CAPABILITIES = {
                telepathy.CHANNEL_TYPE_TEXT: (
@@ -23,8 +28,45 @@ class CapabilitiesMixin(tp.ConnectionInterfaceCapabilities):
                ),
        }
 
+       text_chat_class = (
+               {
+                       telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_TEXT,
+                       telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT),
+               },
+               [
+                       telepathy.CHANNEL_INTERFACE + '.TargetHandle',
+                       telepathy.CHANNEL_INTERFACE + '.TargetID',
+               ],
+       )
+
+       audio_chat_class = (
+               {
+                       telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_STREAMED_MEDIA,
+                       telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT),
+               },
+               [
+                       telepathy.CHANNEL_INTERFACE + '.TargetHandle',
+                       telepathy.CHANNEL_INTERFACE + '.TargetID',
+                       telepathy.CHANNEL_TYPE_STREAMED_MEDIA + '.InitialAudio',
+               ],
+       )
+
+       av_chat_class = (
+               {
+                       telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_STREAMED_MEDIA,
+                       telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT),
+               },
+               [
+                       telepathy.CHANNEL_INTERFACE + '.TargetHandle',
+                       telepathy.CHANNEL_INTERFACE + '.TargetID',
+                       telepathy.CHANNEL_TYPE_STREAMED_MEDIA + '.InitialAudio',
+                       telepathy.CHANNEL_TYPE_STREAMED_MEDIA + '.InitialVideo',
+               ],
+       )
+
        def __init__(self):
                tp.ConnectionInterfaceCapabilities.__init__(self)
+               Connection_Interface_Contact_Capabilities.ConnectionInterfaceContactCapabilities.__init__(self)
 
        def get_handle_by_id(self, handleType, handleId):
                """
@@ -43,3 +85,21 @@ class CapabilitiesMixin(tp.ConnectionInterfaceCapabilities):
                        for type, (gen, spec) in self._CAPABILITIES.iteritems():
                                ret.append([handleId, type, gen, spec])
                return ret
+
+       def GetContactCapabilities(self, handles):
+               if 0 in handles:
+                       raise telepathy.InvalidHandle('Contact handle list contains zero')
+
+               ret = dbus.Dictionary({}, signature='ua(a{sv}as)')
+               for i in handles:
+                       handle = self.get_handle_by_id(telepathy.HANDLE_TYPE_CONTACT, i)
+                       contactCapabilities = dbus.Dictionary(
+                               (self.text_chat_class, self.audio_chat_class),
+                               signature="sv",
+                       )
+                       ret[handle] = dbus.Array(contactCapabilities, signature='(a{sv}as)')
+
+               return ret
+
+       def UpdateCapabilities(self, caps):
+               _moduleLogger.info("Ignoring updating contact capabilities")
index 340ca11..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):
@@ -58,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