From e41ae62da584578f1a8ccd627db575bf30ba84b6 Mon Sep 17 00:00:00 2001 From: Sascha Silbe Date: Mon, 13 Sep 2010 08:44:30 +0000 Subject: add support for Sugar 0.82 data store --- diff --git a/restore.py b/restore.py index ebfe505..e8c73c0 100644 --- a/restore.py +++ b/restore.py @@ -140,6 +140,7 @@ class AsyncRestore(gobject.GObject): self._pipe_to_child = None self._pipe_from_child_watch_id = None self._data_store = None + self._data_store_version = None def start(self): """Start the restore process.""" @@ -328,6 +329,7 @@ class AsyncRestore(gobject.GObject): data_fd, data_file_name = tempfile.mkstemp(prefix='Restore', dir=self._tmp_dir) data_file = os.fdopen(data_fd, 'w') + os.chmod(data_file_name, 0640) try: # TODO: handle large files better (i.e. use external tool) # TODO: predict disk-full @@ -402,6 +404,7 @@ class AsyncRestore(gobject.GObject): DS_DBUS_PATH2), DS_DBUS_INTERFACE2) self._data_store.find({'tree_id': 'invalid'}, {'metadata': ['tree_id']}, timeout=DS_DBUS_SIMPLE_FIND_TIMEOUT) + self._data_store_version = 1000 logging.info('Data store with version support found') return @@ -412,7 +415,12 @@ class AsyncRestore(gobject.GObject): DS_DBUS_PATH1), DS_DBUS_INTERFACE1) self._data_store.find({'uid': 'invalid'}, ['uid'], timeout=DS_DBUS_SIMPLE_FIND_TIMEOUT) - logging.info('Data store without version support found') + if 'uri' in self._data_store.mounts()[0]: + self._data_store_version = 82 + logging.info('0.82 data store found') + else: + logging.info('0.84+ data store without version support found') + self._data_store_version = 84 def _save_entry(self, metadata, data_path): """Store object in data store.""" @@ -452,8 +460,15 @@ class AsyncRestore(gobject.GObject): # workaround for SL#1590 metadata['timestamp'] = str(int(timestamp)) - self._data_store.update(uid, metadata, data_path, True, - timeout=DS_DBUS_SAVE_TIMEOUT) + + if self._data_store_version == 82: + metadata['uid'] = uid + metadata.pop('mountpoint', None) + self._data_store.create(metadata, data_path, True, + timeout=DS_DBUS_SAVE_TIMEOUT) + else: + self._data_store.update(uid, metadata, data_path, True, + timeout=DS_DBUS_SAVE_TIMEOUT) def _find_entry_v1(self, uid): """Retrieve given entry from v1 data store if it exists. -- cgit v0.9.1