diff options
author | Morgan 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) |
commit | ccd2656a216023b7d1aeef2a61bdcb77ddca037a (patch) | |
tree | 4fb4b968f66fe8ba34c35c113a7f1b7b188079f5 | |
parent | ab215da45af72315270c209608553c359817cfa6 (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.py | 9 | ||||
-rw-r--r-- | src/presenceservice.py | 12 | ||||
-rw-r--r-- | src/telepathy_plugin.py | 2 |
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) |