From 687fcd66f074974aefde7d3bd879cbb4065fedb4 Mon Sep 17 00:00:00 2001 From: Krzysztof Klinikowski Date: Thu, 27 May 2010 01:06:55 +0200 Subject: channel: add SunshineChannel class to deal with Initiator props, from http://git.collabora.co.uk/?p=telepathy-butterfly.git;a=commit;h=eb4ec881377241f49d757af88e5af1f3e1ee4bca --- sunshine/channel/__init__.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'sunshine/channel/__init__.py') diff --git a/sunshine/channel/__init__.py b/sunshine/channel/__init__.py index 7a6b8a1..a789748 100644 --- a/sunshine/channel/__init__.py +++ b/sunshine/channel/__init__.py @@ -16,3 +16,47 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import logging +import dbus + +import telepathy + +from sunshine.handle import SunshineHandleFactory + +__all__ = ['SunshineChannel'] + +logger = logging.getLogger('Sunshine.Channel') + +class SunshineChannel(object): + def __init__(self, conn, props): + # If we have InitiatorHandle set in our new channel, use that, + if telepathy.CHANNEL_INTERFACE + '.InitiatorHandle' in props: + self._initiator = conn.handle(telepathy.HANDLE_TYPE_CONTACT, + props[telepathy.CHANNEL_INTERFACE + '.InitiatorHandle']) + + # otherwise use InitiatorID. + elif telepathy.CHANNEL_INTERFACE + '.InitiatorID' in props: + self._initiator = ButterflyHandleFactory(conn, 'contact', + id=props[telepathy.CHANNEL_INTERFACE + '.InitiatorID']) + + # If we don't have either of the above but we requested the channel, + # then we're the initiator. + elif props[telepathy.CHANNEL_INTERFACE + '.Requested']: + self._initiator = conn.GetSelfHandle() + + else: + logger.warning('InitiatorID or InitiatorHandle not set on new channel') + self._initiator = None + + # Don't implement the initiator properties if we don't have one. + if self._initiator: + self._implement_property_get(telepathy.CHANNEL_INTERFACE, { + 'InitiatorHandle': lambda: dbus.UInt32(self._initiator.id), + 'InitiatorID': lambda: self._initiator.name + }) + + self._add_immutables({ + 'InitiatorHandle': telepathy.CHANNEL_INTERFACE, + 'InitiatorID': telepathy.CHANNEL_INTERFACE, + }) -- cgit v1.2.3