%PDF- %PDF-
| Direktori : /usr/share/hplip/ui5/ |
| Current File : //usr/share/hplip/ui5/wifisetupdialog.py |
# -*- coding: utf-8 -*-
#
# (c) Copyright 2001-2015 HP Development Company, L.P.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Authors: Don Welch
#
# StdLib
import operator
import signal
# Local
from base.g import *
from base import device, models, wifi, LedmWifi, CdmWifi
from base.codes import *
from base.sixext import to_unicode
from .ui_utils import *
from base.sixext import PY3, to_bytes_utf8, to_unicode, to_string_latin, to_string_utf8, xStringIO
# Qt
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# Ui
from .wifisetupdialog_base import Ui_Dialog
PAGE_INTRO = 0 # Ask user to plugin temp USB connection
PAGE_DEVICES = 1 # Select a probed USB device
PAGE_NETWORK = 2 # Select a discovered SSID
PAGE_CONFIGURE_WIFI = 3 # Configure USB device on network
PAGE_EXIT = 4 # Tell user if successful, unplug USB onnection
BUTTON_NEXT = 0
BUTTON_FINISH = 1
BUTTON_CONNECT = 3
SUCCESS_NOT_CONNECTED = 0
SUCCESS_AUTO_IP = 1
SUCCESS_CONNECTED = 2
ASSOCIATE_DELAY = 30
REFRESH_INTERVAL = 20
class PasswordDialog(QDialog):
def __init__(self, prompt, parent=None, name=None, modal=0, fl=0):
QDialog.__init__(self, parent)
# Application icon
self.setWindowIcon(QIcon(load_pixmap('hp_logo', '128x128')))
self.prompt = prompt
Layout= QGridLayout(self)
Layout.setContentsMargins(10,10,10,10)
Layout.setSpacing(6)
self.PromptTextLabel = QLabel(self)
Layout.addWidget(self.PromptTextLabel,0,0,1,3)
self.UsernameTextLabel = QLabel(self)
Layout.addWidget(self.UsernameTextLabel,1,0)
self.UsernameLineEdit = QLineEdit(self)
self.UsernameLineEdit.setEchoMode(QLineEdit.Normal)
Layout.addWidget(self.UsernameLineEdit,1,1,1,2)
self.PasswordTextLabel = QLabel(self)
Layout.addWidget(self.PasswordTextLabel,2,0)
self.PasswordLineEdit = QLineEdit(self)
self.PasswordLineEdit.setEchoMode(QLineEdit.Password)
Layout.addWidget(self.PasswordLineEdit,2,1,1,2)
self.OkPushButton = QPushButton(self)
Layout.addWidget(self.OkPushButton,3,2)
self.languageChange()
self.resize(QSize(420,163).expandedTo(self.minimumSizeHint()))
self.OkPushButton.clicked.connect(self.accept)
self.PasswordLineEdit.returnPressed.connect(self.accept)
def setDefaultUsername(self, defUser, allowUsernameEdit = True):
self.UsernameLineEdit.setText(defUser)
if not allowUsernameEdit:
self.UsernameLineEdit.setReadOnly(True)
self.UsernameLineEdit.setStyleSheet("QLineEdit {background-color: lightgray}")
def getUsername(self):
return to_unicode(self.UsernameLineEdit.text())
def getPassword(self):
return to_unicode(self.PasswordLineEdit.text())
def languageChange(self):
self.setWindowTitle(self.__tr("HP Device Manager - Enter Username/Password"))
self.PromptTextLabel.setText(self.__tr(self.prompt))
self.UsernameTextLabel.setText(self.__tr("Username:"))
self.PasswordTextLabel.setText(self.__tr("Password:"))
self.OkPushButton.setText(self.__tr("OK"))
def __tr(self,s,c = None):
return qApp.translate("SetupDialog",s,c)
def showPasswordUI(prompt, userName=None, allowUsernameEdit=True):
try:
dlg = PasswordDialog(prompt, None)
if userName != None:
dlg.setDefaultUsername(userName, allowUsernameEdit)
if dlg.exec_() == QDialog.Accepted:
return (1,dlg.getUsername(), dlg.getPassword())
else:
return (0,"", "")
finally:
pass
return (0,"", "")
class DeviceTableWidgetItem(QTableWidgetItem):
def __init__(self, text, device_uri):
QTableWidgetItem.__init__(self, text, QTableWidgetItem.UserType)
self.device_uri = device_uri
class WifiSetupDialog(QDialog, Ui_Dialog):
itemSelectionChanged = pyqtSignal()
def __init__(self, parent, device_uri=None, standalone=True):
QDialog.__init__(self, parent)
self.setupUi(self)
self.device_uri = device_uri
self.devices = {}
self.networks = {}
self.ssid = ''
self.directed = False
self.show_extended = False
self.bus = 'usb'
self.search = ''
self.max_page = PAGE_EXIT
self.location_cache = {} # { 'bssid' : <location>, ... }
self.dev = None
self.success = SUCCESS_NOT_CONNECTED
self.ip = '0.0.0.0'
self.hn = ''
self.standalone = standalone
self.initUi()
self.adapterName = 'Wifi0'
self.wifiObj = wifi
self.wifiConfVal = WIFI_CONFIG_LEDM
#if self.device_uri is None:
# QTimer.singleShot(0, self.showIntroPage)
#else:
# QTimer.singleShot(0, self.showNetworkPage)
QTimer.singleShot(0, self.showIntroPage)
#
# INIT
#
def initUi(self):
self.setWindowIcon(QIcon(load_pixmap('hp_logo', '128x128')))
# connect signals/slots
# self.CancelButton.clicked.connect(self.CancelButton_clicked)
self.CancelButton.clicked.connect(self.CancelButton_clicked)
self.BackButton.clicked.connect(self.BackButton_clicked)
self.NextButton.clicked.connect(self.NextButton_clicked)
signal.signal(signal.SIGINT, signal.SIG_DFL)
self.initIntroPage()
self.initDevicesPage()
self.initNetworkPage()
self.initConfigWifiPage()
self.initExitPage()
#
# INTRO PAGE
#
def initIntroPage(self):
self.Picture.setPixmap(load_pixmap("usb_connection", "other"))
self.InfoIcon.setPixmap(load_pixmap("info", "16x16"))
if self.standalone:
self.MainTitleLabel.setText(self.__tr("This utility allows you configure your wireless capable printer using a temporary USB connection. You will be prompted to disconnect the USB cable once wireless network setup is complete. <p><i>Note: This configuration utility does not setup (install) your printer on this computer. Use hp-setup to setup your printer after it has been configured on the network by this utility.</i></p> <p><i>Note: Only select wireless capable printers are supported by this utility.</i></p>"))
else:
self.MainTitleLabel.setText(self.__tr("This utility allows you configure your wireless capable printer using a temporary USB connection. You will be prompted to disconnect the USB cable once wireless network setup is complete. <p><i>Note: Printer setup (installation) will continue after your printer is configured on the network.</i></p> <p><i>Note: Only select wireless capable printers are supported by this utility.</i></p>"))
def showIntroPage(self):
self.BackButton.setEnabled(False)
self.NextButton.setEnabled(True)
self.displayPage(PAGE_INTRO)
#
# DEVICES PAGE
#
def initDevicesPage(self):
self.RefreshButton.clicked.connect(self.RefreshButton_clicked)
def showDevicesPage(self):
self.BackButton.setEnabled(True)
self.setNextButton(BUTTON_NEXT)
beginWaitCursor()
try:
if not self.devices:
log.info("Searching on USB bus...")
filter_dict = {'wifi-config' : (operator.gt, WIFI_CONFIG_NONE)}
try:
from base import smart_install
except ImportError:
log.error("Failed to Import smart_install.py from base")
else:
endWaitCursor()
smart_install.disable(GUI_MODE, 'qt4')
beginWaitCursor()
self.devices = device.probeDevices([self.bus], 0, 0, filter_dict, self.search)
finally:
endWaitCursor()
self.clearDevicesTable()
if self.devices:
self.NextButton.setEnabled(True)
self.DevicesFoundIcon.setPixmap(load_pixmap('info', '16x16'))
if len(self.devices) == 1:
self.DevicesFoundLabel.setText(self.__tr("<b>1 wireless capable device found.</b> Click <i>Next</i> to continue."))
else:
self.DevicesFoundLabel.setText(self.__tr("<b>%s wireless capable devices found.</b> Select the device to install and click <i>Next</i> to continue." % len(self.devices)))
self.loadDevicesTable()
else:
self.NextButton.setEnabled(False)
self.DevicesFoundIcon.setPixmap(load_pixmap('error', '16x16'))
log.error("No devices found on bus: %s" % self.bus)
self.DevicesFoundLabel.setText(self.__tr("<b>No wireless capable devices found.</b><br>Plug in your printer with a USB cable and click <i>Refresh</i> to search again."))
self.displayPage(PAGE_DEVICES)
def loadDevicesTable(self):
self.DevicesTableWidget.setSortingEnabled(False)
self.DevicesTableWidget.setRowCount(len(self.devices))
headers = [self.__tr('Model'), self.__tr('Device URI')]
device_uri_col = 1
self.DevicesTableWidget.setColumnCount(len(headers))
self.DevicesTableWidget.setHorizontalHeaderLabels(headers)
flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled
for row, d in enumerate(self.devices):
back_end, is_hp, bus, model, serial, dev_file, host, zc, port = device.parseDeviceURI(d)
model_ui = models.normalizeModelUIName(model)
i = DeviceTableWidgetItem(str(model_ui), d)
i.setFlags(flags)
self.DevicesTableWidget.setItem(row, 0, i)
i = QTableWidgetItem(str(d))
i.setFlags(flags)
self.DevicesTableWidget.setItem(row, device_uri_col, i)
self.DevicesTableWidget.resizeColumnsToContents()
self.DevicesTableWidget.setSortingEnabled(True)
self.DevicesTableWidget.sortItems(0)
self.DevicesTableWidget.selectRow(0)
def clearDevicesTable(self):
self.DevicesTableWidget.clear()
self.DevicesTableWidget.setRowCount(0)
self.DevicesTableWidget.setColumnCount(0)
def RefreshButton_clicked(self):
self.clearDevicesTable()
self.devices = []
QTimer.singleShot(0, self.showDevicesPage)
#
# NETWORK
#
def initNetworkPage(self):
self.NetworksTableWidget.setIconSize(QSize(34, 20))
self.ShowExtendedCheckBox.setChecked(False)
self.ShowExtendedCheckBox.clicked[bool].connect(self.ShowExtendedCheckBox_clicked)
self.SearchPushButton.clicked.connect(self.SearchPushButton_clicked)
self.UndirectedRadioButton.clicked[bool].connect(self.UndirectedRadioButton_clicked)
self.DirectedRadioButton.clicked[bool].connect(self.DirectedRadioButton_clicked)
self.NetworksTableWidget.itemSelectionChanged.connect(self.NetworksTableWidget_itemSelectionChanged)
def showNetworkPage(self):
if self.dev is None:
try:
self.dev = device.Device(self.device_uri)
except Error as e:
FailureUI(self, self.__tr("<b>Error opening device:</b><p>%s</p><p>(%s)</p>") %(self.device_uri, str(e.msg)))
if self.dev is not None:
self.dev.close()
self.close()
return
self.networks.clear()
self.num_networks = 0
#Get authentication token
if self.wifiObj == CdmWifi and self.wifiConfVal == WIFI_CONFIG_CDM_AUTH:
if 1:#self.wifiObj.checkAuthrequired(self.dev):
prompt = "Enter printer's username and password"
while True:
rtnvalue,uname, password = showPasswordUI(prompt)
if rtnvalue == 0:
return
beginWaitCursor()
ret = self.wifiObj.getCDMToken(self.dev, uname, password)
if ret == True:
break
prompt = "Invalid Username/Password\n.Please reenter printer's username and password"
endWaitCursor()
try:
adaptor_list = self.wifiObj.getWifiAdaptorID(self.dev)
except Error as e:
self.showIOError(e)
return
if len(adaptor_list) == 0:
FailureUI(self, self.__tr("<b>Unable to locate wireless hardware on device.</b>"))
if self.dev is not None:
self.dev.close()
self.close()
log.debug("Turning on wireless radio...")
try:
self.adaptor_id, self.adapterName, state, presence = self.wifiObj.setAdaptorPower(self.dev, adaptor_list )
except Error as e:
self.showIOError(e)
return
if self.adaptor_id == -1:
FailureUI(self, self.__tr("<b>Unable to turn on wireless adaptor.</b>"))
if self.dev is not None:
self.dev.close()
log.debug("Adaptor ID: %s" % self.adaptor_id)
log.debug("Adaptor name: %s" % self.adapterName)
log.debug("Adaptor state: %s" % state)
log.debug("Adaptor presence: %s" % presence)
self.performScan()
self.setNextButton(BUTTON_NEXT)
self.displayPage(PAGE_NETWORK)
def performScan(self):
beginWaitCursor()
try:
self.ssid = to_unicode(self.SSIDLineEdit.text())
if self.directed and self.ssid:
try:
self.networks = self.wifiObj.performScan(self.dev, self.adapterName, self.ssid)
except Error as e:
self.showIOError(e)
return
else:
try:
self.networks = self.wifiObj.performScan(self.dev, self.adapterName)
except Error as e:
self.showIOError(e)
return
finally:
self.dev.close()
endWaitCursor()
self.num_networks = self.networks['numberofscanentries']
self.clearNetworksTable()
if self.num_networks:
self.NextButton.setEnabled(True)
self.NetworksFoundIcon.setPixmap(load_pixmap('info', '16x16'))
if self.num_networks == 1:
self.NetworksFoundLabel.setText(self.__tr("<b>1 wireless network found. </b> If the wireless network you would like to connect to is not listed, try entering a wireless network name and/or press <i>Search</i> to search again."))
else:
self.NetworksFoundLabel.setText(self.__tr("<b>%d wireless networks found.</b> If the wireless network you would like to connect to is not listed, try entering a wireless network name and/or press <i>Search</i> to search again." %self.num_networks))
self.loadNetworksTable()
else:
self.NextButton.setEnabled(False)
self.NetworksFoundIcon.setPixmap(load_pixmap('error', '16x16'))
log.warning("No wireless networks found.")
self.NetworksFoundLabel.setText(self.__tr("<b>No wireless networks found.</b><br>Enter a wireless network name and/or press <i>Search</i> to search again."))
def ShowExtendedCheckBox_clicked(self, b):
self.show_extended = b
self.loadNetworksTable()
def SearchPushButton_clicked(self):
self.performScan()
self.loadNetworksTable()
def UndirectedRadioButton_clicked(self, b):
self.directed = not b
self.SSIDLineEdit.setEnabled(not b)
def DirectedRadioButton_clicked(self, b):
self.directed = b
self.SSIDLineEdit.setEnabled(b)
def loadNetworksTable(self):
self.n, self.network = 0, to_unicode('')
if self.num_networks:
beginWaitCursor()
try:
if self.show_extended:
for n in range(self.num_networks):
bssid = self.networks['bssid-%d' % n]
ss = self.networks['signalstrength-%d' % n]
try:
self.location_cache[bssid]
except KeyError:
location = wifi.getLocation(bssid, ss)
lat = self.networks['latitude-%d' % n] = location.get('latitude', 'Unknown')
lng = self.networks['longitude-%d' % n] = location.get('longitude', 'Unknown')
address = self.networks['address-%d' % n] = location.get('address', 'Unknown')
self.location_cache[bssid] = (lat, lng, address)
else:
self.networks['latitude-%d' % n], self.networks['longitude-%d' % n], self.networks['address-%d' % n] = \
self.location_cache[bssid]
self.NetworksTableWidget.setSortingEnabled(False)
self.NetworksTableWidget.setRowCount(self.num_networks)
headers = [self.__tr('Network Name (SSID)'), self.__tr('Signal Strength'),
self.__tr("Security"), self.__tr("Mode")]
if self.show_extended:
headers.extend([self.__tr('Channel'),
self.__tr("Address (BSSID)"), self.__tr("Location"),
self.__tr("Lat/Long")])
self.NetworksTableWidget.setColumnCount(len(headers))
self.NetworksTableWidget.setHorizontalHeaderLabels(headers)
enabled_flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled
for n in range(self.num_networks):
name = self.networks['ssid-%d' % n]
if name == '(unknown)':
flags = None
else:
flags = enabled_flags
ss = self.networks['signalstrength-%d' % n]
sec = self.networks['encryptiontype-%d' % n]
mode = self.networks['communicationmode-%d' % n]
log.debug("%d: Name=%s, strength=%s, security=%s, mode=%s" % #, channel=%d bssid=%s" %
(n, name, ss, sec, mode))
if self.show_extended:
chn = self.networks['channel-%d' % n]
dbm = self.networks['dbm-%d' % n]
bssid = self.networks['bssid-%d' % n]
address = self.networks['address-%d' % n]
lat = self.networks['latitude-%d' % n]
lng = self.networks['longitude-%d' % n]
log.debug("%d: channel=%d bssid=%s dbm=%s lat=%s long=%s address=%s" %
(n, chn, bssid, dbm, lat, lng, address))
i = QTableWidgetItem(str(name))
if flags is not None: i.setFlags(flags)
i.setData(Qt.UserRole, n)
self.NetworksTableWidget.setItem(n, 0, i)
pixmap = load_pixmap('signal%d' % ss, 'other')
if self.show_extended:
i = QTableWidgetItem(QIcon(pixmap), self.__tr("%s/5 (%s dBm)" %(ss, dbm)))
else:
i = QTableWidgetItem(QIcon(pixmap), self.__tr("%s/5" % ss))
if flags is not None: i.setFlags(flags)
self.NetworksTableWidget.setItem(n, 1, i)
i = QTableWidgetItem(str(sec))
if flags is not None: i.setFlags(flags)
self.NetworksTableWidget.setItem(n, 2, i)
i = QTableWidgetItem(str(mode))
if flags is not None: i.setFlags(flags)
self.NetworksTableWidget.setItem(n, 3, i)
if self.show_extended:
i = QTableWidgetItem(str(str(chn)))
if flags is not None: i.setFlags(flags)
self.NetworksTableWidget.setItem(n, 4, i)
i = QTableWidgetItem(str(bssid))
if flags is not None: i.setFlags(flags)
self.NetworksTableWidget.setItem(n, 5, i)
i = QTableWidgetItem(str(address))
if flags is not None: i.setFlags(flags)
self.NetworksTableWidget.setItem(n, 6, i)
i = QTableWidgetItem(str("%s/%s" % (lat, lng)))
if flags is not None: i.setFlags(flags)
self.NetworksTableWidget.setItem(n, 7, i)
self.NetworksTableWidget.resizeColumnsToContents()
self.NetworksTableWidget.setSortingEnabled(True)
self.NetworksTableWidget.sortItems(1, Qt.DescendingOrder)
self.NetworksTableWidget.selectRow(0)
# itemSelectionChanged = pyqtSignal()
# self.NetworksTableWidget.emit(SIGNAL("itemSelectionChanged()"))
self.NetworksTableWidget.itemSelectionChanged.emit()
finally:
endWaitCursor()
self.NextButton.setEnabled(True)
else:
self.NextButton.setEnabled(False)
def NetworksTableWidget_itemSelectionChanged(self):
row = self.NetworksTableWidget.currentRow()
item = self.NetworksTableWidget.item(row, 0)
n, ok = value_int(item.data(Qt.UserRole))
if ok:
sec = self.networks['encryptiontype-%d' % n]
if sec.lower() == 'none':
self.setNextButton(BUTTON_CONNECT)
else:
self.setNextButton(BUTTON_NEXT)
def clearNetworksTable(self):
self.DevicesTableWidget.clear()
self.DevicesTableWidget.setRowCount(0)
self.DevicesTableWidget.setColumnCount(0)
def RefreshButton2_clicked(self):
self.clearNetworksTable()
self.networks = {}
QTimer.singleShot(0, self.showNetworkPage)
#
# CONFIGURE WIFI
#
def initConfigWifiPage(self):
self.ShowKeyCheckBox.toggled[bool].connect(self.ShowKeyCheckBox_toggled)
def showConfigWifiPage(self):
self.setNextButton(BUTTON_CONNECT)
self.SSIDLabel.setText(self.network)
font = QFont()
font.setPointSize(12)
self.SSIDLabel.setFont(font)
self.KeyLineEdit.setText(str())
self.ShowKeyCheckBox.setChecked(False)
self.StrengthIcon.setPixmap(load_pixmap('signal%d' % self.ss, 'other'))
self.ConfigureIcon.setPixmap(load_pixmap('info', '16x16'))
self.KeysIcon.setPixmap(load_pixmap('keys', '32x32'))
if 'wpa' in self.security.lower():
self.WPARadioButton.setChecked(True)
elif 'wep' in self.security.lower():
self.WEPRadioButton.setChecked(True)
else:
self.WEPRadioButton.setChecked(True)
self.KeyLineEdit.setFocus()
self.KeyLineEdit.setEchoMode(QLineEdit.Password)
self.displayPage(PAGE_CONFIGURE_WIFI)
def ShowKeyCheckBox_toggled(self, b):
if b:
self.KeyLineEdit.setEchoMode(QLineEdit.Normal)
else:
self.KeyLineEdit.setEchoMode(QLineEdit.Password)
#
# EXIT/CONNECT PAGE
#
def initExitPage(self):
self.PageSpinBox.valueChanged[int].connect(self.PageSpinBox_valueChanged)
self.RefreshTimer = QTimer(self)
# self.RefreshTimer.timeout.connect(self.RefreshTimer_timeout)
self.RefreshTimer.timeout.connect(self.RefreshTimer_timeout)
self.pages = []
self.page_index = 0
self.PageSpinBox.setMinimum(1)
def showExitPage(self):
self.setNextButton(BUTTON_FINISH)
self.NextButton.setEnabled(False)
self.CancelButton.setEnabled(True)
self.SSIDLabel_2.setText(str(self.network))
self.ip = '0.0.0.0'
self.hn = ''
ss_max, ss_min, ss_val, ss_dbm = 5, 0, 0, -200
vsa_codes = []
self.success = SUCCESS_NOT_CONNECTED
beginWaitCursor()
try:
try:
self.ip,_,addressmode, subnetmask, gateway, pridns, sec_dns= self.wifiObj.getIPConfiguration(self.dev, self.adapterName)
if self.ip == "0.0.0.0":
if not self.wifiObj == CdmWifi:
self.ip, subnetmask, gateway, pridns, sec_dns, addressmode = self.wifiObj.getwifiotherdetails(self.dev,self.adapterName)
vsa_codes = self.wifiObj.getVSACodes(self.dev, self.adapterName)
ss_max, ss_min, ss_val, ss_dbm = self.wifiObj.getSignalStrength(self.dev, self.adapterName,self.network, self.adaptor_id)
self.hn = self.wifiObj.getHostname(self.dev)
except Error as e:
self.showIOError(e)
return
finally:
self.dev.close()
endWaitCursor()
if 'dhcp' or 'default' in addressmode.lower():
self.success = SUCCESS_CONNECTED
elif addressmode.lower() == 'autoip':
self.success = SUCCESS_AUTO_IP
if self.ip == '0.0.0.0':
self.success = SUCCESS_NOT_CONNECTED
self.pages = []
if self.success == SUCCESS_NOT_CONNECTED:
self.pages.append((self.__tr("<b>Your printer has not been connected to the wireless network.</b> A valid connection to a wireless network can take up to 2 minutes. This screen will automatically refresh every %s seconds.<p>If your printer fails to connect within a reasonable time, there may be a problem with your configuration." % REFRESH_INTERVAL), load_pixmap('error', '16x16')))
self.RefreshTimer.start(REFRESH_INTERVAL * 1000)
elif self.success == SUCCESS_AUTO_IP:
# self.pages.append((self.__tr("Your printer has been connected to the wireless network, but it has been assigned an address which may not be usable."), load_pixmap('warning', '16x16')))
self.pages.append((self.__tr("Your printer has been connected to the wireless network and has been assinged a IP. Now run <pre>hp-setup %s</pre> If IP is not accessible, try again for another IP."%self.ip), load_pixmap('warning', '16x16')))
# self.RefreshTimer.start(REFRESH_INTERVAL * 1000)
self.CancelButton.setEnabled(False)
self.BackButton.setEnabled(False)
self.RefreshTimer.stop()
else: # SUCCESS_CONNECTED
self.pages.append((self.__tr("Your printer has been successfully configured on the wireless network. You may now unplug the USB cable. To setup the printer, now run <pre>hp-setup %s</pre>"%self.ip), load_pixmap('info', '16x16')))
self.CancelButton.setEnabled(False)
self.BackButton.setEnabled(False)
self.RefreshTimer.stop()
if addressmode is None:
self.AddressModeLabel.setText(self.__tr("Unknown"))
else:
self.AddressModeLabel.setText(str(addressmode))
if self.hn is None:
self.HostnameLabel.setText(self.__tr("Unknown"))
else:
self.HostnameLabel.setText(str(self.hn))
self.IPAddressLabel.setText(str(self.ip))
self.GatewayLabel.setText(str(gateway))
self.DNSLabel.setText(str(pridns))
self.NextButton.setEnabled(True)
self.SignalStrengthLabel.setText(str("%s/%s (%s dBm)" % (ss_val, ss_max, ss_dbm)))
self.SignalStrengthIcon.setPixmap(load_pixmap('signal%d' % ss_val, 'other'))
for c, s in vsa_codes:
if c :
ss = s.lower()
if ss.startswith("info"):
pixmap = load_pixmap('info', '16x16')
elif ss.startswith("warn"):
pixmap = load_pixmap('warning', '16x16')
elif ss.startswith("crit"):
pixmap = load_pixmap('error', '16x16')
else:
pixmap = load_pixmap('info', '16x16')
self.pages.append((device.queryString("vsa_%s" % str(c).zfill(3)), pixmap))
num_pages = len(self.pages)
self.PageSpinBox.setMaximum(num_pages)
self.PageSpinBox.setEnabled(num_pages>1)
self.PageSpinBox.setValue(1)
self.PageLabel.setEnabled(num_pages>1)
self.PageLabel2.setEnabled(num_pages>1)
self.PageLabel.setText(self.__tr("of %s", str(num_pages)))
self.page_index = 0
self.ExitLabel.setText(self.pages[self.page_index][0])
self.ExitIcon.setPixmap(self.pages[self.page_index][1])
self.displayPage(PAGE_EXIT)
def PageSpinBox_valueChanged(self, i):
self.page_index = i-1
self.ExitLabel.setText(self.pages[self.page_index][0])
self.ExitIcon.setPixmap(self.pages[self.page_index][1])
def RefreshTimer_timeout(self):
self.showExitPage()
#
# ASSOCIATE
#
def associate(self, key=to_unicode('')):
beginWaitCursor()
try:
try:
alg, mode, secretid = self.wifiObj.getCryptoSuite(self.dev, self.adapterName)
except Error as e:
self.showIOError(e)
return
log.debug("Crypto algorithm: %s" % alg)
log.debug("Crypto mode: %s" % mode)
finally:
endWaitCursor()
beginWaitCursor()
try:
try:
if self.wifiObj == CdmWifi:
self.wifiObj.associate(self.dev, self.wpaVersionPreference, self.network, self.authenticationMode, self.security, key)
else:
self.wifiObj.associate(self.dev, self.adapterName, self.network, self.mode, self.security, key)
except Error as e:
self.showIOError(e)
return
finally:
endWaitCursor()
#
# Misc
#
def NextButton_clicked(self):
p = self.StackedWidget.currentIndex()
if p == PAGE_INTRO:
self.showDevicesPage()
elif p == PAGE_DEVICES:
row = self.DevicesTableWidget.currentRow()
if row != -1:
self.device_uri = self.DevicesTableWidget.item(row, 0).device_uri
self.mq = device.queryModelByURI(self.device_uri)
self.getWifiObject(self.mq['wifi-config'])
back_end, is_hp, bus, model, serial, dev_file, host, zc, port = device.parseDeviceURI(self.device_uri)
self.model = models.normalizeModelName(model).lower()
self.showNetworkPage()
elif p == PAGE_NETWORK:
self.security = 'None'
self.mode = 'Infrastructure'
self.ss = 0
row = self.NetworksTableWidget.currentRow()
if row != -1:
i = self.NetworksTableWidget.item(row, 0)
if i is not None:
self.network = to_unicode(i.text())
log.debug("Selected network SSID: %s" % self.network)
self.n, ok = value_int(i.data(Qt.UserRole))
if ok:
self.security = self.networks.get('encryptiontype-{}'.format(self.n))
log.debug("Security: %s" % self.security)
self.mode = self.networks.get('communicationmode-{}'.format(self.n))
log.debug("Mode: %s" % self.mode)
self.ss = self.networks.get('signalstrength-{}'.format(self.n))
log.debug("Signal strength: %s" % self.ss)
self.wpaVersionPreference = self.networks.get('wpaVersionPreference-{}'.format(self.n))
self.authenticationMode = self.networks.get('authenticationMode-{}'.format(self.n))
if self.security.lower() != 'none':
self.showConfigWifiPage()
else:
# Skip config page if no security to setup
self.associate()
self.showAssociateProgressDialog()
self.showExitPage()
elif p == PAGE_CONFIGURE_WIFI:
key = to_unicode(self.KeyLineEdit.text())
self.associate(key)
self.showAssociateProgressDialog()
self.showExitPage()
elif p == PAGE_EXIT:
if self.dev is not None:
self.dev.close()
self.close()
else:
log.error("Invalid page!") # shouldn't happen!
def showAssociateProgressDialog(self):
AssociateProgressDialog = QProgressDialog(self.__tr("Waiting for printer to connect to the wireless network..."), self.__tr("Cancel"), 0, ASSOCIATE_DELAY, self)
AssociateProgressDialog.setWindowTitle(self.__tr("HP Device Manager - Please wait..."))
AssociateProgressDialog.setWindowModality(Qt.WindowModal)
AssociateProgressDialog.setMinimumDuration(0)
AssociateProgressDialog.forceShow()
canceled = False
for x in range(ASSOCIATE_DELAY):
AssociateProgressDialog.setValue(x)
QThread.sleep(1)
qApp.processEvents()
if AssociateProgressDialog.wasCanceled():
canceled = True
break
AssociateProgressDialog.setValue(ASSOCIATE_DELAY)
AssociateProgressDialog.close()
if canceled:
if self.dev is not None:
self.dev.close()
self.close()
def BackButton_clicked(self):
p = self.StackedWidget.currentIndex()
if p == PAGE_DEVICES:
self.devices = {}
self.showIntroPage()
elif p == PAGE_NETWORK:
self.showDevicesPage()
elif p == PAGE_CONFIGURE_WIFI:
self.showNetworkPage()
elif p == PAGE_EXIT:
self.RefreshTimer.stop()
if self.security.lower() != 'none':
self.showConfigWifiPage()
else:
self.showNetworkPage()
else:
log.error("Invalid page!") # shouldn't happen!
def CancelButton_clicked(self):
if self.dev is not None:
self.dev.close()
self.close()
def displayPage(self, page):
self.StackedWidget.setCurrentIndex(page)
self.updateStepText(page)
def setNextButton(self, typ=BUTTON_FINISH):
if typ == BUTTON_NEXT:
self.NextButton.setText(self.__tr("Next >"))
elif typ == BUTTON_FINISH:
self.NextButton.setText(self.__tr("Finish"))
elif typ == BUTTON_CONNECT:
self.NextButton.setText(self.__tr("Connect"))
def updateStepText(self, p):
self.StepText.setText(self.__tr("Step %s of %s" % (p+1, self.max_page+1)))
def showIOError(self, e):
FailureUI(self, self.__tr("<b>An I/O error occurred.</b><p>Please check the USB connection to your printer and try again.</p>(%s)" % str(e.msg)))
if self.dev is not None:
self.dev.close()
self.close()
def __tr(self,s,c = None):
return qApp.translate("WifiSetupDialog",s,c)
# The Wifi object here is not actual object, Dynamically relevant modules are selected based on
# wifi-config value in the models file.
def getWifiObject(self,wifiConfVal):
self.wifiConfVal = wifiConfVal
if wifiConfVal == WIFI_CONFIG_LEDM:
self.wifiObj = LedmWifi
elif wifiConfVal == WIFI_CONFIG_CDM or wifiConfVal == WIFI_CONFIG_CDM_AUTH:
self.wifiObj = CdmWifi
else:
self.wifiObj = wifi