diff options
-rw-r--r-- | extensions/cpsection/aboutcomputer/model.py | 60 | ||||
-rw-r--r-- | extensions/cpsection/aboutcomputer/view.py | 22 |
2 files changed, 81 insertions, 1 deletions
diff --git a/extensions/cpsection/aboutcomputer/model.py b/extensions/cpsection/aboutcomputer/model.py index 52a1094..753055d 100644 --- a/extensions/cpsection/aboutcomputer/model.py +++ b/extensions/cpsection/aboutcomputer/model.py @@ -27,7 +27,6 @@ import dbus from jarabe import config - _NM_SERVICE = 'org.freedesktop.NetworkManager' _NM_PATH = '/org/freedesktop/NetworkManager' _NM_IFACE = 'org.freedesktop.NetworkManager' @@ -254,3 +253,62 @@ def get_license(): except IOError: license_text = _not_available return license_text + +def get_last_updated_on_field(): + + # Get the number of UNIX seconds of the last update date. + last_update_unix_seconds = {} + try: + SERVICE_NAME = 'org.sugarlabs.client.System' + SERVICE_PATH = '/org/sugarlabs/client/System' + SERVICE_INTERFACE = 'org.sugarlabs.client.System' + + bus_class = dbus.SystemBus() + system_obj = bus_class.get_object(SERVICE_NAME, SERVICE_PATH) + system_iface = dbus.Interface(system_obj, SERVICE_INTERFACE) + system_props = dbus.Interface(system_iface, + dbus.PROPERTIES_IFACE) + last_update_unix_seconds = system_props.Get(SERVICE_INTERFACE, + 'LastUpdate') + except: + msg_str = ('There was some error fetching the last-update-time' + '\nfrom sugar-server. Please contact Support.') + _logger.exception(msg_str) + return _(msg_str) + + # Check once agin that 'last_update_unix_seconds' is not empty. + # You never know ! + if not last_update_unix_seconds: + return _('No update yet!') + + # If we reached here, we have the last-update-time, but it's in + # timestamp format. + # Using python-subprocess-module (no shell involved), to convert + # it into readable date-format; the hack being used (after + # removing '-u' option) is the first one mentioned at : + # http://www.commandlinefu.com/commands/view/3719/convert-unix-timestamp-to-date + environment = os.environ.copy() + environment['PATH'] = '%s:/usr/sbin' % (environment['PATH'], ) + + last_update_readable_format = {} + try: + last_update_readable_format = \ + subprocess.Popen(['date', '-d', + '1970-01-01 + ' + + str(last_update_unix_seconds) + + ' seconds'], + stdout=subprocess.PIPE, + env=environment).stdout.readlines()[0] + except: + msg_str = ('There was some error in the processing of' + '\nlast-update-time. Please contact Support.') + _logger.exception(msg_str) + return _(msg_str) + + if not last_update_readable_format: + return _('There was some error in the processing of\n' + 'last-update-time. Please contact Support.') + + # Everything should be fine (hopefully :-) ) + return last_update_readable_format + diff --git a/extensions/cpsection/aboutcomputer/view.py b/extensions/cpsection/aboutcomputer/view.py index d719372..dd2f200 100644 --- a/extensions/cpsection/aboutcomputer/view.py +++ b/extensions/cpsection/aboutcomputer/view.py @@ -171,6 +171,28 @@ class AboutComputer(SectionView): box_software.pack_start(box_wireless_fw, expand=False) box_wireless_fw.show() + # Try to fetch "Last Updated On" field from the model. + # If the field is not empty, display it. + # At present, the field is returned empty, only if "root-access" + # is disabled on the target-machine. + last_updated_on_field = self._model.get_last_updated_on_field() + if last_updated_on_field: + box_last_updated_on = gtk.HBox(spacing=style.DEFAULT_SPACING) + label_last_updated_on = gtk.Label(_('Last Updated On:')) + label_last_updated_on.set_alignment(1, 0) + label_last_updated_on.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + box_last_updated_on.pack_start(label_last_updated_on, expand=False) + self._group.add_widget(label_last_updated_on) + label_last_updated_on.show() + label_last_updated_on_field = \ + gtk.Label(last_updated_on_field) + label_last_updated_on_field.set_alignment(0, 0) + box_last_updated_on.pack_start(label_last_updated_on_field, expand=False) + label_last_updated_on_field.show() + box_software.pack_start(box_last_updated_on, expand=False) + box_last_updated_on.show() + self._vbox.pack_start(box_software, expand=False) box_software.show() |