Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-08-30 16:30:01 (GMT)
committer Tomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-08-30 16:30:01 (GMT)
commit770f90037a174f1cefa76fbef4c242f6030099ee (patch)
treef92926ac1740bae620e545c7720c94612473e975
parentd0675f45139fe17eb666c938ae0882d799b48174 (diff)
Listen to changes to the nick and jabber server settings and update MC appropriately
-rw-r--r--extensions/cpsection/network/model.py17
-rw-r--r--src/jarabe/model/neighborhood.py65
2 files changed, 59 insertions, 23 deletions
diff --git a/extensions/cpsection/network/model.py b/extensions/cpsection/network/model.py
index e1c3dab..2713f23 100644
--- a/extensions/cpsection/network/model.py
+++ b/extensions/cpsection/network/model.py
@@ -45,25 +45,8 @@ def set_jabber(server):
client = gconf.client_get_default()
client.set_string('/desktop/sugar/collaboration/jabber_server', server)
- _restart_jabber()
return 0
-def _restart_jabber():
- """Call Sugar Presence Service to restart Telepathy CMs.
-
- This allows restarting the jabber server connection when we change it.
- """
- _PS_SERVICE = "org.laptop.Sugar.Presence"
- _PS_INTERFACE = "org.laptop.Sugar.Presence"
- _PS_PATH = "/org/laptop/Sugar/Presence"
- bus = dbus.SessionBus()
- try:
- ps = dbus.Interface(bus.get_object(_PS_SERVICE, _PS_PATH),
- _PS_INTERFACE)
- except dbus.DBusException:
- raise ReadError('%s service not available' % _PS_SERVICE)
- ps.RestartServerConnection()
-
def get_radio():
try:
bus = dbus.SystemBus()
diff --git a/src/jarabe/model/neighborhood.py b/src/jarabe/model/neighborhood.py
index 90531a6..a500675 100644
--- a/src/jarabe/model/neighborhood.py
+++ b/src/jarabe/model/neighborhood.py
@@ -582,6 +582,13 @@ class Neighborhood(gobject.GObject):
self._link_local_account = None
self._server_account = None
+ client = gconf.client_get_default()
+ client.add_dir('/desktop/sugar/collaboration', gconf.CLIENT_PRELOAD_NONE)
+ client.notify_add('/desktop/sugar/collaboration/jabber_server',
+ self.__jabber_server_changed_cb)
+ client.add_dir('/desktop/sugar/user/nick', gconf.CLIENT_PRELOAD_NONE)
+ client.notify_add('/desktop/sugar/user/nick', self.__nick_changed_cb)
+
bus = dbus.Bus()
obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, ACCOUNT_MANAGER_PATH)
account_manager = dbus.Interface(obj, ACCOUNT_MANAGER)
@@ -649,9 +656,9 @@ class Neighborhood(gobject.GObject):
}
properties = {
- 'org.freedesktop.Telepathy.Account.Enabled': True,
- 'org.freedesktop.Telepathy.Account.Nickname': nick,
- 'org.freedesktop.Telepathy.Account.ConnectAutomatically': True,
+ ACCOUNT + '.Enabled': True,
+ ACCOUNT + '.Nickname': nick,
+ ACCOUNT + '.ConnectAutomatically': True,
}
bus = dbus.Bus()
@@ -690,9 +697,9 @@ class Neighborhood(gobject.GObject):
}
properties = {
- 'org.freedesktop.Telepathy.Account.Enabled': True,
- 'org.freedesktop.Telepathy.Account.Nickname': nick,
- 'org.freedesktop.Telepathy.Account.ConnectAutomatically': True,
+ ACCOUNT + '.Enabled': True,
+ ACCOUNT + '.Nickname': nick,
+ ACCOUNT + '.ConnectAutomatically': True,
}
bus = dbus.Bus()
@@ -703,6 +710,52 @@ class Neighborhood(gobject.GObject):
properties)
return _Account(account_path)
+ def __jabber_server_changed_cb(self, client, timestamp, entry, *extra):
+ logging.debug('__jabber_server_changed_cb')
+
+ bus = dbus.Bus()
+ account = bus.get_object(ACCOUNT_MANAGER_SERVICE,
+ self._server_account.object_path)
+
+ server = client.get_string('/desktop/sugar/collaboration/jabber_server')
+ nick = client.get_string('/desktop/sugar/user/nick')
+ account_name = '%s@%s' % (self._sanitize_nick(nick), server)
+ needs_reconnect = account.UpdateParameters({'server': server,
+ 'account': account_name,
+ 'register': True},
+ dbus.Array([], 's'),
+ dbus_interface=ACCOUNT)
+ if needs_reconnect:
+ account.Reconnect()
+
+ self._update_jid()
+
+ def __nick_changed_cb(self, client, timestamp, entry, *extra):
+ logging.debug('__nick_changed_cb')
+
+ nick = client.get_string('/desktop/sugar/user/nick')
+ for account in self._server_account, self._link_local_account:
+ bus = dbus.Bus()
+ obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, account.object_path)
+ obj.Set(ACCOUNT, 'Nickname', nick, dbus_interface=PROPERTIES_IFACE)
+
+ self._update_jid()
+
+ def _update_jid(self):
+ bus = dbus.Bus()
+ account = bus.get_object(ACCOUNT_MANAGER_SERVICE,
+ self._link_local_account.object_path)
+
+ client = gconf.client_get_default()
+ server = client.get_string('/desktop/sugar/collaboration/jabber_server')
+ nick = client.get_string('/desktop/sugar/user/nick')
+ jid = '%s@%s' % (self._sanitize_nick(nick), server)
+ needs_reconnect = account.UpdateParameters({'jid': jid},
+ dbus.Array([], 's'),
+ dbus_interface=ACCOUNT)
+ if needs_reconnect:
+ account.Reconnect()
+
def _sanitize_nick(self, nick):
return nick.replace(' ', '_')