[Sugar-devel] [PATCH] adding $HOME/Documents to volumestoolbar

Simon Schampijer simon at schampijer.de
Tue Aug 16 09:09:19 EDT 2011


Hi Walter,

thanks for the patch! Comments inline:

On 08/15/2011 05:16 PM, Walter Bender wrote:
> From: Walter Bender<walter.bender at gmail.com>
>
> This patch adds $HOME/Documents to the volume toolbar in the Journal view.
> The rationale is to make it easier for people to move files in and out of
> the data store from the file system -- a feature oft requested by teachers.
> It also means that Sugar activities can more readily access files generated
> outside of Sugar -- another feature requested by teachers.
>
> This resubmission of the patch includes a suggestion by Silbe that the
> xdg-user-dir call be factored out in a separate (global) function
>
> Note that this patch requires the inclusion of a new icon, user-documents,
> that is included in a separate patch.
>
> See 1313419398-9452-1-git-send-email-walter at sugarlabs.org
>
> ---
>   src/jarabe/journal/volumestoolbar.py |   42 ++++++++++++++++++++++++++++++++++
>   1 files changed, 42 insertions(+), 0 deletions(-)
>
> diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py
> index 72b5918..e1d1721 100644
> --- a/src/jarabe/journal/volumestoolbar.py
> +++ b/src/jarabe/journal/volumestoolbar.py
> @@ -16,6 +16,8 @@
>
>   import logging
>   import os
> +import subprocess
> +import errno
>   import statvfs
>   from gettext import gettext as _
>
> @@ -53,6 +55,19 @@ def _get_id(document):
>           return None
>

The _get_documents_path() has the wrong indentation.

> +def _get_documents_path():

Please add a docstring here.

> +        try:
> +            pipe = subprocess.Popen(['xdg-user-dir', 'DOCUMENTS'],

You are introducing a new dependency here: xdg-user-dirs. Any specific 
reason why you do not want to use the HOME env variable?

 From a quick survey: I guess relying on the env variable HOME like you 
do in your other patch would be fine as well. You could as well do 
"os.getenv('XDG_DATA_HOME', os.path.expanduser('~/'))" so once a 
xdg_data_home is set we do not fail (we do this as well in the toolkit), 
but I would maybe fix this up in another go if we want to.

> +                                    stdout=subprocess.PIPE)
> +            documents_path = pipe.communicate()[0].strip()
> +            if os.path.exists(documents_path):
> +                return documents_path
> +        except OSError, exception:
> +            if exception.errno != errno.ENOENT:
> +                logging.exception('Could not run xdg-user-dir')
> +        return None
> +
> +
>   def _convert_entries(root):
>       """Convert entries written by the datastore version 0.
>
> @@ -189,6 +204,8 @@ class VolumesToolbar(gtk.Toolbar):
>           volume_monitor.disconnect(self._mount_removed_hid)
>
>       def _set_up_volumes(self):
> +        self._set_up_documents_button()
> +
>           volume_monitor = gio.volume_monitor_get()
>           self._mount_added_hid = volume_monitor.connect('mount-added',
>                                                          self.__mount_added_cb)
> @@ -198,6 +215,19 @@ class VolumesToolbar(gtk.Toolbar):
>           for mount in volume_monitor.get_mounts():
>               self._add_button(mount)
>
> +    def _set_up_documents_button(self):
> +        documents_path = _get_documents_path()
> +        if documents_path is not None:
> +            button = DocumentsButton(documents_path)
> +            button.props.group = self._volume_buttons[0]
> +            button.set_palette(Palette(_('Documents')))
> +            button.connect('toggled', self._button_toggled_cb)
> +            button.show()
> +
> +            self.insert(button, -1)
> +            self._volume_buttons.append(button)
> +            self.show()
> +
>       def __mount_added_cb(self, volume_monitor, mount):
>           self._add_button(mount)
>
> @@ -372,3 +402,15 @@ class JournalButtonPalette(Palette):
>           self._progress_bar.props.fraction = fraction
>           self._free_space_label.props.label = _('%(free_space)d MB Free') % \
>                   {'free_space': free_space / (1024 * 1024)}
> +
> +
> +class DocumentsButton(BaseButton):
> +
> +    def __init__(self, documents_path):
> +        BaseButton.__init__(self, mount_point=documents_path)
> +
> +        self.props.named_icon = 'user-documents'
> +
> +        client = gconf.client_get_default()
> +        color = XoColor(client.get_string('/desktop/sugar/user/color'))
> +        self.props.xo_color = color

Regards,
    Simon


More information about the Sugar-devel mailing list