Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Silbe <sascha-pgp@silbe.org>2010-08-30 22:05:53 (GMT)
committer Sascha Silbe <sascha-pgp@silbe.org>2010-08-30 22:22:26 (GMT)
commit959ddd059f8753126290a5fbb78f9539d4fceb07 (patch)
tree5646aa1314a9375fc51dce87c260996aeee4cc5f
parent35da9f690a88edad96b0666bc08292fc04a9023b (diff)
add support for Sugar 0.82
Tested on XO-1 running Sugar 0.82.1 / Build 801.
-rw-r--r--backup.py34
1 files changed, 26 insertions, 8 deletions
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()