X-Git-Url: http://git.maemo.org/git/?p=theonering;a=blobdiff_plain;f=src%2Futil%2Ftp_utils.py;h=042a88ac993de539e332c6a7fa7df5e6182bbf8e;hp=9ae525b60fafbea10799413b235a88a75f7fd235;hb=44e05d3723303bd1099576571770ed265363bcf5;hpb=1c892d1b9bf14b28eb54ce3590ed2ee29d5e3d25 diff --git a/src/util/tp_utils.py b/src/util/tp_utils.py index 9ae525b..042a88a 100644 --- a/src/util/tp_utils.py +++ b/src/util/tp_utils.py @@ -2,7 +2,6 @@ import logging -import gobject import dbus import telepathy @@ -17,15 +16,15 @@ 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.__on_success = on_success + self.__on_error = on_error self._requested = None self._didMembersChange = False self._didClose = False self._didReport = False - self._onTimeout = misc.Timeout(self._on_timeout) + self._onTimeout = gobject_utils.Timeout(self._on_timeout) self._onTimeout.start(seconds=10) chan[telepathy.interfaces.CHANNEL_INTERFACE_GROUP].connect_to_signal( @@ -41,7 +40,7 @@ class WasMissedCall(object): chan[DBUS_PROPERTIES].GetAll( telepathy.interfaces.CHANNEL_INTERFACE, reply_handler = self._on_got_all, - error_handler = self._on_got_all, + error_handler = self._on_error, ) def cancel(self): @@ -65,13 +64,13 @@ class WasMissedCall(object): assert not self._didReport self._didReport = True self._onTimeout.cancel() - self._on_success(self) + self.__on_success(self) def _report_error(self, reason): assert not self._didReport self._didReport = True self._onTimeout.cancel() - self._on_error(self, reason) + self.__on_error(self, reason) @misc.log_exception(_moduleLogger) def _on_got_all(self, properties): @@ -129,30 +128,93 @@ class NewChannelSignaller(object): ): connObjectPath = channel_path_to_conn_path(channelObjectPath) serviceName = path_to_service_name(channelObjectPath) - self._on_user_new_channel( - self._sessionBus, serviceName, connObjectPath, channelObjectPath, channelType + 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/sip/USERNAME/Channel1") - '/org/freedesktop/Telepathy/ConnectionManager/theonering/sip/USERNAME' + >>> 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/sip/USERNAME/Channel1") - 'org.freedesktop.Telepathy.ConnectionManager.theonering.sip.USERNAME' + >>> 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/sip/USERNAME/Channel1") + >>> cm_from_path("/org/freedesktop/Telepathy/ConnectionManager/theonering/gv/USERNAME/Channel1") 'theonering' """ return path[1:].split("/")[4]