[Pkg-sugar-commit] [sugar-toolkit] 92/118: Changes to a Journal entries metadata are wiped if activity is still open (#1765)

Jonas Smedegaard dr at jones.dk
Thu Apr 16 18:49:46 UTC 2015


This is an automated email from the git hooks/post-receive script.

js pushed a commit to annotated tag debian/0.84.10-1
in repository sugar-toolkit.

commit 0fc8157a442c0317edcf21d93503efa2de6a55c1
Author: Simon Schampijer <simon at schampijer.de>
Date:   Mon Mar 22 18:29:49 2010 +0530

    Changes to a Journal entries metadata are wiped if activity is still open (#1765)
---
 src/sugar/datastore/datastore.py | 46 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 45 insertions(+), 1 deletion(-)

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:

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-sugar/sugar-toolkit.git



More information about the pkg-sugar-commit mailing list