From dbdb97935d71912edff602a2b0d8bcd84d0f3992 Mon Sep 17 00:00:00 2001 From: anishmangal2002 Date: Fri, 02 Jul 2010 18:55:25 +0000 Subject: Journal:show error message on write failure: #1842 volumestoolbar.py now catches the IOError and ValueError exceptions and emits 'volume-error'signal. This signal is caught in journalactivity.py which displays the error as an ErrorAlert message. Signed-off-by: anishmangal2002 --- diff --git a/src/jarabe/journal/journalactivity.py b/src/jarabe/journal/journalactivity.py index 0559560..e278420 100644 --- a/src/jarabe/journal/journalactivity.py +++ b/src/jarabe/journal/journalactivity.py @@ -27,6 +27,8 @@ import statvfs import os from sugar.graphics.window import Window +from sugar.graphics.alert import ErrorAlert + from sugar.bundle.bundle import ZipExtractException, RegistrationException from sugar import env from sugar.activity import activityfactory @@ -138,6 +140,15 @@ class JournalActivity(Window): self._critical_space_alert = None self._check_available_space() + def __alert_notify_cb(self, gobject, strerror, severity): + alert = ErrorAlert(title=severity, msg=strerror) + alert.connect('response', self.__alert_response_cb) + self.add_alert(alert) + alert.show() + + def __alert_response_cb(self, alert, response_id): + self.remove_alert(alert) + def __realize_cb(self, window): wm.set_bundle_id(window.window, _BUNDLE_ID) activity_id = activityfactory.create_activity_id() @@ -161,6 +172,7 @@ class JournalActivity(Window): self._volumes_toolbar = VolumesToolbar() self._volumes_toolbar.connect('volume-changed', self.__volume_changed_cb) + self._volumes_toolbar.connect('volume-error', self.__alert_notify_cb) self._main_view.pack_start(self._volumes_toolbar, expand=False) search_toolbar = self._main_toolbox.search_toolbar diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py index 74b974c..8b7786f 100644 --- a/src/jarabe/journal/volumestoolbar.py +++ b/src/jarabe/journal/volumestoolbar.py @@ -15,6 +15,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import logging +import os from gettext import gettext as _ import gobject @@ -35,7 +36,10 @@ class VolumesToolbar(gtk.Toolbar): __gsignals__ = { 'volume-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, - ([str])) + ([str])), + 'volume-error': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([str, str])) } def __init__(self): @@ -81,6 +85,7 @@ class VolumesToolbar(gtk.Toolbar): button = VolumeButton(mount) button.props.group = self._volume_buttons[0] button.connect('toggled', self._button_toggled_cb) + button.connect('volume-error', self.__volume_error_cb) position = self.get_item_index(self._volume_buttons[-1]) + 1 self.insert(button, position) button.show() @@ -90,6 +95,9 @@ class VolumesToolbar(gtk.Toolbar): if len(self.get_children()) > 1: self.show() + def __volume_error_cb(self, button, strerror, severity): + self.emit('volume-error', strerror, severity) + def _button_toggled_cb(self, button): if button.props.active: self.emit('volume-changed', button.mount_point) @@ -123,6 +131,12 @@ class VolumesToolbar(gtk.Toolbar): button.props.active = True class BaseButton(RadioToolButton): + __gsignals__ = { + 'volume-error': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([str, str])) + } + def __init__(self, mount_point): RadioToolButton.__init__(self) @@ -137,7 +151,19 @@ class BaseButton(RadioToolButton): info, timestamp): object_id = selection_data.data metadata = model.get(object_id) - model.copy(metadata, self.mount_point) + file_path = model.get_file(metadata['uid']) + if not file_path or not os.path.exists(file_path): + logging.warn('File does not exist') + self.emit('volume-error', _('Entries without a file cannot' + ' be copied'), _('Warning')) + return + + try: + model.copy(metadata, self.mount_point) + except IOError: + logging.exception('BaseButton._drag_data_received_cb: Error' + 'while copying') + self.emit('volume-error', _('Input/Output error'), _('Error')) class VolumeButton(BaseButton): def __init__(self, mount): -- cgit v0.9.1