From 118287969c7b95c80254c960984235bc2f1a312d Mon Sep 17 00:00:00 2001 From: Simon Schampijer Date: Sun, 24 Jan 2010 16:49:27 +0000 Subject: Use-sugar.datastore. instead of direct DBus access #1198 (silbe) --- (limited to 'src/jarabe') diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py index eccd517..aefae5f 100644 --- a/src/jarabe/desktop/favoritesview.py +++ b/src/jarabe/desktop/favoritesview.py @@ -23,7 +23,6 @@ import gobject import gconf import gtk import hippo -import dbus from sugar.graphics import style from sugar.graphics.icon import Icon, CanvasIcon @@ -34,6 +33,7 @@ from sugar.activity import activityfactory from sugar.activity.activityhandle import ActivityHandle from sugar.presence import presenceservice from sugar import dispatch +from sugar.datastore import datastore from jarabe.view.palettes import JournalPalette from jarabe.view.palettes import CurrentActivityPalette, ActivityPalette @@ -91,7 +91,6 @@ class FavoritesView(hippo.Canvas): self._layout = None self._alert = None - self._datastore_listener = DatastoreListener() self._resume_mode = True # More DND stuff @@ -129,7 +128,7 @@ class FavoritesView(hippo.Canvas): def _add_activity(self, activity_info): if activity_info.get_bundle_id() == 'org.laptop.JournalActivity': return - icon = ActivityIcon(activity_info, self._datastore_listener) + icon = ActivityIcon(activity_info) icon.props.size = style.STANDARD_ICON_SIZE icon.set_resume_mode(self._resume_mode) self._box.insert_sorted(icon, 0, self._layout.compare_activities) @@ -345,65 +344,14 @@ class FavoritesView(hippo.Canvas): if hasattr(icon, 'set_resume_mode'): icon.set_resume_mode(self._resume_mode) -DS_DBUS_SERVICE = 'org.laptop.sugar.DataStore' -DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore' -DS_DBUS_PATH = '/org/laptop/sugar/DataStore' - -class DatastoreListener(object): - def __init__(self): - bus = dbus.SessionBus() - remote_object = bus.get_object(DS_DBUS_SERVICE, DS_DBUS_PATH) - self._datastore = dbus.Interface(remote_object, DS_DBUS_INTERFACE) - self._datastore.connect_to_signal('Created', - self.__datastore_created_cb) - self._datastore.connect_to_signal('Updated', - self.__datastore_updated_cb) - self._datastore.connect_to_signal('Deleted', - self.__datastore_deleted_cb) - - self.updated = dispatch.Signal() - self.deleted = dispatch.Signal() - - def __datastore_created_cb(self, object_id): - metadata = self._datastore.get_properties(object_id, byte_arrays=True) - self.updated.send(self, metadata=metadata) - - def __datastore_updated_cb(self, object_id): - metadata = self._datastore.get_properties(object_id, byte_arrays=True) - self.updated.send(self, metadata=metadata) - - def __datastore_deleted_cb(self, object_id): - self.deleted.send(self, object_id=object_id) - - def get_last_activity_async(self, bundle_id, properties, callback_cb): - query = {'activity': bundle_id, - 'limit': 5, - 'order_by': ['+timestamp']} - - reply_handler = lambda entries, total_count: self.__reply_handler_cb( - entries, total_count, callback_cb) - - error_handler = lambda error: self.__error_handler_cb( - error, callback_cb) - - self._datastore.find(query, properties, byte_arrays=True, - reply_handler=reply_handler, - error_handler=error_handler) - - def __reply_handler_cb(self, entries, total_count, callback_cb): - logging.debug('__reply_handler_cb') - callback_cb(entries) - - def __error_handler_cb(self, error, callback_cb): - logging.debug('__error_handler_cb') - callback_cb(None, error) class ActivityIcon(CanvasIcon): __gtype_name__ = 'SugarFavoriteActivityIcon' _BORDER_WIDTH = style.zoom(3) + _MAX_RESUME_ENTRIES = 5 - def __init__(self, activity_info, datastore_listener): + def __init__(self, activity_info): CanvasIcon.__init__(self, cache=True, file_name=activity_info.get_icon()) @@ -415,9 +363,8 @@ class ActivityIcon(CanvasIcon): self.connect('hovering-changed', self.__hovering_changed_event_cb) self.connect('button-release-event', self.__button_release_event_cb) - self._datastore_listener = datastore_listener - datastore_listener.updated.connect(self.__datastore_listener_updated_cb) - datastore_listener.deleted.connect(self.__datastore_listener_deleted_cb) + datastore.updated.connect(self.__datastore_listener_updated_cb) + datastore.deleted.connect(self.__datastore_listener_deleted_cb) self._refresh() self._update() @@ -426,8 +373,7 @@ class ActivityIcon(CanvasIcon): bundle_id = self._activity_info.get_bundle_id() properties = ['uid', 'title', 'icon-color', 'activity', 'activity_id', 'mime_type', 'mountpoint'] - self._datastore_listener.get_last_activity_async(bundle_id, properties, - self.__get_last_activity_async_cb) + self._get_last_activity_async(bundle_id, properties) def __datastore_listener_updated_cb(self, **kwargs): bundle_id = self._activity_info.get_bundle_id() @@ -440,11 +386,14 @@ class ActivityIcon(CanvasIcon): self._refresh() break - def __get_last_activity_async_cb(self, entries, error=None): - if error is not None: - logging.error('Error retrieving most recent activities: %r', error) - return + def _get_last_activity_async(self, bundle_id, properties): + query = {'activity': bundle_id} + datastore.find(query, sorting='-mtime', limit=self._MAX_RESUME_ENTRIES, + properties=properties, + reply_handler=self.__get_last_activity_reply_handler_cb, + error_handler=self.__get_last_activity_error_handler_cb) + def __get_last_activity_reply_handler_cb(self, entries, total_count): # If there's a problem with the DS index, we may get entries not related # to this activity. checked_entries = [] @@ -455,6 +404,9 @@ class ActivityIcon(CanvasIcon): self._journal_entries = checked_entries self._update() + def __get_last_activity_error_handler_cb(self, error): + logging.error('Error retrieving most recent activities: %r', error) + def _update(self): self.palette = None if not self._resume_mode or not self._journal_entries: @@ -726,4 +678,3 @@ def get_settings(): if _favorites_settings is None: _favorites_settings = FavoritesSetting() return _favorites_settings - diff --git a/src/jarabe/frame/activitiestray.py b/src/jarabe/frame/activitiestray.py index a4e9f81..b5762ee 100644 --- a/src/jarabe/frame/activitiestray.py +++ b/src/jarabe/frame/activitiestray.py @@ -22,7 +22,6 @@ import os import gobject import gconf -import dbus import gio import gtk @@ -36,6 +35,7 @@ from sugar.graphics.palette import Palette, WidgetInvoker from sugar.graphics.menuitem import MenuItem from sugar.activity.activityhandle import ActivityHandle from sugar.activity import activityfactory +from sugar.datastore import datastore from sugar import mime from sugar import env @@ -51,9 +51,6 @@ from jarabe.frame.frameinvoker import FrameWidgetInvoker from jarabe.frame.notification import NotificationIcon import jarabe.frame -DS_DBUS_SERVICE = "org.laptop.sugar.DataStore" -DS_DBUS_INTERFACE = "org.laptop.sugar.DataStore" -DS_DBUS_PATH = "/org/laptop/sugar/DataStore" class ActivityButton(RadioToolButton): def __init__(self, home_activity, group): @@ -477,8 +474,7 @@ class IncomingTransferButton(BaseTransferButton): def __init__(self, file_transfer): BaseTransferButton.__init__(self, file_transfer) - self._object_id = None - self._metadata = {} + self._ds_object = datastore.create() file_transfer.connect('notify::state', self.__notify_state_cb) file_transfer.connect('notify::transferred-bytes', @@ -512,58 +508,35 @@ class IncomingTransferButton(BaseTransferButton): def __notify_state_cb(self, file_transfer, pspec): if file_transfer.props.state == filetransfer.FT_STATE_OPEN: logging.debug('__notify_state_cb OPEN') - self._metadata['title'] = file_transfer.title - self._metadata['description'] = file_transfer.description - self._metadata['progress'] = '0' - self._metadata['keep'] = '0' - self._metadata['buddies'] = '' - self._metadata['preview'] = '' - self._metadata['icon-color'] = file_transfer.buddy.props.color - self._metadata['mime_type'] = file_transfer.mime_type - - datastore = self._get_datastore() - file_path = '' - transfer_ownership = True - self._object_id = datastore.create(self._metadata, file_path, - transfer_ownership) - + self._ds_object.metadata['title'] = file_transfer.title + self._ds_object.metadata['description'] = file_transfer.description + self._ds_object.metadata['progress'] = '0' + self._ds_object.metadata['keep'] = '0' + self._ds_object.metadata['buddies'] = '' + self._ds_object.metadata['preview'] = '' + self._ds_object.metadata['icon-color'] = \ + file_transfer.buddy.props.color + self._ds_object.metadata['mime_type'] = file_transfer.mime_type elif file_transfer.props.state == filetransfer.FT_STATE_COMPLETED: logging.debug('__notify_state_cb COMPLETED') - self._metadata['progress'] = '100' - - datastore = self._get_datastore() - file_path = file_transfer.destination_path - transfer_ownership = True - datastore.update(self._object_id, self._metadata, file_path, - transfer_ownership, - reply_handler=self.__reply_handler_cb, - error_handler=self.__error_handler_cb) - + self._ds_object.metadata['progress'] = '100' + self._ds_object.file_path = file_transfer.destination_path + datastore.write(self._ds_jobject, transfer_ownership=True, + reply_handler=self.__reply_handler_cb, + error_handler=self.__error_handler_cb) elif file_transfer.props.state == filetransfer.FT_STATE_CANCELLED: logging.debug('__notify_state_cb CANCELLED') - if self._object_id is not None: - datastore.delete(self._object_id, - reply_handler=self.__reply_handler_cb, - error_handler=self.__error_handler_cb) - self._object_id = None + object_id = self._jobject.object_id + if object_id is not None: + self._ds_object.destroy() + datastore.delete(object_id) + self._ds_object = None def __notify_transferred_bytes_cb(self, file_transfer, pspec): progress = file_transfer.props.transferred_bytes / \ file_transfer.file_size - self._metadata['progress'] = str(progress * 100) - - datastore = self._get_datastore() - file_path = '' - transfer_ownership = True - datastore.update(self._object_id, self._metadata, file_path, - transfer_ownership, - reply_handler=self.__reply_handler_cb, - error_handler=self.__error_handler_cb) - - def _get_datastore(self): - bus = dbus.SessionBus() - remote_object = bus.get_object(DS_DBUS_SERVICE, DS_DBUS_PATH) - return dbus.Interface(remote_object, DS_DBUS_INTERFACE) + self._ds_object.metadata['progress'] = str(progress * 100) + datastore.write(self._ds_object.object_id, update_mtime=False) def __reply_handler_cb(self): logging.debug('__reply_handler_cb %r', self._object_id) @@ -888,4 +861,3 @@ class OutgoingTransferPalette(BaseTransferPalette): def __dismiss_activate_cb(self, menu_item): self.emit('dismiss-clicked') - -- cgit v0.9.1