Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
 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))
Esempio n. 4
0
    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
Esempio n. 5
0
 def _setup_datastore(self):
     err = pysyncml.Error()
     self.syncobj.add_datastore(self._mime_, None, self._store_, pysyncml.byref(err))
Esempio n. 6
0
 def finish(self):
     self.syncobj.unref(pysyncml.byref(self.syncobj))