diff options
-rw-r--r-- | src/sugar/activity/activity.py | 3 | ||||
-rw-r--r-- | src/sugar/activity/activityfactory.py | 3 | ||||
-rw-r--r-- | src/sugar/datastore/datastore.py | 46 | ||||
-rw-r--r-- | src/sugar/graphics/palette.py | 2 | ||||
-rw-r--r-- | src/sugar/profile.py | 6 |
5 files changed, 54 insertions, 6 deletions
diff --git a/src/sugar/activity/activity.py b/src/sugar/activity/activity.py index 9043a3c..c948bda 100644 --- a/src/sugar/activity/activity.py +++ b/src/sugar/activity/activity.py @@ -984,7 +984,8 @@ class Activity(Window, gtk.Container): if not self.can_close(): return - if skip_save or self.metadata.get('title_set_by_user', '0') == '1': + if skip_save or self._jobject is None or \ + self.metadata.get('title_set_by_user', '0') == '1': if not self._closing: if not self._prepare_close(skip_save): return diff --git a/src/sugar/activity/activityfactory.py b/src/sugar/activity/activityfactory.py index e218a7c..2a6e4a9 100644 --- a/src/sugar/activity/activityfactory.py +++ b/src/sugar/activity/activityfactory.py @@ -153,8 +153,7 @@ def open_log_file(activity): while True: path = env.get_logs_path('%s-%s.log' % (activity.get_bundle_id(), i)) try: - fd = os.open(path, os.O_EXCL | os.O_CREAT \ - | os.O_SYNC | os.O_WRONLY, 0644) + fd = os.open(path, os.O_EXCL | os.O_CREAT | os.O_WRONLY, 0644) f = os.fdopen(fd, 'w', 0) return (path, f) except OSError, e: diff --git a/src/sugar/datastore/datastore.py b/src/sugar/datastore/datastore.py index d174bd4..6ff10de 100644 --- a/src/sugar/datastore/datastore.py +++ b/src/sugar/datastore/datastore.py @@ -27,11 +27,29 @@ import tempfile import gobject import gconf import gio +import dbus from sugar import env from sugar.datastore import dbus_helpers from sugar import mime +DS_DBUS_SERVICE = "org.laptop.sugar.DataStore" +DS_DBUS_INTERFACE = "org.laptop.sugar.DataStore" +DS_DBUS_PATH = "/org/laptop/sugar/DataStore" + +_data_store = None + +def _get_data_store(): + global _data_store + + if not _data_store: + _bus = dbus.SessionBus() + _data_store = dbus.Interface(_bus.get_object(DS_DBUS_SERVICE, + DS_DBUS_PATH), + DS_DBUS_INTERFACE) + return _data_store + + class DSMetadata(gobject.GObject): __gsignals__ = { 'updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, @@ -83,13 +101,39 @@ class DSMetadata(gobject.GObject): else: return default + def update(self, properties): + """Update all of the metadata""" + for (key, value) in properties.items(): + self[key] = value + + class DSObject(object): def __init__(self, object_id, metadata=None, file_path=None): - self.object_id = object_id + self.set_object_id(object_id) self._metadata = metadata self._file_path = file_path self._destroyed = False self._owns_file = False + self._update_signal_match = None + + def get_object_id(self): + return self._object_id + + def set_object_id(self, object_id): + if object_id is not None: + if self._update_signal_match is not None: + self._update_signal_match.remove() + self._update_signal_match = _get_data_store().connect_to_signal( \ + 'Updated', self.__object_updated_cb, arg0=object_id) + + self._object_id = object_id + + object_id = property(get_object_id, set_object_id) + + def __object_updated_cb(self, object_id): + properties = _get_data_store().get_properties(self.object_id, + byte_arrays=True) + self._metadata.update(properties) def get_metadata(self): if self._metadata is None and not self.object_id is None: diff --git a/src/sugar/graphics/palette.py b/src/sugar/graphics/palette.py index 1c668b6..9867ebc 100644 --- a/src/sugar/graphics/palette.py +++ b/src/sugar/graphics/palette.py @@ -654,7 +654,7 @@ class Palette(gtk.Window): def __hide_cb(self, widget): logging.debug('__hide_cb') self.menu.set_active(False) - + self.menu.cancel() self._secondary_anim.stop() if self._invoker: diff --git a/src/sugar/profile.py b/src/sugar/profile.py index d5012bd..df9237e 100644 --- a/src/sugar/profile.py +++ b/src/sugar/profile.py @@ -97,14 +97,18 @@ class Profile(object): return None key = "" + begin_found = False + end_found = False for l in lines: l = l.strip() if l.startswith("-----BEGIN DSA PRIVATE KEY-----"): + begin_found = True continue if l.startswith("-----END DSA PRIVATE KEY-----"): + end_found = True continue key += l - if not len(key): + if not (len(key) and begin_found and end_found): logging.error("Error parsing public key.") return None |