[Dextrose] [PATCH 52/54] sl#2713: Add last updated on field to CP/About my computer

Anish Mangal anish at sugarlabs.org
Tue Nov 8 12:49:50 EST 2011


Signed-off-by: Anish Mangal <anish at sugarlabs.org>
---
 extensions/cpsection/aboutcomputer/model.py |   60 ++++++++++++++++++++++++++-
 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()
 
-- 
1.7.4.4



More information about the Dextrose mailing list