X-Git-Url: http://git.maemo.org/git/?p=gonvert;a=blobdiff_plain;f=src%2Futil%2Ftp_utils.py;fp=src%2Futil%2Ftp_utils.py;h=0000000000000000000000000000000000000000;hp=7c55c42e2be61534557d468f10b3849a91d92fb5;hb=18df79328b4665753f6d41d549ab991e060bb39d;hpb=f68aa1f2965ce6bfe8f76325b44436c826cb68fd diff --git a/src/util/tp_utils.py b/src/util/tp_utils.py deleted file mode 100644 index 7c55c42..0000000 --- a/src/util/tp_utils.py +++ /dev/null @@ -1,220 +0,0 @@ -#!/usr/bin/env python - -import logging - -import dbus -import telepathy - -import util.go_utils as gobject_utils -import misc - - -_moduleLogger = logging.getLogger(__name__) -DBUS_PROPERTIES = 'org.freedesktop.DBus.Properties' - - -class WasMissedCall(object): - - def __init__(self, bus, conn, chan, on_success, on_error): - self.__on_success = on_success - self.__on_error = on_error - - self._requested = None - self._didMembersChange = False - self._didClose = False - self._didReport = False - - self._onTimeout = gobject_utils.Timeout(self._on_timeout) - self._onTimeout.start(seconds=60) - - chan[telepathy.interfaces.CHANNEL_INTERFACE_GROUP].connect_to_signal( - "MembersChanged", - self._on_members_changed, - ) - - chan[telepathy.interfaces.CHANNEL].connect_to_signal( - "Closed", - self._on_closed, - ) - - chan[DBUS_PROPERTIES].GetAll( - telepathy.interfaces.CHANNEL_INTERFACE, - reply_handler = self._on_got_all, - error_handler = self._on_error, - ) - - def cancel(self): - self._report_error("by request") - - def _report_missed_if_ready(self): - if self._didReport: - pass - elif self._requested is not None and (self._didMembersChange or self._didClose): - if self._requested: - self._report_error("wrong direction") - elif self._didClose: - self._report_success() - else: - self._report_error("members added") - else: - if self._didClose: - self._report_error("closed too early") - - def _report_success(self): - assert not self._didReport, "Double reporting a missed call" - self._didReport = True - self._onTimeout.cancel() - self.__on_success(self) - - def _report_error(self, reason): - assert not self._didReport, "Double reporting a missed call" - self._didReport = True - self._onTimeout.cancel() - self.__on_error(self, reason) - - @misc.log_exception(_moduleLogger) - def _on_got_all(self, properties): - self._requested = properties["Requested"] - self._report_missed_if_ready() - - @misc.log_exception(_moduleLogger) - def _on_members_changed(self, message, added, removed, lp, rp, actor, reason): - if added: - self._didMembersChange = True - self._report_missed_if_ready() - - @misc.log_exception(_moduleLogger) - def _on_closed(self): - self._didClose = True - self._report_missed_if_ready() - - @misc.log_exception(_moduleLogger) - def _on_error(self, *args): - self._report_error(args) - - @misc.log_exception(_moduleLogger) - def _on_timeout(self): - self._report_error("timeout") - return False - - -class NewChannelSignaller(object): - - def __init__(self, on_new_channel): - self._sessionBus = dbus.SessionBus() - self._on_user_new_channel = on_new_channel - - def start(self): - self._sessionBus.add_signal_receiver( - self._on_new_channel, - "NewChannel", - "org.freedesktop.Telepathy.Connection", - None, - None - ) - - def stop(self): - self._sessionBus.remove_signal_receiver( - self._on_new_channel, - "NewChannel", - "org.freedesktop.Telepathy.Connection", - None, - None - ) - - @misc.log_exception(_moduleLogger) - def _on_new_channel( - self, channelObjectPath, channelType, handleType, handle, supressHandler - ): - connObjectPath = channel_path_to_conn_path(channelObjectPath) - serviceName = path_to_service_name(channelObjectPath) - try: - self._on_user_new_channel( - self._sessionBus, serviceName, connObjectPath, channelObjectPath, channelType - ) - except Exception: - _moduleLogger.exception("Blocking exception from being passed up") - - -class EnableSystemContactIntegration(object): - - ACCOUNT_MGR_NAME = "org.freedesktop.Telepathy.AccountManager" - ACCOUNT_MGR_PATH = "/org/freedesktop/Telepathy/AccountManager" - ACCOUNT_MGR_IFACE_QUERY = "com.nokia.AccountManager.Interface.Query" - ACCOUNT_IFACE_COMPAT = "com.nokia.Account.Interface.Compat" - ACCOUNT_IFACE_COMPAT_PROFILE = "com.nokia.Account.Interface.Compat.Profile" - DBUS_PROPERTIES = 'org.freedesktop.DBus.Properties' - - def __init__(self, profileName): - self._bus = dbus.SessionBus() - self._profileName = profileName - - def start(self): - self._accountManager = self._bus.get_object( - self.ACCOUNT_MGR_NAME, - self.ACCOUNT_MGR_PATH, - ) - self._accountManagerQuery = dbus.Interface( - self._accountManager, - dbus_interface=self.ACCOUNT_MGR_IFACE_QUERY, - ) - - self._accountManagerQuery.FindAccounts( - { - self.ACCOUNT_IFACE_COMPAT_PROFILE: self._profileName, - }, - reply_handler = self._on_found_accounts_reply, - error_handler = self._on_error, - ) - - @misc.log_exception(_moduleLogger) - def _on_found_accounts_reply(self, accountObjectPaths): - for accountObjectPath in accountObjectPaths: - print accountObjectPath - account = self._bus.get_object( - self.ACCOUNT_MGR_NAME, - accountObjectPath, - ) - accountProperties = dbus.Interface( - account, - self.DBUS_PROPERTIES, - ) - accountProperties.Set( - self.ACCOUNT_IFACE_COMPAT, - "SecondaryVCardFields", - ["TEL"], - reply_handler = self._on_field_set, - error_handler = self._on_error, - ) - - @misc.log_exception(_moduleLogger) - def _on_field_set(self): - _moduleLogger.info("SecondaryVCardFields Set") - - @misc.log_exception(_moduleLogger) - def _on_error(self, error): - _moduleLogger.error("%r" % (error, )) - - -def channel_path_to_conn_path(channelObjectPath): - """ - >>> channel_path_to_conn_path("/org/freedesktop/Telepathy/ConnectionManager/theonering/gv/USERNAME/Channel1") - '/org/freedesktop/Telepathy/ConnectionManager/theonering/gv/USERNAME' - """ - return channelObjectPath.rsplit("/", 1)[0] - - -def path_to_service_name(path): - """ - >>> path_to_service_name("/org/freedesktop/Telepathy/ConnectionManager/theonering/gv/USERNAME/Channel1") - 'org.freedesktop.Telepathy.ConnectionManager.theonering.gv.USERNAME' - """ - return ".".join(path[1:].split("/")[0:7]) - - -def cm_from_path(path): - """ - >>> cm_from_path("/org/freedesktop/Telepathy/ConnectionManager/theonering/gv/USERNAME/Channel1") - 'theonering' - """ - return path[1:].split("/")[4]