diff options
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | extensions/cpsection/network/model.py | 17 | ||||
-rw-r--r-- | src/jarabe/desktop/networkviews.py | 41 | ||||
-rw-r--r-- | src/jarabe/model/neighborhood.py | 65 |
4 files changed, 80 insertions, 45 deletions
diff --git a/configure.ac b/configure.ac index f3fa6c0..edc275e 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([Sugar],[0.89.5],[],[sugar]) +AC_INIT([Sugar],[0.89.6],[],[sugar]) AC_PREREQ([2.59]) 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/desktop/networkviews.py b/src/jarabe/desktop/networkviews.py index 121c817..87f182f 100644 --- a/src/jarabe/desktop/networkviews.py +++ b/src/jarabe/desktop/networkviews.py @@ -159,6 +159,7 @@ class WirelessNetworkView(CanvasPulsingIcon): def __device_state_changed_cb(self, new_state, old_state, reason): self._device_state = new_state self._update_state() + self._update_icon() def __update_active_ap(self, ap_path): if ap_path in self._access_points: @@ -166,12 +167,10 @@ class WirelessNetworkView(CanvasPulsingIcon): # strength of that one self._active_ap = self._access_points[ap_path] self.update_strength() - self._update_state() elif self._active_ap is not None: # revert to showing state of strongest AP again self._active_ap = None self.update_strength() - self._update_state() def __wireless_properties_changed_cb(self, properties): if 'ActiveAccessPoint' in properties: @@ -191,26 +190,19 @@ class WirelessNetworkView(CanvasPulsingIcon): def __get_device_state_reply_cb(self, state): self._device_state = state - self._update() - - def __get_device_state_error_cb(self, err): - logging.error('Error getting the device state: %s', err) - - def _update(self): self._update_state() self._update_color() - def _update_state(self): - if self._active_ap is not None: - state = self._device_state - else: - state = network.DEVICE_STATE_UNKNOWN + def __get_device_state_error_cb(self, err): + logging.error('Error getting the device state: %s', err) + def _update_icon(self): if self._mode == network.NM_802_11_MODE_ADHOC and \ network.is_sugar_adhoc_network(self._name): channel = max([1] + [ap.channel for ap in self._access_points.values()]) - if state == network.DEVICE_STATE_ACTIVATED: + if self._device_state == network.DEVICE_STATE_ACTIVATED and \ + self._active_ap is not None: icon_name = 'network-adhoc-%s-connected' % channel else: icon_name = 'network-adhoc-%s' % channel @@ -218,11 +210,8 @@ class WirelessNetworkView(CanvasPulsingIcon): icon = self._palette.props.icon icon.props.icon_name = icon_name else: - if state == network.DEVICE_STATE_ACTIVATED: - connection = network.find_connection_by_ssid(self._name) - if connection is not None: - if self._mode == network.NM_802_11_MODE_INFRA: - connection.set_connected() + if self._device_state == network.DEVICE_STATE_ACTIVATED and \ + self._active_ap is not None: icon_name = '%s-connected' % _AP_ICON_NAME else: icon_name = _AP_ICON_NAME @@ -233,6 +222,12 @@ class WirelessNetworkView(CanvasPulsingIcon): icon = self._palette.props.icon icon.props.icon_name = icon_name + def _update_state(self): + if self._active_ap is not None: + state = self._device_state + else: + state = network.DEVICE_STATE_UNKNOWN + if state == network.DEVICE_STATE_PREPARE or \ state == network.DEVICE_STATE_CONFIG or \ state == network.DEVICE_STATE_NEED_AUTH or \ @@ -243,6 +238,10 @@ class WirelessNetworkView(CanvasPulsingIcon): self._palette.props.secondary_text = _('Connecting...') self.props.pulsing = True elif state == network.DEVICE_STATE_ACTIVATED: + connection = network.find_connection_by_ssid(self._name) + if connection is not None: + if self._mode == network.NM_802_11_MODE_INFRA: + connection.set_connected() if self._disconnect_item: self._disconnect_item.show() self._connect_item.hide() @@ -376,7 +375,7 @@ class WirelessNetworkView(CanvasPulsingIcon): def set_filter(self, query): self._greyed_out = self._name.lower().find(query) == -1 - self._update_state() + self._update_icon() self._update_color() def create_keydialog(self, settings, response): @@ -395,7 +394,7 @@ class WirelessNetworkView(CanvasPulsingIcon): if new_strength != self._strength: self._strength = new_strength - self._update_state() + self._update_icon() def add_ap(self, ap): self._access_points[ap.model.object_path] = ap 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(' ', '_') |