From 959ddd059f8753126290a5fbb78f9539d4fceb07 Mon Sep 17 00:00:00 2001 From: Sascha Silbe Date: Mon, 30 Aug 2010 22:05:53 +0000 Subject: add support for Sugar 0.82 Tested on XO-1 running Sugar 0.82.1 / Build 801. --- diff --git a/backup.py b/backup.py index 13c683f..9f92e3f 100644 --- a/backup.py +++ b/backup.py @@ -17,6 +17,7 @@ """ import gettext +import hashlib import logging import os import select @@ -28,7 +29,6 @@ import traceback import zipfile import dbus -import gconf import gobject import gtk @@ -47,13 +47,13 @@ from sugar.activity import activity import sugar.env from sugar.graphics import style from sugar.graphics.toolbutton import ToolButton -from sugar.graphics.xocolor import XoColor import sugar.logger from sugar import profile try: import json -except ImportError: + json.dumps +except (ImportError, AttributeError): import simplejson as json @@ -131,11 +131,23 @@ class AsyncBackup(gobject.GObject): self._entries = None self._data_store = None self._user_name = profile.get_nick_name().replace('/', ' ') - self._key_hash = profile.get_profile().privkey_hash + self._id = self._get_id() if '\0' in self._user_name: raise ValueError('Invalid user name') + def _get_id(self): + """Determine a unique identifier for the user or machine. + + On XOs, the serial number will be used. On other systems the SHA-1 + hash of the public key will be used. + """ + try: + return file('/ofw/mfg-data/SN').read().rstrip('\0\n') + except IOError: + logging.debug('Not running on XO') + + return hashlib.sha1(profile.get_pubkey()).hexdigest() def start(self): """Start the backup process.""" @@ -290,7 +302,7 @@ class AsyncBackup(gobject.GObject): date = time.strftime('%Y-%m-%d') prefix = _('Journal backup of %s (%s) on %s') % (self._user_name, - self._key_hash, date) + self._id, date) bundle_fd, path = self._create_file(self._mount_point, prefix, '.xmj') try: return path, zipfile.ZipFile(path, 'w', zipfile.ZIP_DEFLATED) @@ -329,11 +341,15 @@ class AsyncBackup(gobject.GObject): object_id = entry['uid'] object_id_s = object_id + object_id_s = str(object_id_s) metadata = self._get_metadata(object_id) data_path = self._get_data(object_id) if data_path: bundle.write(data_path, os.path.join(object_id_s, object_id_s)) + for name in metadata: + metadata[name] = str(metadata[name]) + for name, value in metadata.items(): is_binary = False try: @@ -390,7 +406,10 @@ class AsyncBackup(gobject.GObject): {'tree_id': tree_id, 'version_id': version_id}, {}, byte_arrays=True)[0][0] else: - return self._data_store.get_properties(object_id, byte_arrays=True) + metadata = self._data_store.get_properties(object_id, + byte_arrays=True) + metadata['uid'] = object_id + return metadata def _get_data(self, object_id): """Return path to data for data store entry identified by object_id.""" @@ -420,8 +439,7 @@ class BackupActivity(activity.Activity): self._backup_button = None self._backup = None self._hal_devices = {} - client = gconf.client_get_default() - self._color = XoColor(client.get_string('/desktop/sugar/user/color')) + self._color = profile.get_color() self._setup_widgets() self._find_media() -- cgit v0.9.1