54 lines
2.1 KiB
Python
54 lines
2.1 KiB
Python
![]() |
import logging
|
||
|
|
||
|
import dbus
|
||
|
from dbus import PROPERTIES_IFACE
|
||
|
from telepathy.interfaces import ACCOUNT, \
|
||
|
ACCOUNT_MANAGER
|
||
|
|
||
|
ACCOUNT_MANAGER_SERVICE = 'org.freedesktop.Telepathy.AccountManager'
|
||
|
ACCOUNT_MANAGER_PATH = '/org/freedesktop/Telepathy/AccountManager'
|
||
|
|
||
|
class ConnectionManager(object):
|
||
|
def __init__(self):
|
||
|
self.connections_per_account = []
|
||
|
|
||
|
bus = dbus.SessionBus()
|
||
|
obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, ACCOUNT_MANAGER_PATH)
|
||
|
account_manager = dbus.Interface(obj, ACCOUNT_MANAGER)
|
||
|
|
||
|
logging.info('KILL_PS listen for accounts coming and going')
|
||
|
#account_manager.connect_to_signal('AccountValidityChanged',
|
||
|
# self.__account_validity_changed_cb)
|
||
|
|
||
|
account_paths = account_manager.Get(ACCOUNT_MANAGER, 'ValidAccounts',
|
||
|
dbus_interface=PROPERTIES_IFACE)
|
||
|
for account_path in account_paths:
|
||
|
obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, account_path)
|
||
|
#obj.connect_to_signal('AccountPropertyChanged',
|
||
|
# self.__account_property_changed_cb)
|
||
|
connection_path = obj.Get(ACCOUNT, 'Connection')
|
||
|
if connection_path == '/':
|
||
|
continue
|
||
|
|
||
|
connection_name = connection_path.replace('/', '.')[1:]
|
||
|
connection = bus.get_object(connection_name, connection_path)
|
||
|
self.connections[account_path] = connection
|
||
|
|
||
|
def get_preferred_connection(self):
|
||
|
best_connection = None, None
|
||
|
for account_path, connection in self.connections.items():
|
||
|
if 'salut' in connection.object_path:
|
||
|
best_connection = account_path, connection
|
||
|
elif 'gabble' in connection.object_path:
|
||
|
best_connection = account_path, connection
|
||
|
break
|
||
|
return best_connection
|
||
|
|
||
|
_connection_manager = None
|
||
|
|
||
|
def get_connection_manager():
|
||
|
global _connection_manager
|
||
|
if not _connection_manager:
|
||
|
_connection_manager = ConnectionManager()
|
||
|
return _connection_manager
|