def __init__(self, app): QMainWindow.__init__(self) self.app = app self.ui = Ui_MainWindow() self.ui.setupUi(self) self._exit = False self.ui.action_Exit.triggered.connect(self.exit) self.ui.actionAbout_Qt.triggered.connect(app.aboutQt) self.setWindowIcon(QIcon(':/icons/logo32')) self.listener = None self.tray = None self.pusher = None self._connected = False self.settings_dlg = SettingsDlg(self) self.settings_dlg.saved.connect(self.reconnect) self.tray = PushbulletTray(self) self.connect_actions() self.connect_pushbullet() self.tray.show()
class MainWindow(QMainWindow): connected = pyqtSignal(bool) def __init__(self, app): QMainWindow.__init__(self) self.app = app self.ui = Ui_MainWindow() self.ui.setupUi(self) self._exit = False self.ui.action_Exit.triggered.connect(self.exit) self.ui.actionAbout_Qt.triggered.connect(app.aboutQt) self.setWindowIcon(QIcon(':/icons/logo32')) self.listener = None self.tray = None self.pusher = None self._connected = False self.settings_dlg = SettingsDlg(self) self.settings_dlg.saved.connect(self.reconnect) self.tray = PushbulletTray(self) self.connect_actions() self.connect_pushbullet() self.tray.show() def connect_actions(self): self.ui.action_Settings.triggered.connect(self.settings_dlg.show) self.ui.browseFileBtn.clicked.connect(self.choice_file) self.ui.action_Refresh.triggered.connect(self.refresh) # List Items self.ui.addItemBtn.clicked.connect(self.add_item_list) self.ui.removeItemBtn.clicked.connect(self.remove_item_list) self.ui.clearItemsBtn.clicked.connect(self.clear_item_list) self.ui.itemsList.itemDoubleClicked.connect(self.edit_item_list) @pyqtSlot() def add_item_list(self): item = QListWidgetItem("item", self.ui.itemsList) item.setFlags(item.flags() | Qt.ItemIsEditable) self.ui.itemsList.addItem(item) @pyqtSlot() def remove_item_list(self): if self.ui.itemsList.currentRow() >= 0: self.ui.itemsList.takeItem(self.ui.itemsList.currentRow()) @pyqtSlot() def clear_item_list(self): self.ui.itemsList.clear() @pyqtSlot(QListWidgetItem) def edit_item_list(self, item): self.ui.itemsList.editItem(item) @pyqtSlot() def choice_file(self): file_to_send = QFileDialog.getOpenFileName(self, "choose file to send") if file_to_send and not file_to_send.isEmpty(): self.ui.filePathEdt.setText(file_to_send) @pyqtSlot() def refresh(self): self.refresh_devices() @pyqtSlot() def refresh_devices(self): self.ui.devicesList.clear() for device in self.pusher.devices: device_item = QListWidgetItem(device.nickname) device_item.setData(Qt.UserRole, device) self.ui.devicesList.addItem(device_item) def connect_pushbullet(self): if config.value('key') is not None and not config.value('key').toString().isEmpty(): proxy_host = str(config.value('proxy.host').toString()) proxy_port, int_conv_ok = config.value('proxy.port').toInt() if proxy_host.strip() == '': proxy_host = proxy_port = None self.pusher = PushBullet(str(config.value('key').toString())) self.listener = QPushBulletListener(self, self.pusher, proxy_host, proxy_port) self.listener.start() self.connect_systray() self.connect_pushes_actions() self.refresh_devices() self.connected.emit(True) self._connected = True else: self.connected.emit(False) def disconnect_pushbullet(self): self.connected.emit(False) if False and self.listener is not None: print "systray" self.disconnect_systray() print "listener quit" self.listener.quit() print "listener terminate" self.listener.terminate() print "disconnect_pushes" self.disconnect_pushes_actions() self.listener = None @pyqtSlot() def push_note(self): if self.pusher and len(self.ui.devicesList.selectedItems()) == 1: device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject() device.push_note(str(self.ui.noteTitleEdt.text()), str(self.ui.noteTextEdt.toPlainText())) else: QMessageBox.warning(self, "Cannot push", "There is no target device selected") @pyqtSlot() def push_link(self): if self.pusher and len(self.ui.devicesList.selectedItems()) == 1: device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject() device.push_link(str(self.ui.linkTitleEdt.text()), str(self.ui.linkUrlEdt.text())) else: QMessageBox.warning(self, "Cannot push", "There is no target device selected") @pyqtSlot() def push_list(self): if self.pusher and len(self.ui.devicesList.selectedItems()) == 1: device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject() widget_items = [self.ui.itemsList.item(n) for n in range(0, self.ui.itemsList.count())] items = map(lambda x: str(x.text()), widget_items) device.push_list(str(self.ui.listTitleEdt.text()), items) else: QMessageBox.warning(self, "Cannot push", "There is no target device selected") @pyqtSlot() def push_file(self): if self.pusher and len(self.ui.devicesList.selectedItems()) == 1: device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject() fname = str(self.ui.filePathEdt.text()) with open(fname, "rb") as f_to_send: success, file_data = self.pusher.upload_file(f_to_send, os.path.basename(fname)) if success: device.push_file(**file_data) else: QMessageBox.warning(self, "Cannot push", "There is no target device selected") @pyqtSlot() def push_address(self): if self.pusher and len(self.ui.devicesList.selectedItems()) == 1: device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject() device.push_address(str(self.ui.addressTitleEdt.text()), str(self.ui.addressTxt.toPlainText())) else: QMessageBox.warning(self, "Cannot push", "There is no target device selected") def connect_pushes_actions(self): self.ui.sendNoteBtn.clicked.connect(self.push_note) self.ui.sendLinkBtn.clicked.connect(self.push_link) self.ui.sendFileBtn.clicked.connect(self.push_file) self.ui.sendListBtn.clicked.connect(self.push_list) self.ui.sendAddressBtn.clicked.connect(self.push_address) def disconnect_pushes_actions(self): self.ui.sendNoteBtn.clicked.disconnect(self.push_note) self.ui.sendLinkBtn.clicked.disconnect(self.push_link) self.ui.sendFileBtn.clicked.disconnect(self.push_file) self.ui.sendListBtn.clicked.disconnect(self.push_list) self.ui.sendAddressBtn.clicked.disconnect(self.push_address) def connect_systray(self, ): if self.tray is not None: self.connected.connect(self.tray.connected) self.listener.on_link.connect(self.tray.on_link) self.listener.on_note.connect(self.tray.on_note) self.connected.emit(self._connected) def disconnect_systray(self): if self.tray is not None: self.listener.on_link.disconnect(self.tray.on_link) self.listener.on_note.disconnect(self.tray.on_note) @pyqtSlot() def reconnect(self): if self.listener is not None: self.disconnect_pushbullet() self.connect_pushbullet() @pyqtSlot() def exit(self): self._exit = True self.close() def closeEvent(self, event): if not self._exit: self.hide() event.ignore() else: QMainWindow.closeEvent(self, event)