__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# -*- 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
#
# Local
from base.g import *
from base import device, utils
from prnt import cups
from base.codes import *
from .ui_utils import *
from installer import pluginhandler
from base.sixext import to_unicode
# Qt
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
# Ui
from .plugindialog_base import Ui_Dialog
#signal
import signal
PAGE_SOURCE = 0
# PAGE_LICENSE = 1 # part of plug-in itself, this is a placeholder
PAGE_MAX = 1
class PluginDialog(QDialog, Ui_Dialog):
def __init__(self, parent, install_mode=PLUGIN_NONE, plugin_reason=PLUGIN_REASON_NONE):
QDialog.__init__(self, parent)
self.install_mode = install_mode
self.plugin_reason = plugin_reason
self.plugin_path = ""
self.result = False
self.pluginObj = pluginhandler.PluginHandle()
self.setupUi(self)
self.user_settings = UserSettings()
self.user_settings.load()
self.user_settings.debug()
self.initUi()
QTimer.singleShot(0, self.showSourcePage)
def isPluginInstalled(self):
return self.pluginObj.getStatus()
def initUi(self):
# connect signals/slots
# self.CancelButton.clicked.connect(self.CancelButton_clicked)
self.CancelButton.clicked.connect(self.CancelButton_clicked)
# self.NextButton.clicked.connect(self.NextButton_clicked)
self.NextButton.clicked.connect(self.NextButton_clicked)
# Application icon
self.setWindowIcon(QIcon(load_pixmap('hp_logo', '128x128')))
self.PLUGIN_REASON_TEXT = {
PLUGIN_REASON_NONE: None,
PLUGIN_REASON_PRINTING_SUPPORT: self.__tr("This plugin will enable printing support."),
PLUGIN_REASON_FASTER_PRINTING: self.__tr("This plugin will enhance print speed."),
PLUGIN_REASON_BETTER_PRINTING_PQ: self.__tr("This plugin will enhance print quality."),
PLUGIN_REASON_PRINTING_FEATURES: self.__tr("This plugin will add printing features."),
PLUGIN_REASON_RESERVED_10: None,
PLUGIN_REASON_RESERVED_20: None,
PLUGIN_REASON_SCANNING_SUPPORT: self.__tr("This plugin will enable scanning support."),
PLUGIN_REASON_FASTER_SCANNING: self.__tr("This plugin will enhance scanning speed."),
PLUGIN_REASON_BETTER_SCANNING_IQ: self.__tr("This plugin will enhance scanning image quality."),
PLUGIN_REASON_RESERVED_200: None,
PLUGIN_REASON_RESERVED_400: None,
PLUGIN_REASON_FAXING_SUPPORT: self.__tr("This plugin will enable faxing support."),
PLUGIN_REASON_FAX_FEATURES: self.__tr("This plugin will enhnace faxing features."),
PLUGIN_REASON_RESERVED_20000: None,
PLUGIN_REASON_RESERVED_40000: None,
}
#
# SOURCE PAGE
#
def showSourcePage(self):
reason_text = self.plugin_reason_text()
if self.install_mode == PLUGIN_REQUIRED:
self.SkipRadioButton.setEnabled(False)
msg = "An additional driver plug-in is required to operate this printer. You may download the plug-in directly from an HP authorized server (recommended), or, if you already have a copy of the file, you can specify a path to the file (advanced)."
if reason_text is not None:
msg += "<br><br>%s"%reason_text
self.TitleLabel.setText(self.__tr(msg))
elif self.install_mode == PLUGIN_OPTIONAL:
msg = "An optional driver plug-in is available to enhance the operation of this printer. You may download the plug-in directly from an HP authorized server (recommended), skip this installation (not recommended), or, if you already have a copy of the file, you can specify a path to the file (advanced)."
if reason_text is not None:
msg += "<br><br>%s"%reason_text
self.TitleLabel.setText(self.__tr(msg))
self.DownloadRadioButton.toggled[bool].connect(self.DownloadRadioButton_toggled)
self.CopyRadioButton.toggled[bool].connect(self.CopyRadioButton_toggled)
self.SkipRadioButton.toggled[bool].connect(self.SkipRadioButton_toggled)
self.PathLineEdit.textChanged["const QString &"].connect(self.PathLineEdit_textChanged)
self.BrowseToolButton.clicked.connect(self.BrowseToolButton_clicked)
signal.signal(signal.SIGINT, signal.SIG_DFL)
self.BrowseToolButton.setIcon(QIcon(load_pixmap('folder_open', '16x16')))
self.displayPage(PAGE_SOURCE)
def DownloadRadioButton_toggled(self, b):
if b:
self.PathLineEdit.setEnabled(False)
self.BrowseToolButton.setEnabled(False)
self.NextButton.setEnabled(True)
try:
self.PathLineEdit.setStyleSheet("")
except AttributeError:
pass
self.plugin_path = None
def CopyRadioButton_toggled(self, b):
if b:
self.PathLineEdit.setEnabled(True)
self.BrowseToolButton.setEnabled(True)
self.plugin_path = to_unicode(self.PathLineEdit.text())
self.setPathIndicators()
def SkipRadioButton_toggled(self, b):
if b:
self.PathLineEdit.setEnabled(False)
self.BrowseToolButton.setEnabled(False)
self.NextButton.setEnabled(True)
try:
self.PathLineEdit.setStyleSheet("")
except AttributeError:
pass
self.plugin_path = None
def PathLineEdit_textChanged(self, t):
self.plugin_path = to_unicode(t)
self.setPathIndicators()
def setPathIndicators(self):
ok = True
if not self.plugin_path or (self.plugin_path and os.path.isdir(self.plugin_path)):
self.PathLineEdit.setToolTip(self.__tr("You must specify a path to the '%s' file."%self.pluginObj.getFileName() ))
ok = False
elif os.path.basename(self.plugin_path) != self.pluginObj.getFileName():
self.PathLineEdit.setToolTip(self.__tr("The plugin filename must be '%s'."%self.pluginObj.getFileName()))
ok = False
if not ok:
try:
self.PathLineEdit.setStyleSheet("background-color: yellow; ")
except AttributeError:
pass
self.NextButton.setEnabled(False)
else:
try:
self.PathLineEdit.setStyleSheet("")
except AttributeError:
pass
self.NextButton.setEnabled(True)
self.PathLineEdit.setToolTip("")
def BrowseToolButton_clicked(self):
t = to_unicode(self.PathLineEdit.text())
path =""
if not os.path.exists(t):
path = QFileDialog.getOpenFileName(self, self.__tr("Select Plug-in File"),
#user_conf.workingDirectory(),
self.user_settings.working_dir,
self.__tr("Plugin Files (*.run)"))
if path:
self.plugin_path = path[0]
self.PathLineEdit.setText(self.plugin_path)
#user_conf.setWorkingDirectory(self.plugin_path)
self.user_settings.working_dir = self.plugin_path
self.user_settings.save()
self.setPathIndicators()
#
# Misc
#
def displayPage(self, page):
self.updateStepText(page)
self.StackedWidget.setCurrentIndex(page)
def CancelButton_clicked(self):
self.close()
def NextButton_clicked(self):
if self.SkipRadioButton.isChecked():
log.debug("Skipping plug-in installation.")
self.close()
return
beginWaitCursor()
try:
if self.plugin_path: # User specified Path
if not self.plugin_path.startswith('http://'):
self.plugin_path = 'file://' + self.plugin_path
else:
log.info("Checking for network connection...")
ok = utils.check_network_connection()
if not ok:
log.error("Network connection not detected.")
endWaitCursor()
FailureUI(self, self.__tr("Network connection not detected."))
self.close()
return
log.info("Downloading plug-in from: %s" % self.plugin_path)
status, download_plugin_file, error_str = self.pluginObj.download(self.plugin_path,self.plugin_download_callback)
if status in (ERROR_UNABLE_TO_RECV_KEYS, ERROR_DIGITAL_SIGN_NOT_FOUND):
endWaitCursor()
if QMessageBox.question(self, " ",
self.__tr("<b>%s</b><p>Without this, it is not possible to authenticate and validate the plug-in prior to installation.</p>Do you still want to install the plug-in?" %error_str),
QMessageBox.Yes | QMessageBox.No, QMessageBox.No) != QMessageBox.Yes:
self.pluginObj.deleteInstallationFiles(download_plugin_file)
self.close()
return
elif status != ERROR_SUCCESS:
self.pluginObj.deleteInstallationFiles(download_plugin_file)
endWaitCursor()
FailureUI(self, error_str)
self.close()
return
if not self.pluginObj.run_plugin(download_plugin_file, GUI_MODE):
self.pluginObj.deleteInstallationFiles(download_plugin_file)
endWaitCursor()
FailureUI(self, self.__tr("Plug-in install failed."))
self.close()
return
cups_devices = device.getSupportedCUPSDevices(['hp'])
for dev in cups_devices:
mq = device.queryModelByURI(dev)
if mq.get('fw-download', False):
# Download firmware if needed
log.info(log.bold("\nDownloading firmware to device %s..." % dev))
try:
d = None
try:
d = device.Device(dev)
except Error:
log.error("Error opening device.")
endWaitCursor()
FailureUI(self, self.__tr("<b>Firmware download to device failed.</b><p>%s</p>"%dev))
continue
if d.downloadFirmware():
log.info("Firmware download successful.\n")
else:
endWaitCursor()
FailureUI(self, self.__tr("<b>Firmware download to device failed.</b><p>%s</p>"%dev))
finally:
if d is not None:
d.close()
finally:
endWaitCursor()
self.pluginObj.deleteInstallationFiles(download_plugin_file)
SuccessUI(self, self.__tr("<b>Plug-in installation successful</b>"))
self.result = True
self.close()
def plugin_download_callback(self, c, s, t):
pass
def plugin_install_callback(self, s):
print(s)
def updateStepText(self, p):
self.StepText.setText(self.__tr("Step %s of %s"%( p+1, PAGE_MAX+1)))
def plugin_reason_text(self):
try:
return self.PLUGIN_REASON_TEXT[self.plugin_reason]
except KeyError:
return None
def __tr(self,s,c = None):
return qApp.translate("PluginDialog",s,c)
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| __init__.py | File | 786 B | 0644 |
|
| aboutdialog.py | File | 1.71 KB | 0644 |
|
| aboutdialog_base.py | File | 8.27 KB | 0644 |
|
| aligndialog.py | File | 31.94 KB | 0644 |
|
| aligndialog_base.py | File | 24.45 KB | 0644 |
|
| cleandialog.py | File | 12.28 KB | 0644 |
|
| cleandialog_base.py | File | 11.46 KB | 0644 |
|
| colorcaldialog.py | File | 14.36 KB | 0644 |
|
| colorcaldialog_base.py | File | 23.27 KB | 0644 |
|
| devicesetupdialog.py | File | 8.57 KB | 0644 |
|
| devicesetupdialog_base.py | File | 4.58 KB | 0644 |
|
| deviceuricombobox.py | File | 5.4 KB | 0644 |
|
| devmgr5.py | File | 84.28 KB | 0644 |
|
| devmgr5_base.py | File | 23.31 KB | 0644 |
|
| devmgr_ext.py | File | 2.51 KB | 0644 |
|
| fabgrouptable.py | File | 2.26 KB | 0644 |
|
| fabnametable.py | File | 1.2 KB | 0644 |
|
| fabwindow.py | File | 23.63 KB | 0644 |
|
| fabwindow_base.py | File | 8.7 KB | 0644 |
|
| faxsetupdialog.py | File | 14.9 KB | 0644 |
|
| faxsetupdialog_base.py | File | 5.65 KB | 0644 |
|
| filetable.py | File | 15.45 KB | 0644 |
|
| firmwaredialog.py | File | 3 KB | 0644 |
|
| firmwaredialog_base.py | File | 3.59 KB | 0644 |
|
| infodialog.py | File | 10.22 KB | 0644 |
|
| infodialog_base.py | File | 5.76 KB | 0644 |
|
| linefeedcaldialog.py | File | 3.52 KB | 0644 |
|
| linefeedcaldialog_base.py | File | 2.7 KB | 0644 |
|
| loadpapergroupbox.py | File | 3.3 KB | 0644 |
|
| makecopiesdialog.py | File | 2.55 KB | 0644 |
|
| makecopiesdialog_base.py | File | 2.42 KB | 0644 |
|
| mimetypesdialog.py | File | 1.76 KB | 0644 |
|
| mimetypesdialog_base.py | File | 4.17 KB | 0644 |
|
| nodevicesdialog.py | File | 2.26 KB | 0644 |
|
| nodevicesdialog_base.py | File | 6.05 KB | 0644 |
|
| plugindiagnose.py | File | 3.03 KB | 0644 |
|
| plugindiagnose_base.py | File | 3.02 KB | 0644 |
|
| plugindialog.py | File | 12.2 KB | 0644 |
|
| plugindialog_base.py | File | 6.7 KB | 0644 |
|
| pluginlicensedialog.py | File | 1.34 KB | 0644 |
|
| pluginlicensedialog_base.py | File | 4.81 KB | 0644 |
|
| pqdiagdialog.py | File | 3.34 KB | 0644 |
|
| pqdiagdialog_base.py | File | 2.67 KB | 0644 |
|
| printdialog.py | File | 6 KB | 0644 |
|
| printdialog_base.py | File | 5.44 KB | 0644 |
|
| printernamecombobox.py | File | 5.46 KB | 0644 |
|
| printsettings_base.py | File | 210 B | 0644 |
|
| printsettingsdialog.py | File | 3.46 KB | 0644 |
|
| printsettingsdialog_base.py | File | 2.71 KB | 0644 |
|
| printsettingstoolbox.py | File | 79.17 KB | 0644 |
|
| printtestpagedialog.py | File | 4.78 KB | 0644 |
|
| printtestpagedialog_base.py | File | 4.22 KB | 0644 |
|
| queuesconf.py | File | 10.61 KB | 0644 |
|
| readonlyradiobutton.py | File | 1.63 KB | 0644 |
|
| scandialog.py | File | 89.66 KB | 0644 |
|
| sendfaxdialog.py | File | 37.13 KB | 0644 |
|
| sendfaxdialog_base.py | File | 23.96 KB | 0644 |
|
| settingsdialog.py | File | 4.15 KB | 0644 |
|
| settingsdialog_base.py | File | 16.93 KB | 0644 |
|
| setupdialog.py | File | 57.44 KB | 0644 |
|
| setupdialog_base.py | File | 23.38 KB | 0644 |
|
| setupdialog_base5.py | File | 23.17 KB | 0644 |
|
| systemtray.py | File | 32.35 KB | 0644 |
|
| systrayframe.py | File | 8.2 KB | 0644 |
|
| systrayframe_base.py | File | 5.96 KB | 0644 |
|
| ui_utils.py | File | 20.76 KB | 0644 |
|
| upgradedialog.py | File | 4.59 KB | 0644 |
|
| upgradedialog_base.py | File | 3.38 KB | 0644 |
|
| wifisetupdialog.py | File | 35.63 KB | 0644 |
|
| wifisetupdialog_base.py | File | 39.7 KB | 0644 |
|