diff options
Diffstat (limited to 'extensions/cpsection/aboutcomputer')
-rw-r--r-- | extensions/cpsection/aboutcomputer/__init__.py | 1 | ||||
-rw-r--r-- | extensions/cpsection/aboutcomputer/model.py | 101 | ||||
-rw-r--r-- | extensions/cpsection/aboutcomputer/view.py | 34 |
3 files changed, 102 insertions, 34 deletions
diff --git a/extensions/cpsection/aboutcomputer/__init__.py b/extensions/cpsection/aboutcomputer/__init__.py index ceb515a..faf814d 100644 --- a/extensions/cpsection/aboutcomputer/__init__.py +++ b/extensions/cpsection/aboutcomputer/__init__.py @@ -19,4 +19,3 @@ from gettext import gettext as _ CLASS = 'AboutComputer' ICON = 'module-about_my_computer' TITLE = _('About my Computer') - diff --git a/extensions/cpsection/aboutcomputer/model.py b/extensions/cpsection/aboutcomputer/model.py index 898d79c..3219dd1 100644 --- a/extensions/cpsection/aboutcomputer/model.py +++ b/extensions/cpsection/aboutcomputer/model.py @@ -22,31 +22,45 @@ import subprocess from gettext import gettext as _ import errno +import dbus + from jarabe import config + +_NM_SERVICE = 'org.freedesktop.NetworkManager' +_NM_PATH = '/org/freedesktop/NetworkManager' +_NM_IFACE = 'org.freedesktop.NetworkManager' +_NM_DEVICE_IFACE = 'org.freedesktop.NetworkManager.Device' +_NM_DEVICE_TYPE_WIFI = 2 + _logger = logging.getLogger('ControlPanel - AboutComputer') _not_available = _('Not available') + 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_aboutcomputer(): print get_aboutcomputer() + def get_serial_number(): serial_no = _read_file('/ofw/serial-number') if serial_no is None: serial_no = _not_available return serial_no - + + def print_serial_number(): serial_no = get_serial_number() if serial_no is None: serial_no = _not_available print serial_no + def get_build_number(): build_no = _read_file('/boot/olpc_build') @@ -68,38 +82,88 @@ def get_build_number(): return build_no + def print_build_number(): print get_build_number() -def get_firmware_number(): + +def get_firmware_number(): firmware_no = _read_file('/ofw/openprom/model') if firmware_no is None: firmware_no = _not_available else: - firmware_no = re.split(" +", firmware_no) + firmware_no = re.split(' +', firmware_no) if len(firmware_no) == 3: firmware_no = firmware_no[1] - return firmware_no + return firmware_no + -def print_firmware_number(): +def print_firmware_number(): print get_firmware_number() -def get_wireless_firmware(): + +def _get_wireless_interfaces(): try: - info = subprocess.Popen(["/usr/sbin/ethtool", "-i", "eth0"], - stdout=subprocess.PIPE).stdout.readlines() - except OSError: + bus = dbus.SystemBus() + manager_object = bus.get_object(_NM_SERVICE, _NM_PATH) + network_manager = dbus.Interface(manager_object, _NM_IFACE) + except dbus.DBusException: + _logger.warning('Cannot connect to NetworkManager, falling back to' + ' static list of devices') + return ['wlan0', 'eth0'] + + interfaces = [] + for device_path in network_manager.GetDevices(): + device_object = bus.get_object(_NM_SERVICE, device_path) + properties = dbus.Interface(device_object, + 'org.freedesktop.DBus.Properties') + device_type = properties.Get(_NM_DEVICE_IFACE, 'DeviceType') + if device_type != _NM_DEVICE_TYPE_WIFI: + continue + + interfaces.append(properties.Get(_NM_DEVICE_IFACE, 'Interface')) + + return interfaces + + +def get_wireless_firmware(): + environment = os.environ.copy() + environment['PATH'] = '%s:/usr/sbin' % (environment['PATH'], ) + firmware_info = {} + for interface in _get_wireless_interfaces(): + try: + output = subprocess.Popen(['ethtool', '-i', interface], + stdout=subprocess.PIPE, + env=environment).stdout.readlines() + except OSError: + _logger.exception('Error running ethtool for %r', interface) + continue + + try: + version = ([line for line in output + if line.startswith('firmware')][0].split()[1]) + except IndexError: + _logger.exception('Error parsing ethtool output for %r', + interface) + continue + + firmware_info[interface] = version + + if not firmware_info: return _not_available - try: - wireless_firmware = [line for line in info - if line.startswith('firmware')][0].split()[1] - except IndexError: - wireless_firmware = _not_available - return wireless_firmware + + if len(firmware_info) == 1: + return firmware_info.values()[0] + + return ', '.join([_('%(interface)s: %(version)s') % + {'interface': interface, 'version': version} + for interface, version in firmware_info.items()]) + def print_wireless_firmware(): print get_wireless_firmware() + def _read_file(path): if os.access(path, os.R_OK) == 0: return None @@ -114,17 +178,18 @@ def _read_file(path): _logger.debug('No information in file or directory: %s', path) return None + def get_license(): license_file = os.path.join(config.data_path, 'GPLv2') lang = os.environ['LANG'] - if lang.endswith("UTF-8"): + if lang.endswith('UTF-8'): lang = lang[:-6] - try_file = license_file + "." + lang + try_file = license_file + '.' + lang if os.path.isfile(try_file): license_file = try_file else: - try_file = license_file + "." + lang.split("_")[0] + try_file = license_file + '.' + lang.split('_')[0] if os.path.isfile(try_file): license_file = try_file diff --git a/extensions/cpsection/aboutcomputer/view.py b/extensions/cpsection/aboutcomputer/view.py index dd4f8f3..e5f2f32 100644 --- a/extensions/cpsection/aboutcomputer/view.py +++ b/extensions/cpsection/aboutcomputer/view.py @@ -26,6 +26,7 @@ from sugar.graphics import style from jarabe import config from jarabe.controlpanel.sectionview import SectionView + class AboutComputer(SectionView): def __init__(self, model, alerts=None): SectionView.__init__(self) @@ -68,7 +69,7 @@ class AboutComputer(SectionView): box_identity = gtk.HBox(spacing=style.DEFAULT_SPACING) label_serial = gtk.Label(_('Serial Number:')) label_serial.set_alignment(1, 0) - label_serial.modify_fg(gtk.STATE_NORMAL, + label_serial.modify_fg(gtk.STATE_NORMAL, style.COLOR_SELECTION_GREY.get_gdk_color()) box_identity.pack_start(label_serial, expand=False) self._group.add_widget(label_serial) @@ -83,7 +84,7 @@ class AboutComputer(SectionView): self._vbox.pack_start(vbox_identity, expand=False) vbox_identity.show() - def _setup_software(self): + def _setup_software(self): separator_software = gtk.HSeparator() self._vbox.pack_start(separator_software, expand=False) separator_software.show() @@ -99,7 +100,7 @@ class AboutComputer(SectionView): box_build = gtk.HBox(spacing=style.DEFAULT_SPACING) label_build = gtk.Label(_('Build:')) label_build.set_alignment(1, 0) - label_build.modify_fg(gtk.STATE_NORMAL, + label_build.modify_fg(gtk.STATE_NORMAL, style.COLOR_SELECTION_GREY.get_gdk_color()) box_build.pack_start(label_build, expand=False) self._group.add_widget(label_build) @@ -130,7 +131,7 @@ class AboutComputer(SectionView): box_firmware = gtk.HBox(spacing=style.DEFAULT_SPACING) label_firmware = gtk.Label(_('Firmware:')) label_firmware.set_alignment(1, 0) - label_firmware.modify_fg(gtk.STATE_NORMAL, + label_firmware.modify_fg(gtk.STATE_NORMAL, style.COLOR_SELECTION_GREY.get_gdk_color()) box_firmware.pack_start(label_firmware, expand=False) self._group.add_widget(label_firmware) @@ -174,27 +175,30 @@ class AboutComputer(SectionView): vbox_copyright.set_border_width(style.DEFAULT_SPACING * 2) vbox_copyright.set_spacing(style.DEFAULT_SPACING) - label_copyright = gtk.Label("© 2006-2009 One Laptop per Child " - "Association Inc; Red Hat Inc; Collabora Ltd; " - "and Contributors.") + copyright_text = '© 2006-2011 One Laptop per Child Association Inc,' \ + ' Sugar Labs Inc, Red Hat Inc, Collabora Ltd and' \ + ' Contributors.' + label_copyright = gtk.Label(copyright_text) label_copyright.set_alignment(0, 0) + label_copyright.set_size_request(gtk.gdk.screen_width() / 2, -1) + label_copyright.set_line_wrap(True) label_copyright.show() vbox_copyright.pack_start(label_copyright, expand=False) - label_info = gtk.Label(_("Sugar is the graphical user interface that " - "you are looking at. Sugar is free software, " - "covered by the GNU General Public License, " - "and you are welcome to change it and/or " - "distribute copies of it under certain " - "conditions described therein.")) + info_text = _('Sugar is the graphical user interface that you are' + ' looking at. Sugar is free software, covered by the' + ' GNU General Public License, and you are welcome to' + ' change it and/or distribute copies of it under' + ' certain conditions described therein.') + label_info = gtk.Label(info_text) label_info.set_alignment(0, 0) label_info.set_line_wrap(True) label_info.set_size_request(gtk.gdk.screen_width() / 2, -1) label_info.show() vbox_copyright.pack_start(label_info, expand=False) - expander = gtk.Expander(_("Full license:")) - expander.connect("notify::expanded", self.license_expander_cb) + expander = gtk.Expander(_('Full license:')) + expander.connect('notify::expanded', self.license_expander_cb) expander.show() vbox_copyright.pack_start(expander, expand=True) |