class clipboardWatcher(QObject): on_server_update = pyqtSignal() def __init__(self, qtClipboard, login_callback): super(clipboardWatcher, self).__init__() self.clipboard = qtClipboard self._cur_contents = self.clipboard.text() self.clipboard.dataChanged.connect(self.update_to_server) self.on_server_update.connect(self.update_clipboard) self.first_login = True self.login_callback = login_callback def authenticate(self, username, password): if self.first_login: self.db = Database(self.login_callback, self.update_from_server) self.first_login = False self.db.authenticate(username, password) def update_to_server(self, replacing_paste=None): new_contents = self.clipboard.text() if new_contents != self._cur_contents: self.db.insert_new_paste(new_contents) self._cur_contents = new_contents def update_from_server(self, latest_paste): if latest_paste != self._cur_contents: self._cur_contents = latest_paste self.on_server_update.emit() def update_clipboard(self, paste = ""): if paste: self.clipboard.setText(paste) else: self.clipboard.setText(self._cur_contents) def get_contents(self): return self._cur_contents def stop(self): if not self.first_login: self.db.stop()