[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