From ee83449d48d4e08fe4c1d81d5ffeeba8df0d04c7 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Sat, 30 Jan 2010 18:57:57 -0600 Subject: [PATCH] Simlifying capabilities and advertising text --- src/capabilities.py | 79 ++++++++++----------------------------------------- 1 file changed, 15 insertions(+), 64 deletions(-) diff --git a/src/capabilities.py b/src/capabilities.py index 11a7f0c..34872a6 100644 --- a/src/capabilities.py +++ b/src/capabilities.py @@ -11,19 +11,20 @@ _moduleLogger = logging.getLogger('capabilities') class CapabilitiesMixin(tp.ConnectionInterfaceCapabilities): + _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 __init__(self): tp.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") def get_handle_by_id(self, handleType, handleId): """ @@ -31,64 +32,14 @@ class CapabilitiesMixin(tp.ConnectionInterfaceCapabilities): """ raise NotImplementedError("Abstract function called") - def GetSelfHandle(self): - """ - @abstract - """ - raise NotImplementedError("Abstract function called") - @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.get_handle_by_id(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 -- 1.7.9.5