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
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
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