diff options
Diffstat (limited to 'src/jarabe/journal/palettes.py')
-rw-r--r-- | src/jarabe/journal/palettes.py | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/jarabe/journal/palettes.py b/src/jarabe/journal/palettes.py index 740b65a..46ade98 100644 --- a/src/jarabe/journal/palettes.py +++ b/src/jarabe/journal/palettes.py @@ -29,6 +29,7 @@ import gconf import gio import glib import time +import socket from sugar import _sugarext @@ -45,6 +46,10 @@ from jarabe.model import mimeregistry from jarabe.journal import misc from jarabe.journal import model +from webdav.Connection import WebdavError +from jarabe.journal.webdavmanager import get_resource_by_ip_address_and_resource_key + + friends_model = friends.get_model() _copy_menu_helper = None @@ -77,6 +82,9 @@ class ObjectPalette(Palette): Palette.__init__(self, primary_text=title, icon=activity_icon) + from jarabe.journal.journalactivity import get_mount_point + current_mount_point = get_mount_point() + if misc.get_activities(metadata) or misc.is_bundle(metadata): if metadata.get('activity_id', ''): resume_label = _('Resume') @@ -86,10 +94,15 @@ class ObjectPalette(Palette): resume_with_label = _('Start with') menu_item = MenuItem(resume_label, 'activity-start') menu_item.connect('activate', self.__start_activate_cb) + if model.is_mount_point_for_locally_mounted_remote_share(current_mount_point): + menu_item.set_sensitive(False) self.menu.append(menu_item) menu_item.show() menu_item = MenuItem(resume_with_label, 'activity-start') + if model.is_mount_point_for_locally_mounted_remote_share(current_mount_point): + menu_item.set_sensitive(False) + self.menu.append(menu_item) menu_item.show() start_with_menu = StartWithMenu(self._metadata) @@ -101,6 +114,7 @@ class ObjectPalette(Palette): self.menu.append(menu_item) menu_item.show() + menu_item = MenuItem(_('Copy to')) icon = Icon(icon_name='edit-copy', xo_color=color, icon_size=gtk.ICON_SIZE_MENU) @@ -120,16 +134,21 @@ class ObjectPalette(Palette): copy_menu.connect('volume-error', self.__volume_error_cb) menu_item.set_submenu(copy_menu) + if self._metadata['mountpoint'] == '/': menu_item = MenuItem(_('Duplicate')) icon = Icon(icon_name='edit-duplicate', xo_color=color, icon_size=gtk.ICON_SIZE_MENU) menu_item.set_image(icon) menu_item.connect('activate', self.__duplicate_activate_cb) + if model.is_mount_point_for_locally_mounted_remote_share(current_mount_point): + menu_item.set_sensitive(False) self.menu.append(menu_item) menu_item.show() menu_item = MenuItem(_('Send to'), 'document-send') + if model.is_mount_point_for_locally_mounted_remote_share(current_mount_point): + menu_item.set_sensitive(False) self.menu.append(menu_item) menu_item.show() @@ -140,14 +159,19 @@ class ObjectPalette(Palette): if detail == True: menu_item = MenuItem(_('View Details'), 'go-right') menu_item.connect('activate', self.__detail_activate_cb) + if model.is_mount_point_for_locally_mounted_remote_share(current_mount_point): + menu_item.set_sensitive(False) self.menu.append(menu_item) menu_item.show() menu_item = MenuItem(_('Erase'), 'list-remove') menu_item.connect('activate', self.__erase_activate_cb) + if model.is_mount_point_for_locally_mounted_remote_share(current_mount_point): + menu_item.set_sensitive(False) self.menu.append(menu_item) menu_item.show() + def __start_activate_cb(self, menu_item): misc.resume(self._metadata) @@ -541,6 +565,31 @@ class ActionItem(gobject.GObject): self._post_operate_per_metadata_per_action(metadata) def _file_path_valid(self, metadata): + from jarabe.journal.journalactivity import get_mount_point + current_mount_point = get_mount_point() + + # Now, for locally mounted remote-shares, download the file. + # Note that, always download the file, to avoid the problems + # of stale-cache. + if model.is_mount_point_for_locally_mounted_remote_share(current_mount_point): + file_path = metadata['uid'] + filename = os.path.basename(file_path) + ip_address = model.extract_ip_address_from_locally_mounted_remote_share_path(file_path) + resource = get_resource_by_ip_address_and_resource_key(ip_address, '/webdav/' + filename) + download_file_path = '/tmp/' + ip_address + '/' + filename + try: + resource.downloadFile(download_file_path) + return True + except (WebdavError, socket.error), e: + error_message = e + logging.warn(error_message) + if self._batch_mode: + self._handle_error_alert(error_message, metadata) + else: + self.emit('volume-error', error_message, + _('Error')) + return False + file_path = model.get_file(metadata['uid']) if not file_path or not os.path.exists(file_path): logging.warn('Entries without a file cannot be copied.') @@ -708,6 +757,25 @@ class DocumentsMenu(BaseCopyMenuItem): self._post_operate_per_metadata_per_action(metadata) +class SharesMenu(BaseCopyMenuItem): + def __init__(self, metadata_list, show_editing_alert, + show_progress_info_alert, batch_mode): + BaseCopyMenuItem.__init__(self, metadata_list, _('Shares'), + show_editing_alert, + show_progress_info_alert, + batch_mode) + + def _operate(self, metadata): + if not self._file_path_valid(metadata): + return False + if not self._metadata_copy_valid(metadata, + '/var/www/web1/web'): + return False + + # This is sync-operation. Call the post-operation now. + self._post_operate_per_metadata_per_action(metadata) + + class FriendsMenu(gtk.Menu): __gtype_name__ = 'JournalFriendsMenu' @@ -835,6 +903,17 @@ class CopyMenuHelper(gtk.Menu): menu.append(documents_menu) documents_menu.show() + if get_mount_point() != '/var/www/web1/web': + documents_menu = SharesMenu(metadata_list, + show_editing_alert, + show_progress_info_alert, + batch_mode) + documents_menu.set_image(Icon(icon_name='emblem-neighborhood-shared', + icon_size=gtk.ICON_SIZE_MENU)) + documents_menu.connect('volume-error', self.__volume_error_cb) + menu.append(documents_menu) + documents_menu.show() + if get_mount_point() != '/': client = gconf.client_get_default() color = XoColor(client.get_string('/desktop/sugar/user/color')) |