Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorgan Collett <morgan.collett@gmail.com>2008-12-19 12:21:34 (GMT)
committer Morgan Collett <morgan.collett@gmail.com>2008-12-20 12:19:31 (GMT)
commitccd2656a216023b7d1aeef2a61bdcb77ddca037a (patch)
tree4fb4b968f66fe8ba34c35c113a7f1b7b188079f5
parentab215da45af72315270c209608553c359817cfa6 (diff)
#142: D-Bus method to restart the server_plugin.
Changes to ShellOwner and GenericOwner to reread the server from gconf on the fly.
-rw-r--r--src/buddy.py9
-rw-r--r--src/presenceservice.py12
-rw-r--r--src/telepathy_plugin.py2
3 files changed, 18 insertions, 5 deletions
diff --git a/src/buddy.py b/src/buddy.py
index 3e8788d..68061c6 100644
--- a/src/buddy.py
+++ b/src/buddy.py
@@ -655,7 +655,6 @@ class GenericOwner(Buddy):
calls Buddy.__init__
"""
self._ps = ps
- self._server = kwargs.pop("server", None)
self._key_hash = kwargs.pop("key_hash", None)
#: Telepathy plugin -> dict { activity ID -> room handle }
@@ -910,7 +909,9 @@ class GenericOwner(Buddy):
def get_server(self):
"""Retrieve XMPP server hostname (used by the server plugin)"""
- return self._server
+ client = gconf.client_get_default()
+ server = client.get_string("/desktop/sugar/collaboration/jabber_server")
+ return server
def get_key_hash(self):
"""Retrieve the user's private-key hash (used by the server plugin
@@ -951,7 +952,6 @@ class ShellOwner(GenericOwner):
client = gconf.client_get_default()
profile = get_profile()
- server = client.get_string("/desktop/sugar/collaboration/jabber_server")
key_hash = profile.privkey_hash
key = profile.pubkey
@@ -965,8 +965,7 @@ class ShellOwner(GenericOwner):
GenericOwner.__init__(self, ps, bus,
'keyid/' + psutils.pubkey_to_keyid(key),
- key=key, nick=nick, color=color, icon=icon, server=server,
- key_hash=key_hash)
+ key=key, nick=nick, color=color, icon=icon, key_hash=key_hash)
# Ask to get notifications on Owner object property changes in the
# shell. If it's not currently running, no problem - we'll get the
diff --git a/src/presenceservice.py b/src/presenceservice.py
index e68bded..84c3cc2 100644
--- a/src/presenceservice.py
+++ b/src/presenceservice.py
@@ -857,6 +857,18 @@ class PresenceService(ExportedGObject):
if self._server_plugin is not None:
self._server_plugin.sync_friends(keys)
+ @dbus.service.method(PRESENCE_INTERFACE, in_signature="",
+ out_signature="")
+ def RestartServerConnection(self):
+ """Stop and restart the server_plugin.
+
+ This allows changing jabber servers without restarting Sugar.
+ """
+ if self._server_plugin:
+ if self._server_plugin.status == CONNECTION_STATUS_CONNECTED:
+ self._server_plugin.cleanup()
+ self._server_plugin.start()
+
def main(test_num=0, randomize=False):
loop = gobject.MainLoop()
DBusGMainLoop(set_as_default=True)
diff --git a/src/telepathy_plugin.py b/src/telepathy_plugin.py
index 982f7cc..5aca07e 100644
--- a/src/telepathy_plugin.py
+++ b/src/telepathy_plugin.py
@@ -591,6 +591,8 @@ class TelepathyPlugin(gobject.GObject):
# Only init connection if we have a valid IP address
if self._could_connect():
+ # Reread account info in case the server changed
+ self._account = self._get_account_info()
self._init_connection()
else:
_logger.debug('%r: Postponing connection', self)