diff options
-rw-r--r-- | bin/sugar-session | 2 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | data/icons/Makefile.am | 16 | ||||
-rw-r--r-- | data/icons/module-about_my_computer.svg (renamed from data/icons/module-about_my_xo.svg) | 0 | ||||
-rw-r--r-- | extensions/cpsection/Makefile.am | 2 | ||||
-rw-r--r-- | extensions/cpsection/aboutcomputer/Makefile.am | 6 | ||||
-rw-r--r-- | extensions/cpsection/aboutcomputer/__init__.py (renamed from extensions/cpsection/aboutxo/__init__.py) | 6 | ||||
-rw-r--r-- | extensions/cpsection/aboutcomputer/model.py (renamed from extensions/cpsection/aboutxo/model.py) | 9 | ||||
-rw-r--r-- | extensions/cpsection/aboutcomputer/view.py (renamed from extensions/cpsection/aboutxo/view.py) | 2 | ||||
-rw-r--r-- | extensions/cpsection/aboutxo/Makefile.am | 6 | ||||
-rw-r--r-- | extensions/cpsection/network/model.py | 19 | ||||
-rw-r--r-- | extensions/cpsection/network/view.py | 13 | ||||
-rw-r--r-- | src/jarabe/controlpanel/gui.py | 2 | ||||
-rw-r--r-- | src/jarabe/desktop/favoritesview.py | 10 | ||||
-rw-r--r-- | src/jarabe/desktop/meshbox.py | 12 | ||||
-rw-r--r-- | src/jarabe/journal/model.py | 2 | ||||
-rw-r--r-- | src/jarabe/model/network.py | 39 |
17 files changed, 101 insertions, 47 deletions
diff --git a/bin/sugar-session b/bin/sugar-session index fc10eb8..6a10a43 100644 --- a/bin/sugar-session +++ b/bin/sugar-session @@ -133,7 +133,7 @@ def main(): client = gconf.client_get_default() timezone = client.get_string('/desktop/sugar/date/timezone') - if timezone is not '': + if timezone is not None and timezone: os.environ['TZ'] = timezone start_ui_service() diff --git a/configure.ac b/configure.ac index 748657e..2223aae 100644 --- a/configure.ac +++ b/configure.ac @@ -53,7 +53,7 @@ data/icons/Makefile extensions/Makefile extensions/cpsection/Makefile extensions/cpsection/aboutme/Makefile -extensions/cpsection/aboutxo/Makefile +extensions/cpsection/aboutcomputer/Makefile extensions/cpsection/datetime/Makefile extensions/cpsection/frame/Makefile extensions/cpsection/language/Makefile diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am index ac26247..ccf049a 100644 --- a/data/icons/Makefile.am +++ b/data/icons/Makefile.am @@ -1,13 +1,13 @@ sugardir = $(pkgdatadir)/data/icons -sugar_DATA = \ - activity-journal.svg \ - module-about_me.svg \ - module-about_my_xo.svg \ - module-date_and_time.svg \ - module-frame.svg \ - module-language.svg \ - module-network.svg \ +sugar_DATA = \ + activity-journal.svg \ + module-about_me.svg \ + module-about_my_computer.svg \ + module-date_and_time.svg \ + module-frame.svg \ + module-language.svg \ + module-network.svg \ module-power.svg EXTRA_DIST = $(sugar_DATA) diff --git a/data/icons/module-about_my_xo.svg b/data/icons/module-about_my_computer.svg index cf3528e..cf3528e 100644 --- a/data/icons/module-about_my_xo.svg +++ b/data/icons/module-about_my_computer.svg diff --git a/extensions/cpsection/Makefile.am b/extensions/cpsection/Makefile.am index 0e69fd1..73e5164 100644 --- a/extensions/cpsection/Makefile.am +++ b/extensions/cpsection/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = aboutme aboutxo datetime frame language network power +SUBDIRS = aboutme aboutcomputer datetime frame language network power sugardir = $(pkgdatadir)/extensions/cpsection sugar_PYTHON = __init__.py diff --git a/extensions/cpsection/aboutcomputer/Makefile.am b/extensions/cpsection/aboutcomputer/Makefile.am new file mode 100644 index 0000000..a3bdec8 --- /dev/null +++ b/extensions/cpsection/aboutcomputer/Makefile.am @@ -0,0 +1,6 @@ +sugardir = $(pkgdatadir)/extensions/cpsection/aboutcomputer + +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py diff --git a/extensions/cpsection/aboutxo/__init__.py b/extensions/cpsection/aboutcomputer/__init__.py index 4dc2cb2..ceb515a 100644 --- a/extensions/cpsection/aboutxo/__init__.py +++ b/extensions/cpsection/aboutcomputer/__init__.py @@ -16,7 +16,7 @@ from gettext import gettext as _ -CLASS = 'AboutXO' -ICON = 'module-about_my_xo' -TITLE = _('About my XO') +CLASS = 'AboutComputer' +ICON = 'module-about_my_computer' +TITLE = _('About my Computer') diff --git a/extensions/cpsection/aboutxo/model.py b/extensions/cpsection/aboutcomputer/model.py index 4b5b27e..5d53f54 100644 --- a/extensions/cpsection/aboutxo/model.py +++ b/extensions/cpsection/aboutcomputer/model.py @@ -21,16 +21,16 @@ import re import subprocess from gettext import gettext as _ -_logger = logging.getLogger('ControlPanel - AboutXO') +_logger = logging.getLogger('ControlPanel - AboutComputer') _not_available = _('Not available') -def get_aboutxo(): +def get_aboutcomputer(): msg = 'Serial Number: %s \nBuild Number: %s \nFirmware Number: %s \n' \ % (get_serial_number(), get_build_number(), get_firmware_number()) return msg -def print_aboutxo(): - print get_aboutxo() +def print_aboutcomputer(): + print get_aboutcomputer() def get_serial_number(): serial_no = _read_file('/ofw/serial-number') @@ -115,4 +115,3 @@ def get_license(): except IOError: license_text = _not_available return license_text - diff --git a/extensions/cpsection/aboutxo/view.py b/extensions/cpsection/aboutcomputer/view.py index bd2f27f..f9dfe93 100644 --- a/extensions/cpsection/aboutxo/view.py +++ b/extensions/cpsection/aboutcomputer/view.py @@ -23,7 +23,7 @@ from sugar.graphics import style from jarabe.controlpanel.sectionview import SectionView -class AboutXO(SectionView): +class AboutComputer(SectionView): def __init__(self, model, alerts=None): SectionView.__init__(self) diff --git a/extensions/cpsection/aboutxo/Makefile.am b/extensions/cpsection/aboutxo/Makefile.am deleted file mode 100644 index 3f71af0..0000000 --- a/extensions/cpsection/aboutxo/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -sugardir = $(pkgdatadir)/extensions/cpsection/aboutxo - -sugar_PYTHON = \ - __init__.py \ - model.py \ - view.py diff --git a/extensions/cpsection/network/model.py b/extensions/cpsection/network/model.py index bfd008a..bfb9686 100644 --- a/extensions/cpsection/network/model.py +++ b/extensions/cpsection/network/model.py @@ -44,7 +44,24 @@ def set_jabber(server): """ client = gconf.client_get_default() client.set_string('/desktop/sugar/collaboration/jabber_server', server) - return 1 + + self._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(): bus = dbus.SystemBus() diff --git a/extensions/cpsection/network/view.py b/extensions/cpsection/network/view.py index 9a7f387..31a4f72 100644 --- a/extensions/cpsection/network/view.py +++ b/extensions/cpsection/network/view.py @@ -27,6 +27,8 @@ CLASS = 'Network' ICON = 'module-network' TITLE = _('Network') +_APPLY_TIMEOUT = 3000 + class Network(SectionView): def __init__(self, model, alerts): SectionView.__init__(self) @@ -214,7 +216,7 @@ class Network(SectionView): def __jabber_changed_cb(self, widget, data=None): if self._jabber_sid: gobject.source_remove(self._jabber_sid) - self._jabber_sid = gobject.timeout_add(self._APPLY_TIMEOUT, + self._jabber_sid = gobject.timeout_add(_APPLY_TIMEOUT, self.__jabber_timeout_cb, widget) def __jabber_timeout_cb(self, widget): @@ -223,17 +225,16 @@ class Network(SectionView): return try: self._model.set_jabber(widget.get_text()) - except ValueError, detail: + except ReadError, detail: self._jabber_alert.props.msg = detail self._jabber_valid = False + self._jabber_alert.show() + self.restart_alerts.append('jabber') else: - self._jabber_alert.props.msg = self.restart_msg self._jabber_valid = True - self.needs_restart = True - self.restart_alerts.append('jabber') + self._jabber_alert.hide() self._validate() - self._jabber_alert.show() return False def __network_configuration_reset_cb(self, widget): diff --git a/src/jarabe/controlpanel/gui.py b/src/jarabe/controlpanel/gui.py index 2f8da51..57f19f7 100644 --- a/src/jarabe/controlpanel/gui.py +++ b/src/jarabe/controlpanel/gui.py @@ -142,7 +142,7 @@ class ControlPanel(gtk.Window): if option == 'aboutme': self._table.attach(sectionicon, 0, 1, 0, 1) - elif option == 'aboutxo': + elif option == 'aboutcomputer': self._table.attach(sectionicon, 1, 2, 0, 1) else: self._table.attach(sectionicon, diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py index 81f2730..9371858 100644 --- a/src/jarabe/desktop/favoritesview.py +++ b/src/jarabe/desktop/favoritesview.py @@ -41,6 +41,7 @@ from jarabe.model.buddy import BuddyModel from jarabe.model import shell from jarabe.model import bundleregistry from jarabe import journal +from jarabe.controlpanel.gui import ControlPanel from jarabe.desktop import schoolserver from jarabe.desktop.schoolserver import RegisterError @@ -441,7 +442,14 @@ class ActivityIcon(CanvasIcon): if error is not None: logging.error('Error retrieving most recent activities: %r' % error) - self._journal_entries = entries + # If there's a problem with the DS index, we may get entries not related + # to this activity. + checked_entries = [] + for entry in entries: + if entry['activity'] == self.bundle_id: + checked_entries.append(entry) + + self._journal_entries = checked_entries self._update() def _update(self): diff --git a/src/jarabe/desktop/meshbox.py b/src/jarabe/desktop/meshbox.py index e650ba7..ab7348c 100644 --- a/src/jarabe/desktop/meshbox.py +++ b/src/jarabe/desktop/meshbox.py @@ -222,6 +222,10 @@ class AccessPointView(CanvasPulsingIcon): state = network.DEVICE_STATE_UNKNOWN if state == network.DEVICE_STATE_ACTIVATED: + connection = network.find_connection(self._name) + if connection: + connection.set_connected() + icon_name = '%s-connected' % _ICON_NAME else: icon_name = _ICON_NAME @@ -342,10 +346,10 @@ class AccessPointView(CanvasPulsingIcon): wireless_security = self._get_security() settings.wireless_security = wireless_security - connection = network.add_connection(self._name, settings) + if wireless_security is not None: + settings.wireless.security = '802-11-wireless-security' - if wireless_security is None: - self._connection = connection + connection = network.add_connection(self._name, settings) obj = self._bus.get_object(_NM_SERVICE, _NM_PATH) netmgr = dbus.Interface(obj, _NM_IFACE) @@ -357,8 +361,6 @@ class AccessPointView(CanvasPulsingIcon): error_handler=self.__activate_error_cb) def __activate_reply_cb(self, connection): - if self._connection: - self._connection.save() logging.debug('Connection activated: %s', connection) def __activate_error_cb(self, err): diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py index b399ad6..663cb12 100644 --- a/src/jarabe/journal/model.py +++ b/src/jarabe/journal/model.py @@ -336,7 +336,7 @@ class InplaceResultSet(BaseResultSet): self.progress.send(self) except Exception: - logging.error('Error reading file %r: %r' % \ + logging.error('Error reading file %r: %s' % \ (full_path, traceback.format_exc())) if self._pending_directories == 0: diff --git a/src/jarabe/model/network.py b/src/jarabe/model/network.py index 3900649..bd4b7d1 100644 --- a/src/jarabe/model/network.py +++ b/src/jarabe/model/network.py @@ -16,6 +16,7 @@ import logging import os +import time import dbus import ConfigParser @@ -87,7 +88,6 @@ class WirelessSecurity(object): def get_dict(self): wireless_security = {} - if self.key_mgmt is not None: wireless_security['key-mgmt'] = self.key_mgmt if self.proto is not None: @@ -96,26 +96,35 @@ class WirelessSecurity(object): wireless_security['pairwise'] = self.pairwise if self.group is not None: wireless_security['group'] = self.group - return wireless_security class Wireless(object): def __init__(self): self.ssid = None + self.security = None def get_dict(self): - return {'ssid': self.ssid} + wireless = {'ssid': self.ssid} + if self.security: + wireless['security'] = self.security + return wireless class Connection(object): def __init__(self): self.id = None self.uuid = None self.type = None + self.autoconnect = False + self.timestamp = None def get_dict(self): - return {'id': self.id, - 'uuid': self.uuid, - 'type': self.type} + connection = {'id': self.id, + 'uuid': self.uuid, + 'type': self.type, + 'autoconnect': self.autoconnect} + if self.timestamp: + connection['timestamp'] = self.timestamp + return connection class Settings(object): def __init__(self): @@ -205,6 +214,11 @@ class NMSettingsConnection(dbus.service.Object): self._settings = settings self._secrets = secrets + def set_connected(self): + self._settings.connection.autoconnect = True + self._settings.connection.timestamp = int(time.time()) + self.save() + def set_secrets(self, secrets): self._secrets = secrets self.save() @@ -229,6 +243,10 @@ class NMSettingsConnection(dbus.service.Object): config.set(identifier, 'type', self._settings.connection.type) config.set(identifier, 'ssid', self._settings.wireless.ssid) config.set(identifier, 'uuid', self._settings.connection.uuid) + config.set(identifier, 'autoconnect', + self._settings.connection.autoconnect) + config.set(identifier, 'timestamp', + self._settings.connection.timestamp) if self._settings.wireless_security is not None: if self._settings.wireless_security.key_mgmt is not None: @@ -243,6 +261,9 @@ class NMSettingsConnection(dbus.service.Object): if self._settings.wireless_security.group is not None: config.set(identifier, 'group', self._settings.wireless_security.group) + if self._settings.wireless.security is not None: + config.set(identifier, 'security', + self._settings.wireless.security) if self._secrets is not None: if self._settings.wireless_security.key_mgmt == 'none': config.set(identifier, 'key', self._secrets.wep_key) @@ -339,6 +360,10 @@ def load_connections(): settings.connection.uuid = uuid nmtype = config.get(section, 'type') settings.connection.type = nmtype + autoconnect = bool(config.get(section, 'autoconnect')) + settings.connection.autoconnect = autoconnect + timestamp = int(config.get(section, 'timestamp')) + settings.connection.timestamp = timestamp secrets = None if config.has_option(section, 'key-mgmt'): @@ -346,6 +371,8 @@ def load_connections(): settings.wireless_security = WirelessSecurity() mgmt = config.get(section, 'key-mgmt') settings.wireless_security.key_mgmt = mgmt + security = config.get(section, 'security') + settings.wireless.security = security key = config.get(section, 'key') if mgmt == 'none': secrets.wep_key = key |