From 06b29d4399d5f40b218a625ab169746eaf17911a Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Sat, 13 Oct 2007 18:40:29 +0000 Subject: #3552: Cancel a donwload when the related journal entry is deleted. --- diff --git a/NEWS b/NEWS index 43b0b1f..dc9e410 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,5 @@ +* #3552: Cancel a donwload when the related journal entry is deleted. (tomeu) + 62 * #2910 Open popups in the current window (marco) diff --git a/downloadmanager.py b/downloadmanager.py index dfc8a10..a190d75 100644 --- a/downloadmanager.py +++ b/downloadmanager.py @@ -24,6 +24,7 @@ from xpcom.nsError import * from xpcom import components from xpcom.components import interfaces from xpcom.server.factory import Factory +import dbus from sugar.datastore import datastore from sugar.clipboard import clipboardservice @@ -38,6 +39,12 @@ if dbus.version >= (0, 82, 3): else: DBUS_PYTHON_TIMEOUT_UNITS_PER_SECOND = 1000 +NS_BINDING_ABORTED = 0x804b0002 # From nsNetError.h + +DS_DBUS_SERVICE = 'org.laptop.sugar.DataStore' +DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore' +DS_DBUS_PATH = '/org/laptop/sugar/DataStore' + _browser = None _temp_path = '/tmp' def init(browser, temp_path): @@ -101,6 +108,7 @@ class Download: self._cb_object_id = None self._last_update_time = 0 self._last_update_percent = 0 + self._cancelable = cancelable return NS_OK @@ -169,8 +177,6 @@ class Download: self._last_update_percent = percent if percent < 100: - self._dl_jobject.metadata['title'] = _('Downloading %s from\n%s.') % \ - (file_name, self._source.spec) self._dl_jobject.metadata['progress'] = str(percent) datastore.write(self._dl_jobject) @@ -196,6 +202,17 @@ class Download: self._dl_jobject.file_path = '' datastore.write(self._dl_jobject) + bus = dbus.SessionBus() + obj = bus.get_object(DS_DBUS_SERVICE, DS_DBUS_PATH) + datastore_dbus = dbus.Interface(obj, DS_DBUS_INTERFACE) + datastore_dbus.connect_to_signal('Deleted', self.__datastore_deleted_cb, + arg0=self._dl_jobject.object_id) + + def __datastore_deleted_cb(self, uid): + logging.debug('Downloaded entry has been deleted from the datastore: %r' % uid) + # TODO: Use NS_BINDING_ABORTED instead of NS_ERROR_FAILURE. + self._cancelable.cancel(NS_ERROR_FAILURE) #NS_BINDING_ABORTED) + def _create_clipboard_object(self): path, file_name = os.path.split(self._target_file.path) -- cgit v0.9.1