diff options
author | Krzysztof Klinikowski <kkszysiu@gmail.com> | 2010-05-27 01:06:55 +0200 |
---|---|---|
committer | Krzysztof Klinikowski <kkszysiu@gmail.com> | 2010-05-27 01:06:55 +0200 |
commit | 687fcd66f074974aefde7d3bd879cbb4065fedb4 (patch) | |
tree | 9a36be86bb6da5fb77fa33cb304696b53cc432e1 /sunshine/channel/__init__.py | |
parent | 4fdbc7a2a0f0735e2f616009bf7491e033e6b63e (diff) |
channel: add SunshineChannel class to deal with Initiator props, from http://git.collabora.co.uk/?p=telepathy-butterfly.git;a=commit;h=eb4ec881377241f49d757af88e5af1f3e1ee4bca
Diffstat (limited to 'sunshine/channel/__init__.py')
-rw-r--r-- | sunshine/channel/__init__.py | 44 |
1 files changed, 44 insertions, 0 deletions
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, + }) |