%PDF- %PDF-
Direktori : /lib/calibre/calibre/gui2/dialogs/ |
Current File : //lib/calibre/calibre/gui2/dialogs/smartdevice.py |
#!/usr/bin/env python3 __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>' from qt.core import (QDialog, QLineEdit, Qt) from calibre.gui2 import error_dialog from calibre.gui2.dialogs.smartdevice_ui import Ui_Dialog from calibre.utils.mdns import get_all_ips from polyglot.builtins import itervalues def ipaddr_sort_key(ipaddr): if '.' in ipaddr: parts = tuple(map(int, ipaddr.split('.'))) is_private = parts[0] in (192, 170, 10) return (0 if is_private else 1), parts def get_all_ip_addresses(): ipaddrs = list() for iface in itervalues(get_all_ips()): for addrs in iface: if 'broadcast' in addrs and addrs['addr'] != '127.0.0.1': ipaddrs.append(addrs['addr']) ipaddrs.sort(key=ipaddr_sort_key) return ipaddrs class SmartdeviceDialog(QDialog, Ui_Dialog): def __init__(self, parent): QDialog.__init__(self, parent) Ui_Dialog.__init__(self) self.setupUi(self) self.password_box.setToolTip('<p>' + _('Use a password if calibre is running on a network that ' 'is not secure. For example, if you run calibre on a laptop, ' 'use that laptop in an airport, and want to connect your ' 'smart device to calibre, you should use a password.') + '</p>') self.autostart_box.setToolTip('<p>' + _('Check this box if you want calibre to automatically start the ' 'smart device interface when calibre starts. You should not do ' 'this if you are using a network that is not secure and you ' 'are not setting a password.') + '</p>') self.use_fixed_port.setToolTip('<p>' + _('Check this box if you want calibre to use a fixed network ' 'port. Normally you will not need to do this. However, if ' 'your device consistently fails to connect to calibre, ' 'try checking this box and entering a number.') + '</p>') self.fixed_port.setToolTip('<p>' + _('Try 9090. If calibre says that it fails to connect ' 'to the port, try another number. You can use any number between ' '8,000 and 65,535.') + '</p>') self.ip_addresses.setToolTip('<p>' + _('These are the IP addresses for this computer. If you decide to have your device connect to ' 'calibre using a fixed IP address, one of these addresses should ' 'be the one you use. It is unlikely but possible that the correct ' 'IP address is not listed here, in which case you will need to go ' "to your computer's control panel to get a complete list of " "your computer's network interfaces and IP addresses.") + '</p>') self.show_password.stateChanged[int].connect(self.toggle_password) self.use_fixed_port.stateChanged[int].connect(self.use_fixed_port_changed) self.device_manager = parent.device_manager if self.device_manager.get_option('smartdevice', 'autostart'): self.autostart_box.setChecked(True) pw = self.device_manager.get_option('smartdevice', 'password') if pw: self.password_box.setText(pw) self.orig_fixed_port = self.device_manager.get_option('smartdevice', 'use_fixed_port') self.orig_port_number = self.device_manager.get_option('smartdevice', 'port_number') self.fixed_port.setText(self.orig_port_number) self.use_fixed_port.setChecked(self.orig_fixed_port) if not self.orig_fixed_port: self.fixed_port.setEnabled(False) if pw: self.password_box.setText(pw) forced_ip = self.device_manager.get_option('smartdevice', 'force_ip_address') if forced_ip: self.ip_addresses.setText(forced_ip) else: self.ip_addresses.setText(', '.join(get_all_ip_addresses())) self.resize(self.sizeHint()) def use_fixed_port_changed(self, state): self.fixed_port.setEnabled(state == Qt.CheckState.Checked) def toggle_password(self, state): self.password_box.setEchoMode(QLineEdit.EchoMode.Password if state == Qt.CheckState.Unchecked else QLineEdit.EchoMode.Normal) def accept(self): port = str(self.fixed_port.text()) if not port: error_dialog(self, _('Invalid port number'), _('You must provide a port number.'), show=True) return try: port = int(port) except: error_dialog(self, _('Invalid port number'), _('The port must be a number between 8000 and 65535.'), show=True) return if port < 8000 or port > 65535: error_dialog(self, _('Invalid port number'), _('The port must be a number between 8000 and 65535.'), show=True) return self.device_manager.set_option('smartdevice', 'password', str(self.password_box.text())) self.device_manager.set_option('smartdevice', 'autostart', self.autostart_box.isChecked()) self.device_manager.set_option('smartdevice', 'use_fixed_port', self.use_fixed_port.isChecked()) self.device_manager.set_option('smartdevice', 'port_number', str(self.fixed_port.text())) message = self.device_manager.start_plugin('smartdevice') if not self.device_manager.is_running('smartdevice'): error_dialog(self, _('Problem starting the wireless device'), _('The wireless device driver had problems starting. It said "%s"')%message, show=True) self.device_manager.set_option('smartdevice', 'use_fixed_port', self.orig_fixed_port) self.device_manager.set_option('smartdevice', 'port_number', self.orig_port_number) else: QDialog.accept(self)