[conduit/syncml: 89/244] Use our own uids for stuff so that conduit can update its mapping database in the normal way. A yuck



commit e7782e93924f737acb1765067090fedde30a1997
Author: John Carr <john carr unrouted co uk>
Date:   Fri Apr 24 09:05:34 2009 -0700

    Use our own uids for stuff so that conduit can update its mapping database in the normal way. A yucky layer of id abstraction :P
---
 conduit/modules/SyncmlModule/SyncmlModule.py |   20 ++++++++++++++------
 conduit/modules/SyncmlModule/pysyncml.py     |    2 +-
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/conduit/modules/SyncmlModule/SyncmlModule.py b/conduit/modules/SyncmlModule/SyncmlModule.py
index f00038a..e1b3614 100644
--- a/conduit/modules/SyncmlModule/SyncmlModule.py
+++ b/conduit/modules/SyncmlModule/SyncmlModule.py
@@ -126,10 +126,16 @@ class SyncmlDataProvider(DataProvider.TwoWay):
         """
         return 1
 
+    def handle_change_status(self, sync_object, code, newuid, userdata, err):
+        if code < 200 or 299 < code:
+            return 0
+        self.mapping[userdata] = newuid
+        return 1
+
     def _syncml_sendall(self):
         err = pysyncml.Error()
-        for t, uid, blob in self._queue:
-            self.syncobj.add_change(self._store_, t, uid, blob, len(blob), None, pysyncml.byref(err))
+        for t, LUID, uid, blob in self._queue:
+            self.syncobj.add_change(self._store_, t, uid, blob, len(blob), LUID, pysyncml.byref(err))
         self.syncobj.send_changes(pysyncml.byref(err))
         self._queue = []
 
@@ -147,6 +153,7 @@ class SyncmlDataProvider(DataProvider.TwoWay):
         self.syncobj.register_event_callback(self._handle_event, None)
         self.syncobj.register_change_callback(self._handle_change, None)
         self.syncobj.register_handle_remote_devinf_callback(self._handle_devinf, None)
+        self.syncobj.register_change_status_callback(self._handle_change_status)
 
         if not self.syncobj.init(pysyncml.byref(err)):
             log.error("Unable to prepare synchronisation")
@@ -168,6 +175,7 @@ class SyncmlDataProvider(DataProvider.TwoWay):
         self._handle_event = pysyncml.EventCallback(self.handle_event)
         self._handle_change = pysyncml.ChangeCallback(self.handle_change)
         self._handle_devinf = pysyncml.HandleRemoteDevInfCallback(self.handle_devinf)
+        self._handle_change_status = pysyncml.HandleChangeStatusCallback(self.handle_change_status)
 
         self._refresh_lock = threading.Event()
         self._put_lock = threading.Event()
@@ -209,15 +217,15 @@ class SyncmlDataProvider(DataProvider.TwoWay):
         blob = self._obj_to_blob(obj)
 
         if LUID == None:
-            self._queue.append((enums.SML_CHANGE_ADD, "", blob))
             LUID = str(uuid.uuid4())
+            self._queue.append((enums.SML_CHANGE_ADD, LUID, "", blob))
             return conduit.datatypes.Rid(uid=LUID, hash=hash(blob))
 
-        self._queue.append((enums.SML_CHANGE_REPLACE, self.mapping[uid], blob))
+        self._queue.append((enums.SML_CHANGE_REPLACE, LUID, self.mapping[LUID], blob))
         return conduit.datatypes.Rid(uid=LUID, hash=hash(blob))
 
-    def delete(self, uid):
-        self._queue.append((enums.SML_CHANGE_DELETE, uid, ""))
+    def delete(self, LUID):
+        self._queue.append((enums.SML_CHANGE_DELETE, LUID, self.mapping[LUID], ""))
 
     def finish(self, a, b, c):
         self._put_lock.set()
diff --git a/conduit/modules/SyncmlModule/pysyncml.py b/conduit/modules/SyncmlModule/pysyncml.py
index 067021f..c596d6e 100644
--- a/conduit/modules/SyncmlModule/pysyncml.py
+++ b/conduit/modules/SyncmlModule/pysyncml.py
@@ -102,7 +102,7 @@ g_thread_init = lib.g_thread_init
 EventCallback = CFUNCTYPE(None, SyncObject, c_int, c_void_p, Error)
 GetAlertTypeCallback = CFUNCTYPE(c_int, SyncObject, c_char_p, c_int, c_void_p, POINTER(Error))
 ChangeCallback = CFUNCTYPE(c_int, SyncObject, c_char_p, c_int, c_char_p, c_char_p, c_uint, c_void_p, POINTER(Error))
-ChangeStatusCallback = CFUNCTYPE(c_int, SyncObject, c_uint, c_char_p, c_void_p, POINTER(Error))
+ChangeStatusCallback = CFUNCTYPE(c_int, SyncObject, c_uint, c_char_p, c_char_p, POINTER(Error))
 GetAnchorCallback = CFUNCTYPE(c_char_p, SyncObject, c_char_p, c_void_p, POINTER(Error))
 SetAnchorCallback = CFUNCTYPE(c_int, SyncObject, c_char_p, c_char_p, c_void_p, POINTER(Error))
 WriteDevInfCallback = CFUNCTYPE(c_int, SyncObject, Info, c_void_p, POINTER(Error))



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]