Ejemplo n.º 1
0
    def update_key(self):
        key = self.key()

        if key != self.current_key and key in self.manager.ghosts:
            InfiniteGlass.DEBUG("ghost", "DUPLICATE SHADOW %s\n" % (self, ))
            self.destroy()

        if not self.manager.restoring_ghosts and not self.from_config:

            cur = self.manager.dbconn.cursor()
            for name, value in self.properties.items():
                if self._properties.get(name, NoValue) != value:
                    cur.execute(
                        """
                      insert or replace into ghosts (key, name, value) VALUES (?, ?, ?)
                    """, (key, name,
                          json.dumps(value,
                                     default=InfiniteGlass.tojson(
                                         self.manager.display))))
                    self.manager.changes = True
            for name, value in self._properties.items():
                if name not in self.properties:
                    cur.execute(
                        """
                      delete from ghosts where key=? and name=?
                    """, (key, name))
                    self.manager.changes = True
            if key != self.current_key and self.current_key is not None:
                try:
                    cur.execute(
                        """
                      update ghosts set key=? where key=?
                        """, (key, self.current_key))
                except Exception as e:
                    InfiniteGlass.DEBUG(
                        "ghost.database",
                        "Error updating key in db: %s\nkey=%s =>  key=%s\n" %
                        (e, self.current_key, key))
                    self.destroy()
                self.manager.changes = True

        if key == self.current_key:
            return

        client = self.manager.clients.get(self.properties.get("SM_CLIENT_ID"))

        if self.current_key is not None:
            del self.manager.ghosts[self.current_key]
            if client:
                del client.ghosts[self.current_key]
            InfiniteGlass.DEBUG(
                "ghost",
                "UPDATE KEY from %s to %s\n" % (self.current_key, key))
            sys.stderr.flush()

        self.current_key = key
        self.manager.ghosts[self.current_key] = self

        if client:
            client.ghosts[self.current_key] = self
Ejemplo n.º 2
0
 def save_changes(self):
     if not self.manager.restoring_islands:
         cur = self.manager.dbconn.cursor()
         for name, value in self.properties.items():
             if self._properties.get(name, NoValue) != value:
                 cur.execute(
                     """
                   insert or replace into islands (key, name, value) VALUES (?, ?, ?)
                 """, (self.key, name,
                       json.dumps(value,
                                  default=InfiniteGlass.tojson(
                                      self.manager.display))))
                 self.manager.changes = True
         for name, value in self._properties.items():
             if name not in self.properties:
                 cur.execute(
                     """
                   delete from islands where key=? and name=?
                 """, (self.key, name))
                 self.manager.changes = True
Ejemplo n.º 3
0
    def updatedb(self):
        if self.manager.restoring_clients: return

        cur = self.manager.dbconn.cursor()
        for name, value in self.properties.items():
            if self._properties.get(name, NoValue) != value:
                cur.execute(
                    """
                  insert or replace into clients (key, name, value) VALUES (?, ?, ?)
                """, (self.client_id, name,
                      json.dumps(value,
                                 default=InfiniteGlass.tojson(
                                     self.manager.display))))
                self.manager.changes = True
        for name, value in self._properties.items():
            if name not in self.properties:
                cur.execute(
                    """
                  delete from clients where key=? and name=?
                """, (self.client_id, name))
                self.manager.changes = True