[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 13:07:17 EST 2011


Note:
(1) This uses the sugar-client (alsroot) api. Please make sure you have 
installed sugar-client rpm from the dextrose repo before testing this. 
Otherwise, it would just catch an except and display a message saying 
that can't determine relevant info.
(2) I've tested this to work on a XO-1 running Dextrose-3. However, the 
About my computer section takes a while to come up now. Maybe we could 
change the cursor to be 'busy' to indicate an action in progress.

On Tue 08 Nov 2011 11:19:50 PM IST, Anish Mangal wrote:
> 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()
>



More information about the Dextrose mailing list