Find and use an existing gabble connection, if any
This commit is contained in:
parent
b9fb0f73f1
commit
03747e2c6c
@ -17,7 +17,9 @@
|
|||||||
import gobject
|
import gobject
|
||||||
import dbus, dbus.service, dbus.glib
|
import dbus, dbus.service, dbus.glib
|
||||||
from telepathy.client import ManagerRegistry, Connection
|
from telepathy.client import ManagerRegistry, Connection
|
||||||
from telepathy.interfaces import CONN_MGR_INTERFACE
|
from telepathy.interfaces import (CONN_MGR_INTERFACE, CONN_INTERFACE)
|
||||||
|
from telepathy.constants import (CONNECTION_STATUS_CONNECTING, CONNECTION_STATUS_CONNECTED,
|
||||||
|
CONNECTION_STATUS_DISCONNECTED, CONNECTION_HANDLE_TYPE_CONTACT)
|
||||||
|
|
||||||
import telepathyclient
|
import telepathyclient
|
||||||
from buddy import Buddy, Owner
|
from buddy import Buddy, Owner
|
||||||
@ -58,19 +60,7 @@ class PresenceService(dbus.service.Object):
|
|||||||
self._registry = ManagerRegistry()
|
self._registry = ManagerRegistry()
|
||||||
self._registry.LoadManagers()
|
self._registry.LoadManagers()
|
||||||
|
|
||||||
# Telepathy connection to the server
|
self._server_client = self._connect_to_server()
|
||||||
mgr = self._registry.GetManager('gabble')
|
|
||||||
protocol = 'jabber'
|
|
||||||
account = {
|
|
||||||
'account': 'olpc@collabora.co.uk',
|
|
||||||
'password': 'learn',
|
|
||||||
'server': 'light.bluelinux.co.uk'
|
|
||||||
}
|
|
||||||
conn_bus_name, conn_object_path = \
|
|
||||||
mgr[CONN_MGR_INTERFACE].RequestConnection(protocol, account)
|
|
||||||
conn = Connection(conn_bus_name, conn_object_path)
|
|
||||||
self._server_client = telepathyclient.TelepathyClient(conn)
|
|
||||||
|
|
||||||
self._handles[self._server_client] = {}
|
self._handles[self._server_client] = {}
|
||||||
|
|
||||||
# Telepathy link local connection
|
# Telepathy link local connection
|
||||||
@ -82,6 +72,38 @@ class PresenceService(dbus.service.Object):
|
|||||||
|
|
||||||
dbus.service.Object.__init__(self, self._bus_name, _PRESENCE_PATH)
|
dbus.service.Object.__init__(self, self._bus_name, _PRESENCE_PATH)
|
||||||
|
|
||||||
|
def _connect_to_server(self):
|
||||||
|
protocol = 'jabber'
|
||||||
|
account = {
|
||||||
|
'account': 'olpc@collabora.co.uk',
|
||||||
|
'password': 'learn',
|
||||||
|
'server': 'light.bluelinux.co.uk'
|
||||||
|
}
|
||||||
|
|
||||||
|
mgr = self._registry.GetManager('gabble')
|
||||||
|
conn = None
|
||||||
|
|
||||||
|
# Search existing connections, if any, that we might be able to use
|
||||||
|
connections = Connection.get_connections()
|
||||||
|
for item in connections:
|
||||||
|
if item[CONN_INTERFACE].GetProtocol() != protocol:
|
||||||
|
continue
|
||||||
|
if not item.object_path.startswith("/org/freedesktop/Telepathy/Connection/gabble/jabber/"):
|
||||||
|
continue
|
||||||
|
if item[CONN_INTERFACE].GetStatus() == CONNECTION_STATUS_CONNECTED:
|
||||||
|
self_name = account['account']
|
||||||
|
test_handle = item[CONN_INTERFACE].RequestHandles(CONNECTION_HANDLE_TYPE_CONTACT, [self_name])[0]
|
||||||
|
if item[CONN_INTERFACE].GetSelfHandle() != test_handle:
|
||||||
|
continue
|
||||||
|
conn = item
|
||||||
|
|
||||||
|
if not conn:
|
||||||
|
conn_bus_name, conn_object_path = \
|
||||||
|
mgr[CONN_MGR_INTERFACE].RequestConnection(protocol, account)
|
||||||
|
conn = Connection(conn_bus_name, conn_object_path)
|
||||||
|
|
||||||
|
return telepathyclient.TelepathyClient(conn)
|
||||||
|
|
||||||
def _contact_online(self, tp, handle, key):
|
def _contact_online(self, tp, handle, key):
|
||||||
buddy = self._buddies.get(key)
|
buddy = self._buddies.get(key)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user