Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--extensions/cpsection/network/model.py17
-rw-r--r--src/jarabe/desktop/networkviews.py41
-rw-r--r--src/jarabe/model/neighborhood.py65
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(' ', '_')