def _syncml_run(self): err = pysyncml.Error() self._setup_connection(err) self._setup_datastore(err) self.syncobj.set_option(enums.SML_DATA_SYNC_CONFIG_VERSION, self._syncml_version_, pysyncml.byref(err)) self.syncobj.set_option(enums.SML_DATA_SYNC_CONFIG_IDENTIFIER, self._syncml_identifier_, pysyncml.byref(err)) self.syncobj.set_option(enums.SML_DATA_SYNC_CONFIG_USE_WBXML, "1", pysyncml.byref(err)) 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) self.syncobj.register_set_anchor_callback(self._handle_set_anchor, None) self.syncobj.register_get_anchor_callback(self._handle_get_anchor, None) self.syncobj.register_get_alert_type_callback(self._handle_get_alert_type, None) if not self.syncobj.init(pysyncml.byref(err)): log.error("Unable to prepare synchronisation") return if not self.syncobj.run(pysyncml.byref(err)): log.error("Unable to synchronise") log.error (err.message) return log.info("running sync..") return err
def _setup_connection(self, err = pysyncml.Error()): self.syncobj = pysyncml.SyncObject.new(enums.SML_SESSION_TYPE_CLIENT, enums.SML_TRANSPORT_HTTP_CLIENT, pysyncml.byref(err)) self.syncobj.set_option(enums.SML_TRANSPORT_CONFIG_URL, self._address_, pysyncml.byref(err)) if self.username != None and len(self.username) > 0: self.syncobj.set_option(enums.SML_DATA_SYNC_CONFIG_AUTH_USERNAME, self.username, pysyncml.byref(err)) self.syncobj.set_option(enums.SML_DATA_SYNC_CONFIG_AUTH_PASSWORD, self.password, pysyncml.byref(err)) self._session_type = enums.SML_SESSION_TYPE_CLIENT
def _syncml_sendall(self): err = pysyncml.Error() for key in self._actions[0].keys(): LUID = str(uuid.uuid4()) self.syncobj.add_change(self._store_, enums.SML_CHANGE_ADD, LUID, self._actions[0][key], len(self._actions[0][key]), "", pysyncml.byref(err)) for key in self._actions[1].keys(): self.syncobj.add_change(self._store_, enums.SML_CHANGE_DELETE, key, "", 0, key, pysyncml.byref(err)) for key in self._actions[2].keys(): self.syncobj.add_change(self._store_, enums.SML_CHANGE_REPLACE, key, self._actions[2][key], len(self._actions[2][key]), key, pysyncml.byref(err)) self.syncobj.send_changes(pysyncml.byref(err))
def handle_change(self, sync_object, source, type, uid, data, size, userdata, err): """ handle_change is called by libsyncml to tells us about changes on the server or device we are synchronising to. This WILL happen in a different thread to where sync is happening. """ log.debug("got change (%s)" %(['UNKNOWN','ADD', 'REPLACE','DELETE'][type])) self._rawContacts[uid] = data err = pysyncml.Error() self.syncobj.add_mapping(source, uid, uid, pysyncml.byref(err)) return 1
def _setup_datastore(self): err = pysyncml.Error() self.syncobj.add_datastore(self._mime_, None, self._store_, pysyncml.byref(err))
def finish(self): self.syncobj.unref(pysyncml.byref(self.syncobj))