Reducing log noise
[theonering] / src / capabilities.py
index 7474eb0..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('capabilities')
+_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")