コード例 #1
0
ファイル: activitymgr.py プロジェクト: lowinger42/ergotime
    def _do_sync(self):
        """
        Runs as a separate thread
        """
        
        # Get list of all activities on server
        try:
            srv_activities, tmp = network.request("GET", "%s/api/activity" % sett.server_url, decode=True)
        except network.NetworkException as err:
            log.error("Cannot load list of activities from server %s" % err)
            return
#        print("srvactivities", srvactivities)
        
        for srv_activity in srv_activities:
            srv_activity = AttrDict(srv_activity)
            log.debug("Server activity %s" % srv_activity)
             
            sql = "SELECT * FROM activity WHERE server_id=?"
            local_activity = self.localdb.select_one(sql, (srv_activity["_id"],) )
            if local_activity:
                # we have the activity locally, check if changed
                changes = []
                for attr in ['name', "description", "active"]:
                    if getattr(local_activity, attr) != getattr(srv_activity, attr):
                        changes.append(attr)
                if len(changes):
                    log.debugf(DEBUG_ACTIVITYMGR, "Updating local copy of activity, changed columns %s,  %s" % (changes, str(srv_activity).replace("\n", " ")))
                    local_activity.name = srv_activity["name"]
                    local_activity.server_id = srv_activity["_id"]
                    local_activity.active = srv_activity["active"]
                    try:
                        self.localdb.update("activity", d=local_activity, primary_key="_id")
                    except db.DbException as err:
                        log.error("Cannot update local activity %s" % err)
                        return
            else:
                # new activity
                log.debugf(DEBUG_ACTIVITYMGR, "New activity '%s' on server, saving in local database" % srv_activity.name)
                srv_activity.server_id = srv_activity._id
                srv_activity._id = -1
                try:
                    self.localdb.insert("activity", d=srv_activity, primary_key="_id")
                except db.DbException as err:
                    log.error("Cannot save new activity in local database %s" % err)
                    return

        self._loadList()
        self.sig.emit()