@@ -18,15 +18,16 @@

from gi.repository import GConf

from jarabe.journal.model import get_documents_path
from jarabe.journal.model import get_user_dir_paths
from jarabe.desktop.homebackgroundbox import BACKGROUND_IMAGE_PATH_STRING
from jarabe.desktop.homebackgroundbox import BACKGROUND_ALPHA_LEVEL_STRING
from jarabe.desktop.homebackgroundbox import DEFAULT_BACKGROUND_ALPHA_LEVEL

import os

BACKGROUNDS_DIRS = (os.path.join('/usr', 'share', 'backgrounds'),
get_documents_path())
dir_paths = [path for name, path, icon in get_user_dir_paths()]
dir_paths.append(os.path.join('/usr', 'share', 'backgrounds'))
BACKGROUNDS_DIRS = tuple(dir_paths)


def set_background_image_path(file_path):
@@ -205,15 +205,16 @@ def __model_ready_cb(self, tree_model):
self.icon_view.props.vadjustment.value_changed()

if len(tree_model) == 0:
documents_path = model.get_documents_path()
user_dir_paths = model.get_user_dir_paths()
if self._is_query_empty():
if self._query['mountpoints'] == ['/']:
self._show_message(_('Your Journal is empty'))
elif documents_path and self._query['mountpoints'] == \
[documents_path]:
self._show_message(_('Your documents folder is empty'))
else:
self._show_message(_('The device is empty'))
name = [n for n, p, i in user_dir_paths if self._query['mountpoints'] == [p]]
if name:
self._show_message(_(name[0] + ' folder is empty'))
else:
self._show_message(_('The device is empty'))
else:
self._show_message(_('No matching entries'),
show_clear_query=True)
@@ -382,15 +382,16 @@ def __model_ready_cb(self, tree_model):
self.tree_view.get_bin_window().show()

if len(tree_model) == 0:
documents_path = model.get_documents_path()
user_dir_paths = model.get_user_dir_paths()
if self._is_query_empty():
if self._query['mountpoints'] == ['/']:
self._show_message(_('Your Journal is empty'))
elif documents_path and self._query['mountpoints'] == \
[documents_path]:
self._show_message(_('Your documents folder is empty'))
else:
self._show_message(_('The device is empty'))
name = [n for n, p, i in user_dir_paths if self._query['mountpoints'] == [p]]
if name:
self._show_message(_(name[0] + ' folder is empty'))
else:
self._show_message(_('The device is empty'))
else:
self._show_message(_('No matching entries'),
show_clear_query=True)
@@ -844,3 +844,30 @@ def get_documents_path():
if exception.errno != errno.ENOENT:
logging.exception('Could not run xdg-user-dir')
return None

def get_user_dir_paths():
directories = [
('DESKTOP','user-documents'),
('DOWNLOAD','user-documents'),
('TEMPLATES','user-documents'),
('PUBLICSHARE','user-documents'),
('DOCUMENTS','user-documents'),
('MUSIC','user-documents'),
('PICTURES','user-documents'),
('VIDEOS','user-documents'),
]

result = []
for directory, icon in directories:
try:
pipe = subprocess.Popen(['xdg-user-dir', directory],
stdout=subprocess.PIPE)
dir_path = os.path.normpath(pipe.communicate()[0].strip())
if os.path.exists(dir_path) and \
os.environ.get('HOME') != dir_path:
result.append((directory.title(), dir_path, icon))
except OSError, exception:
if exception.errno != errno.ENOENT:
logging.exception('Could not run xdg-user-dir')

return result
@@ -260,17 +260,17 @@ def _create_menu_items(self):
self._menu.append(journal_menu)
journal_menu.show()

documents_path = model.get_documents_path()
if documents_path is not None and \
self._journalactivity.get_mount_point() != documents_path:
documents_menu = VolumeMenu(self._journalactivity,
self._get_uid_list_cb, _('Documents'),
documents_path)
documents_menu.set_image(Icon(icon_name='user-documents',
icon_size=Gtk.IconSize.MENU))
documents_menu.connect('volume-error', self.__volume_error_cb)
self._menu.append(documents_menu)
documents_menu.show()
dir_paths = model.get_user_dir_paths()
for dir_name, dir_path, icon_name in dir_paths:
if self._journalactivity.get_mount_point() != dir_path:
user_dir_menu = VolumeMenu(self._journalactivity,
self._get_uid_list_cb, _(dir_name),
dir_path)
user_dir_menu.set_image(Icon(icon_name=icon_name,
icon_size=Gtk.IconSize.MENU))
user_dir_menu.connect('volume-error', self.__volume_error_cb)
self._menu.append(user_dir_menu)
user_dir_menu.show()

volume_monitor = Gio.VolumeMonitor.get()
self._volumes = {}
@@ -193,7 +193,7 @@ def __destroy_cb(self, widget):
volume_monitor.disconnect(self._mount_removed_hid)

def _set_up_volumes(self):
self._set_up_documents_button()
self._set_up_user_dir_buttons()

volume_monitor = Gio.VolumeMonitor.get()
self._mount_added_hid = volume_monitor.connect('mount-added',
@@ -205,12 +205,12 @@ def _set_up_volumes(self):
for mount in volume_monitor.get_mounts():
self._add_button(mount)

def _set_up_documents_button(self):
documents_path = model.get_documents_path()
if documents_path is not None:
button = DocumentsButton(documents_path)
def _set_up_user_dir_buttons(self):
dir_paths = model.get_user_dir_paths()
for dir_name, dir_path, icon_name in dir_paths:
button = UserDirectoryButton(dir_path, icon_name)
button.props.group = self._volume_buttons[0]
label = GLib.markup_escape_text(_('Documents'))
label = GLib.markup_escape_text(_(dir_name))
button.set_palette(Palette(label))
button.connect('toggled', self._button_toggled_cb)
button.show()
@@ -381,12 +381,12 @@ def __popup_cb(self, palette):
{'free_space': free_space / (1024 * 1024)}


class DocumentsButton(BaseButton):
class UserDirectoryButton(BaseButton):

def __init__(self, documents_path):
BaseButton.__init__(self, mount_point=documents_path)
def __init__(self, dir_path, icon_name):
BaseButton.__init__(self, mount_point=dir_path)

self.props.icon_name = 'user-documents'
self.props.icon_name = icon_name

client = GConf.Client.get_default()
color = XoColor(client.get_string('/desktop/sugar/user/color'))