X-Git-Url: http://git.maemo.org/git/?p=theonering;a=blobdiff_plain;f=src%2Fcapabilities.py;h=34872a650c35508880c062c1c44fd42bbdad8246;hp=c4a94cb3c208e39280ad0fade75ad70af68ea1d3;hb=c031c65923a021324ae3e9077332a9b3d43c716c;hpb=1bd375495719117939fa0ac384835001485eeef7 diff --git a/src/capabilities.py b/src/capabilities.py index c4a94cb..34872a6 100644 --- a/src/capabilities.py +++ b/src/capabilities.py @@ -2,35 +2,31 @@ import logging import telepathy +import tp import gtk_toolbox _moduleLogger = logging.getLogger('capabilities') -class CapabilitiesMixin(telepathy.server.ConnectionInterfaceCapabilities): +class CapabilitiesMixin(tp.ConnectionInterfaceCapabilities): - def __init__(self): - telepathy.server.ConnectionInterfaceCapabilities.__init__(self) - self._implement_property_get( - telepathy.interfaces.CONN_INTERFACE_CAPABILITIES, - {"caps": self.GetCapabilities}, - ) - - @property - def session(self): - """ - @abstract - """ - raise NotImplementedError("Abstract property called") + _CAPABILITIES = { + telepathy.CHANNEL_TYPE_TEXT: ( + telepathy.CONNECTION_CAPABILITY_FLAG_CREATE, + 0, + ), + telepathy.CHANNEL_TYPE_STREAMED_MEDIA: ( + telepathy.CONNECTION_CAPABILITY_FLAG_CREATE | + telepathy.CONNECTION_CAPABILITY_FLAG_INVITE, + telepathy.CHANNEL_MEDIA_CAPABILITY_AUDIO, + ), + } - def handle(self, handleType, handleId): - """ - @abstract - """ - raise NotImplementedError("Abstract function called") + def __init__(self): + tp.ConnectionInterfaceCapabilities.__init__(self) - def GetSelfHandle(self): + def get_handle_by_id(self, handleType, handleId): """ @abstract """ @@ -38,56 +34,12 @@ class CapabilitiesMixin(telepathy.server.ConnectionInterfaceCapabilities): @gtk_toolbox.log_exception(_moduleLogger) def GetCapabilities(self, handleIds): - """ - @todo HACK Remove this once we are building against a fixed version of python-telepathy - """ ret = [] for handleId in handleIds: - h = self.handle(telepathy.HANDLE_TYPE_CONTACT, handleId) if handleId != 0 and (telepathy.HANDLE_TYPE_CONTACT, handleId) not in self._handles: raise telepathy.errors.InvalidHandle - elif h in self._caps: - types = self._caps[h] - for type in types: - for ctype, specs in types.iteritems(): - ret.append([handleId, type, specs[0], specs[1]]) - else: - # No caps, so just default to the connection's caps - types = self._caps[self.GetSelfHandle()] - for type in types: - for ctype, specs in types.iteritems(): - ret.append([handleId, type, specs[0], specs[1]]) - return ret - - @gtk_toolbox.log_exception(_moduleLogger) - def AdvertiseCapabilities(self, add, remove): - """ - @todo HACK Remove this once we are building against a fixed version of python-telepathy - """ - my_caps = self._caps.setdefault(self.GetSelfHandle(), {}) - - changed = {} - for ctype, spec_caps in add: - changed[ctype] = spec_caps - for ctype in remove: - changed[ctype] = None - - caps = [] - for ctype, spec_caps in changed.iteritems(): - gen_old, spec_old = my_caps.get(ctype, (0, 0)) - if spec_caps is None: - # channel type no longer supported (provider has gone away) - gen_new, spec_new = 0, 0 - else: - # channel type supports new capabilities - gen_new, spec_new = gen_old, spec_old | spec_caps - if spec_old != spec_new or gen_old != gen_new: - caps.append((self.GetSelfHandle(), ctype, gen_old, gen_new, - spec_old, spec_new)) - - self.CapabilitiesChanged(caps) - _moduleLogger.info("CapsChanged %r" % self._caps) - # return all my capabilities - ret = [(ctype, caps[1]) for ctype, caps in my_caps.iteritems()] + h = self.get_handle_by_id(telepathy.HANDLE_TYPE_CONTACT, handleId) + for type, (gen, spec) in self._CAPABILITIES.iteritems(): + ret.append([handleId, type, gen, spec]) return ret