固件升级工具:将下载和升级功能分开
This commit is contained in:
parent
9d99f86cd9
commit
a5e6e8f9ce
Binary file not shown.
|
@ -1,6 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="zh_CN">
|
||||
<context>
|
||||
<name>Dialog_updateProgress</name>
|
||||
<message>
|
||||
<location filename="dialog_updateprogress.ui" line="14"/>
|
||||
<source>Dialog</source>
|
||||
<translation type="unfinished">下载</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="dialog_updateprogress.ui" line="42"/>
|
||||
<source>stop</source>
|
||||
<translation>停止</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Dialog_upgradeFirmware</name>
|
||||
<message>
|
||||
|
@ -19,14 +32,12 @@
|
|||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="dialog_upgradefirmware.cpp" line="22"/>
|
||||
<location filename="dialog_upgradefirmware.cpp" line="52"/>
|
||||
<location filename="dialog_upgradefirmware.cpp" line="17"/>
|
||||
<source>upgrade</source>
|
||||
<translation>更新升级</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="dialog_upgradefirmware.cpp" line="25"/>
|
||||
<location filename="dialog_upgradefirmware.cpp" line="55"/>
|
||||
<location filename="dialog_upgradefirmware.cpp" line="20"/>
|
||||
<source>firmware upgrade in progress, please wait...</source>
|
||||
<translation>设备固件自动升级中,请稍候...</translation>
|
||||
</message>
|
||||
|
@ -34,32 +45,32 @@
|
|||
<context>
|
||||
<name>LoginDialog</name>
|
||||
<message>
|
||||
<location filename="logindialog.ui" line="14"/>
|
||||
<location filename="logindialog.ui" line="26"/>
|
||||
<source>Login</source>
|
||||
<translation>用户登录</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="logindialog.ui" line="42"/>
|
||||
<location filename="logindialog.ui" line="54"/>
|
||||
<source>account</source>
|
||||
<translation>账户:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="logindialog.ui" line="90"/>
|
||||
<location filename="logindialog.ui" line="102"/>
|
||||
<source>password</source>
|
||||
<translation>密码:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="logindialog.ui" line="125"/>
|
||||
<location filename="logindialog.ui" line="137"/>
|
||||
<source>login</source>
|
||||
<translation>登录</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="logindialog.ui" line="132"/>
|
||||
<location filename="logindialog.ui" line="144"/>
|
||||
<source>help</source>
|
||||
<translation>帮助</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="logindialog.ui" line="139"/>
|
||||
<location filename="logindialog.ui" line="151"/>
|
||||
<source>exit</source>
|
||||
<translation>取消</translation>
|
||||
</message>
|
||||
|
@ -82,114 +93,114 @@
|
|||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="14"/>
|
||||
<location filename="mainwindow.ui" line="26"/>
|
||||
<source>MainWindow</source>
|
||||
<translation>扫描仪维护工具</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="25"/>
|
||||
<location filename="mainwindow.ui" line="37"/>
|
||||
<source>update firmware</source>
|
||||
<translation>固件升级</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="37"/>
|
||||
<location filename="mainwindow.ui" line="202"/>
|
||||
<location filename="mainwindow.ui" line="49"/>
|
||||
<location filename="mainwindow.ui" line="214"/>
|
||||
<source>device list</source>
|
||||
<translation>设备列表:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="73"/>
|
||||
<location filename="mainwindow.ui" line="85"/>
|
||||
<source>online upgrade</source>
|
||||
<translation>在线升级:</translation>
|
||||
<translation>在线升级</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="95"/>
|
||||
<location filename="mainwindow.ui" line="107"/>
|
||||
<source>get version list</source>
|
||||
<translation>获取版本列表</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="108"/>
|
||||
<location filename="mainwindow.ui" line="120"/>
|
||||
<source>download and upgrade</source>
|
||||
<translation>下载更新</translation>
|
||||
<translation>下载并升级</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="121"/>
|
||||
<location filename="mainwindow.ui" line="133"/>
|
||||
<source>version list</source>
|
||||
<translation>版本列表:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="135"/>
|
||||
<source>local upgrade</source>
|
||||
<translation>本地升级:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="147"/>
|
||||
<source>local upgrade</source>
|
||||
<translation>本地升级</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="159"/>
|
||||
<source>file path</source>
|
||||
<translation>目录:</translation>
|
||||
<translation>升级文件:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="170"/>
|
||||
<location filename="mainwindow.ui" line="182"/>
|
||||
<source>open file path</source>
|
||||
<translation>打开本地目录:</translation>
|
||||
<translation>打开本地文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="183"/>
|
||||
<location filename="mainwindow.ui" line="195"/>
|
||||
<source>upgrade</source>
|
||||
<translation>更新升级</translation>
|
||||
<translation>升级</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="190"/>
|
||||
<location filename="mainwindow.ui" line="202"/>
|
||||
<source>manager tools</source>
|
||||
<translation>管理工具</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="225"/>
|
||||
<location filename="mainwindow.ui" line="237"/>
|
||||
<source>roll count:</source>
|
||||
<translation>滚轴计数:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="238"/>
|
||||
<location filename="mainwindow.ui" line="251"/>
|
||||
<location filename="mainwindow.ui" line="250"/>
|
||||
<location filename="mainwindow.ui" line="263"/>
|
||||
<source>0</source>
|
||||
<translation>0</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="264"/>
|
||||
<location filename="mainwindow.ui" line="276"/>
|
||||
<source>scan count:</source>
|
||||
<translation>历史扫描张数:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="277"/>
|
||||
<location filename="mainwindow.ui" line="289"/>
|
||||
<source>clear roll count</source>
|
||||
<translation>清除滚轴计数</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="283"/>
|
||||
<location filename="mainwindow.ui" line="295"/>
|
||||
<source>password change</source>
|
||||
<translation>修改账户密码</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="295"/>
|
||||
<location filename="mainwindow.ui" line="307"/>
|
||||
<source>old password</source>
|
||||
<translation>旧密码:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="308"/>
|
||||
<location filename="mainwindow.ui" line="320"/>
|
||||
<source>new password</source>
|
||||
<translation>新密码:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="341"/>
|
||||
<location filename="mainwindow.ui" line="353"/>
|
||||
<source>modify password</source>
|
||||
<translation>确认修改</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="364"/>
|
||||
<location filename="mainwindow.ui" line="376"/>
|
||||
<source>confirm new password</source>
|
||||
<translation>确认新密码:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.ui" line="388"/>
|
||||
<location filename="mainwindow.ui" line="400"/>
|
||||
<source>exit</source>
|
||||
<translation>关闭</translation>
|
||||
</message>
|
||||
|
@ -202,112 +213,151 @@
|
|||
<translation type="vanished">安装中,请稍候...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="208"/>
|
||||
<source>open device: %1, firmware version: %2</source>
|
||||
<translation>打开设备:%1,固件版本号为:%2</translation>
|
||||
<translation type="vanished">打开设备:%1,固件版本号为:%2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="210"/>
|
||||
<location filename="mainwindow.cpp" line="211"/>
|
||||
<location filename="mainwindow.cpp" line="257"/>
|
||||
<location filename="mainwindow.cpp" line="269"/>
|
||||
<location filename="mainwindow.cpp" line="270"/>
|
||||
<source>do not support</source>
|
||||
<translation>设备不支持</translation>
|
||||
<translation>不支持</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="219"/>
|
||||
<location filename="mainwindow.cpp" line="282"/>
|
||||
<source>open device error: %1</source>
|
||||
<translation>打开设备错误:%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="224"/>
|
||||
<location filename="mainwindow.cpp" line="287"/>
|
||||
<source>no device opened</source>
|
||||
<translation>无设备打开</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="255"/>
|
||||
<location filename="mainwindow.cpp" line="351"/>
|
||||
<location filename="mainwindow.cpp" line="367"/>
|
||||
<location filename="mainwindow.cpp" line="375"/>
|
||||
<location filename="mainwindow.cpp" line="383"/>
|
||||
<location filename="mainwindow.cpp" line="391"/>
|
||||
<location filename="mainwindow.cpp" line="397"/>
|
||||
<location filename="mainwindow.cpp" line="311"/>
|
||||
<location filename="mainwindow.cpp" line="357"/>
|
||||
<location filename="mainwindow.cpp" line="368"/>
|
||||
<location filename="mainwindow.cpp" line="386"/>
|
||||
<location filename="mainwindow.cpp" line="437"/>
|
||||
<location filename="mainwindow.cpp" line="493"/>
|
||||
<location filename="mainwindow.cpp" line="509"/>
|
||||
<location filename="mainwindow.cpp" line="517"/>
|
||||
<location filename="mainwindow.cpp" line="525"/>
|
||||
<location filename="mainwindow.cpp" line="533"/>
|
||||
<location filename="mainwindow.cpp" line="543"/>
|
||||
<source>tips</source>
|
||||
<translation>提示:</translation>
|
||||
<translation>提示</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="255"/>
|
||||
<location filename="mainwindow.cpp" line="311"/>
|
||||
<source>no version available</source>
|
||||
<translation>未获取到可升级版本</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="256"/>
|
||||
<location filename="mainwindow.cpp" line="352"/>
|
||||
<location filename="mainwindow.cpp" line="368"/>
|
||||
<location filename="mainwindow.cpp" line="376"/>
|
||||
<location filename="mainwindow.cpp" line="384"/>
|
||||
<location filename="mainwindow.cpp" line="392"/>
|
||||
<location filename="mainwindow.cpp" line="398"/>
|
||||
<location filename="mainwindow.cpp" line="312"/>
|
||||
<location filename="mainwindow.cpp" line="358"/>
|
||||
<location filename="mainwindow.cpp" line="369"/>
|
||||
<location filename="mainwindow.cpp" line="387"/>
|
||||
<location filename="mainwindow.cpp" line="438"/>
|
||||
<location filename="mainwindow.cpp" line="494"/>
|
||||
<location filename="mainwindow.cpp" line="510"/>
|
||||
<location filename="mainwindow.cpp" line="518"/>
|
||||
<location filename="mainwindow.cpp" line="526"/>
|
||||
<location filename="mainwindow.cpp" line="534"/>
|
||||
<location filename="mainwindow.cpp" line="544"/>
|
||||
<source>yes</source>
|
||||
<translation>确定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="287"/>
|
||||
<location filename="mainwindow.cpp" line="343"/>
|
||||
<source>Open File</source>
|
||||
<translation>打开目录</translation>
|
||||
<translation>打开文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="287"/>
|
||||
<source>Zip Files(*.zip *.zip)</source>
|
||||
<translation>压缩文件(* .zip)</translation>
|
||||
<translation type="vanished">压缩文件(* .zip)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="304"/>
|
||||
<location filename="mainwindow.cpp" line="326"/>
|
||||
<location filename="mainwindow.cpp" line="428"/>
|
||||
<location filename="mainwindow.cpp" line="449"/>
|
||||
<location filename="mainwindow.cpp" line="468"/>
|
||||
<source>device: %1 upgrade firmware success</source>
|
||||
<translation>设备:%1 固件升级成功</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="308"/>
|
||||
<source>device: %1 upgrade firmware failed, download file fail</source>
|
||||
<translation>设备:%1 固件升级失败,文件下载失败</translation>
|
||||
<translation type="vanished">设备:%1 固件升级失败,文件下载失败</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="312"/>
|
||||
<location filename="mainwindow.cpp" line="330"/>
|
||||
<location filename="mainwindow.cpp" line="256"/>
|
||||
<source>device: %1, firmware version: %2, upgrade: %3</source>
|
||||
<translation>设备: %1, 固件版本: %2, 升级: %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="257"/>
|
||||
<source>support</source>
|
||||
<translation>支持</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="343"/>
|
||||
<source>ZIP Files(*.zip *.zip)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="357"/>
|
||||
<location filename="mainwindow.cpp" line="386"/>
|
||||
<source>the selected firmware is not newer than the current version</source>
|
||||
<translation>选择的固件不比当前版本更新</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="368"/>
|
||||
<source>firmware file mismatch</source>
|
||||
<translation>固件不匹配</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="432"/>
|
||||
<location filename="mainwindow.cpp" line="453"/>
|
||||
<location filename="mainwindow.cpp" line="472"/>
|
||||
<source>device: %1 upgrade firmware failed, io error</source>
|
||||
<translation>设备:%1 固件升级失败,IO错误</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="347"/>
|
||||
<location filename="mainwindow.cpp" line="437"/>
|
||||
<source>download firmware fail</source>
|
||||
<translation>下载固件失败</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="489"/>
|
||||
<source>Roller scanned count has been set to 0.</source>
|
||||
<translation>滚轴计数已清零。</translation>
|
||||
<translation>滚轴计数已清零</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="349"/>
|
||||
<location filename="mainwindow.cpp" line="491"/>
|
||||
<source>Roller scanned count reset failed.</source>
|
||||
<translation>清除滚轴计数失败。</translation>
|
||||
<translation>清除滚轴计数失败</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="367"/>
|
||||
<location filename="mainwindow.cpp" line="509"/>
|
||||
<source>old password is wrong</source>
|
||||
<translation>旧密码错误</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="375"/>
|
||||
<location filename="mainwindow.cpp" line="517"/>
|
||||
<source>new password can not be empty</source>
|
||||
<translation>新密码不能为空</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="383"/>
|
||||
<location filename="mainwindow.cpp" line="525"/>
|
||||
<source>new password is inconsistent</source>
|
||||
<translation>新密码不一致</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="391"/>
|
||||
<location filename="mainwindow.cpp" line="533"/>
|
||||
<source>modify password fail</source>
|
||||
<translation>密码修改失败</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="mainwindow.cpp" line="397"/>
|
||||
<location filename="mainwindow.cpp" line="543"/>
|
||||
<source>modify password success</source>
|
||||
<translation>密码修改成功</translation>
|
||||
</message>
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
#include "dialog_updateprogress.h"
|
||||
#include "ui_dialog_updateprogress.h"
|
||||
#include "base/HGInfo.h"
|
||||
#include <QMessageBox>
|
||||
#include <QFile>
|
||||
#include <QDir>
|
||||
#include <QCryptographicHash>
|
||||
|
||||
Dialog_updateProgress::Dialog_updateProgress(HGVersionMgr versionMgr, const QString &url,
|
||||
const QString &savePath, QWidget *parent) :
|
||||
QDialog(parent)
|
||||
, m_versionMgr(versionMgr)
|
||||
, m_url(url)
|
||||
, m_savePath(savePath)
|
||||
, ui(new Ui::Dialog_updateProgress)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->progressBar->setValue(0);
|
||||
|
||||
connect(this, SIGNAL(updateProgress(int)), this, SLOT(on_updateProgress(int)), Qt::QueuedConnection);
|
||||
connect(this, SIGNAL(finish()), this, SLOT(on_finish()), Qt::QueuedConnection);
|
||||
|
||||
m_stopThread = false;
|
||||
HGBase_OpenThread(ThreadFunc, this, &m_thread);
|
||||
}
|
||||
|
||||
Dialog_updateProgress::~Dialog_updateProgress()
|
||||
{
|
||||
if (nullptr != m_thread)
|
||||
{
|
||||
HGBase_CloseThread(m_thread);
|
||||
m_thread = nullptr;
|
||||
}
|
||||
|
||||
delete ui;
|
||||
}
|
||||
|
||||
HGInt HGAPI Dialog_updateProgress::HttpDownloadThreadFunc(HGULonglong totalSize, HGULonglong nowSize, HGPointer param)
|
||||
{
|
||||
Dialog_updateProgress *p = (Dialog_updateProgress *)param;
|
||||
if (p->m_stopThread)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (totalSize != 0)
|
||||
{
|
||||
emit p->updateProgress(((double)nowSize / totalSize) * 100);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void HGAPI Dialog_updateProgress::ThreadFunc(HGThread thread, HGPointer param)
|
||||
{
|
||||
(void)thread;
|
||||
Dialog_updateProgress *p = (Dialog_updateProgress *)param;
|
||||
|
||||
HGResult ret = HGVersion_HttpDownload(p->m_versionMgr, p->m_url.toStdString().c_str(), p->m_savePath.toStdString().c_str(), HttpDownloadThreadFunc, p);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
QFile::remove(p->m_savePath.toStdString().c_str());
|
||||
|
||||
HGBase_WriteInfo(HGBASE_INFOTYPE_ERROR, "UpgradeHttpDownload:%u", ret);
|
||||
}
|
||||
|
||||
emit p->finish();
|
||||
}
|
||||
|
||||
void Dialog_updateProgress::on_updateProgress(int value)
|
||||
{
|
||||
ui->progressBar->setValue(value);
|
||||
}
|
||||
|
||||
void Dialog_updateProgress::on_finish()
|
||||
{
|
||||
accept();
|
||||
}
|
||||
|
||||
void Dialog_updateProgress::on_pushButton_clicked()
|
||||
{
|
||||
close();
|
||||
}
|
||||
|
||||
void Dialog_updateProgress::closeEvent(QCloseEvent* e)
|
||||
{
|
||||
m_stopThread = true;
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
#ifndef DIALOG_UPDATEPROGRESS_H
|
||||
#define DIALOG_UPDATEPROGRESS_H
|
||||
|
||||
#include <QDialog>
|
||||
#include "base/HGThread.h"
|
||||
#include "version/HGVersion.h"
|
||||
#include "mainwindow.h"
|
||||
|
||||
namespace Ui {
|
||||
class Dialog_updateProgress;
|
||||
}
|
||||
|
||||
class Dialog_updateProgress : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Dialog_updateProgress(HGVersionMgr versionMgr, const QString &url,
|
||||
const QString &savePath, QWidget *parent = nullptr);
|
||||
~Dialog_updateProgress();
|
||||
private:
|
||||
static HGInt HGAPI HttpDownloadThreadFunc(HGULonglong totalSize, HGULonglong nowSize, HGPointer param);
|
||||
static void HGAPI ThreadFunc(HGThread thread, HGPointer param);
|
||||
|
||||
signals:
|
||||
void updateProgress(int value);
|
||||
void finish();
|
||||
private slots:
|
||||
void on_updateProgress(int value);
|
||||
void on_finish();
|
||||
|
||||
void on_pushButton_clicked();
|
||||
protected:
|
||||
virtual void closeEvent(QCloseEvent* e);
|
||||
|
||||
private:
|
||||
Ui::Dialog_updateProgress *ui;
|
||||
|
||||
HGVersionMgr m_versionMgr;
|
||||
QString m_url;
|
||||
QString m_savePath;
|
||||
bool m_stopThread;
|
||||
HGThread m_thread;
|
||||
};
|
||||
|
||||
#endif // DIALOG_UPDATEPROGRESS_H
|
|
@ -0,0 +1,65 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Dialog_updateProgress</class>
|
||||
<widget class="QDialog" name="Dialog_updateProgress">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>500</width>
|
||||
<height>101</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QProgressBar" name="progressBar">
|
||||
<property name="value">
|
||||
<number>24</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="text">
|
||||
<string>stop</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -5,46 +5,11 @@
|
|||
#include <QCryptographicHash>
|
||||
#include "base/HGBase.h"
|
||||
|
||||
Dialog_upgradeFirmware::Dialog_upgradeFirmware(HGVersionMgr versionMgr, SANE_Handle handle, const std::string &url, const std::string &version,
|
||||
const std::string& md5, QWidget *parent) :
|
||||
QDialog(parent)
|
||||
, m_versionMgr(versionMgr)
|
||||
, m_handle(handle)
|
||||
, m_url(url)
|
||||
, m_version(version)
|
||||
, m_md5(md5)
|
||||
, m_filePath("")
|
||||
, m_result(-1)
|
||||
, ui(new Ui::Dialog_upgradeFirmware)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
setWindowTitle(tr("upgrade"));
|
||||
setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
|
||||
|
||||
ui->label_text->setText(tr("firmware upgrade in progress, please wait..."));
|
||||
|
||||
QMovie *movie = new QMovie(":images/image_rsc/logo/waiting.gif");
|
||||
ui->label_gif->setMovie(movie);
|
||||
movie->setCacheMode(QMovie::CacheAll);
|
||||
movie->setScaledSize(QSize(ui->label_gif->width(), ui->label_gif->height()));
|
||||
movie->start();
|
||||
ui->label_gif->show();
|
||||
|
||||
connect(this, SIGNAL(finish()), this, SLOT(on_finish()), Qt::QueuedConnection);
|
||||
|
||||
HGBase_OpenThread(ThreadFunc, this, &m_thread);
|
||||
}
|
||||
|
||||
Dialog_upgradeFirmware::Dialog_upgradeFirmware(SANE_Handle handle, const std::string &filePath, QWidget *parent)
|
||||
: QDialog(parent)
|
||||
, m_versionMgr(nullptr)
|
||||
, m_handle(handle)
|
||||
, m_url("")
|
||||
, m_version("")
|
||||
, m_md5("")
|
||||
, m_filePath(filePath)
|
||||
, m_result(-1)
|
||||
, m_result(1)
|
||||
, ui(new Ui::Dialog_upgradeFirmware)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
@ -82,75 +47,9 @@ void HGAPI Dialog_upgradeFirmware::ThreadFunc(HGThread thread, HGPointer param)
|
|||
(void)thread;
|
||||
Dialog_upgradeFirmware *p = (Dialog_upgradeFirmware *)param;
|
||||
|
||||
if (nullptr != p->m_versionMgr)
|
||||
if (SANE_STATUS_GOOD == sane_io_control(p->m_handle, IO_CTRL_CODE_SET_FIRMWARE_UPGRADE, (void*)p->m_filePath.c_str(), nullptr))
|
||||
{
|
||||
HGChar suffix[64];
|
||||
HGBase_GetFileSuffix(p->m_url.c_str(), suffix, 64);
|
||||
|
||||
HGChar savePath[512];
|
||||
HGBase_GetConfigPath(savePath, 512);
|
||||
HGBase_CreateDir(savePath);
|
||||
HGChar fileName[128];
|
||||
sprintf(fileName, "%s.%s", p->m_version.c_str(), suffix);
|
||||
strcat(savePath, fileName);
|
||||
|
||||
QFile saveFile(savePath);
|
||||
saveFile.open(QFile::ReadOnly);
|
||||
QByteArray fileMsg = saveFile.readAll();
|
||||
saveFile.close();
|
||||
QString md5_2 = QCryptographicHash::hash(fileMsg, QCryptographicHash::Md5).toHex();
|
||||
|
||||
QFile f(savePath);
|
||||
if (!f.exists() || QString(p->m_md5.c_str()) != md5_2)
|
||||
{
|
||||
HGResult ret = HGVersion_HttpDownload(p->m_versionMgr, p->m_url.c_str(), savePath, nullptr, nullptr);
|
||||
if (HGBASE_ERR_OK == ret)
|
||||
{
|
||||
QFile saveFile(savePath);
|
||||
saveFile.open(QFile::ReadOnly);
|
||||
QByteArray fileMsg = saveFile.readAll();
|
||||
saveFile.close();
|
||||
QString md5_2 = QCryptographicHash::hash(fileMsg, QCryptographicHash::Md5).toHex();
|
||||
|
||||
if (QString(p->m_md5.c_str()) == md5_2)
|
||||
{
|
||||
if (SANE_STATUS_GOOD == sane_io_control(p->m_handle, IO_CTRL_CODE_SET_FIRMWARE_UPGRADE, (void*)savePath, nullptr))
|
||||
{
|
||||
p->m_result = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
p->m_result = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
p->m_result = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SANE_STATUS_GOOD == sane_io_control(p->m_handle, IO_CTRL_CODE_SET_FIRMWARE_UPGRADE, (void*)savePath, nullptr))
|
||||
{
|
||||
p->m_result = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
p->m_result = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SANE_STATUS_GOOD == sane_io_control(p->m_handle, IO_CTRL_CODE_SET_FIRMWARE_UPGRADE, (void*)p->m_filePath.c_str(), nullptr))
|
||||
{
|
||||
p->m_result = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
p->m_result = 2;
|
||||
}
|
||||
p->m_result = 0;
|
||||
}
|
||||
|
||||
emit p->finish();
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include <QDialog>
|
||||
#include "base/HGThread.h"
|
||||
#include "version/HGVersion.h"
|
||||
#include "sane/sane_ex.h"
|
||||
|
||||
namespace Ui {
|
||||
|
@ -15,9 +14,7 @@ class Dialog_upgradeFirmware : public QDialog
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Dialog_upgradeFirmware(HGVersionMgr versionMgr, SANE_Handle handle, const std::string &url, const std::string &version,
|
||||
const std::string& md5, QWidget *parent = nullptr);
|
||||
Dialog_upgradeFirmware(SANE_Handle handle, const std::string &filePath, QWidget *parent = nullptr);
|
||||
explicit Dialog_upgradeFirmware(SANE_Handle handle, const std::string &filePath, QWidget *parent = nullptr);
|
||||
~Dialog_upgradeFirmware();
|
||||
|
||||
private:
|
||||
|
@ -33,13 +30,9 @@ private slots:
|
|||
void on_finish();
|
||||
|
||||
private:
|
||||
HGVersionMgr m_versionMgr;
|
||||
SANE_Handle m_handle;
|
||||
std::string m_url;
|
||||
std::string m_version;
|
||||
std::string m_md5;
|
||||
std::string m_filePath;
|
||||
int m_result; // 0-成功 1-下载失败 2-升级失败
|
||||
int m_result; // 0-成功 1-升级失败
|
||||
|
||||
HGThread m_thread;
|
||||
|
||||
|
|
|
@ -10,6 +10,18 @@
|
|||
<height>328</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>498</width>
|
||||
<height>328</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>498</width>
|
||||
<height>328</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Login</string>
|
||||
</property>
|
||||
|
|
|
@ -4,7 +4,10 @@
|
|||
#include <QMovie>
|
||||
#include <QMessageBox>
|
||||
#include <QFileDialog>
|
||||
#include <QFileDialog>
|
||||
#include <QCryptographicHash>
|
||||
#include "dialog_upgradefirmware.h"
|
||||
#include "dialog_updateprogress.h"
|
||||
#include "base/HGBase.h"
|
||||
|
||||
#define PASSWORD_KEY 4
|
||||
|
@ -90,6 +93,43 @@ QString MainWindow::passwordDecrypt(const QString& transcode)
|
|||
return password;
|
||||
}
|
||||
|
||||
QString MainWindow::GetDevType(const QString& fwVersion)
|
||||
{
|
||||
QString devType;
|
||||
if (fwVersion.length() == 10)
|
||||
{
|
||||
QString dev = fwVersion.left(2);
|
||||
if (fwVersion.mid(2, 2) == "40" || fwVersion.mid(2, 2) == "50"
|
||||
|| fwVersion.mid(2, 2) == "60" || fwVersion.mid(2, 2) == "70")
|
||||
{
|
||||
// 3288
|
||||
QString ver = fwVersion.mid(2, 2);
|
||||
QString date = fwVersion.mid(4, 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 3399
|
||||
QString ver = fwVersion.mid(2, 3);
|
||||
QString date = fwVersion.mid(5, 5);
|
||||
if ((dev == "G1" || dev == "G2") && ver == "393")
|
||||
{
|
||||
if (date >= "A1220" && date <= "A1225")
|
||||
devType = dev + ver + "/" + "A1220-A1225";
|
||||
else if (date >= "B0326" && date <= "B0331")
|
||||
devType = dev + ver + "/" + "B0326-B0331";
|
||||
else if (date >= "B0429")
|
||||
devType = dev + ver + "/" + "B0429-";
|
||||
}
|
||||
else if (dev == "G4" && ver == "393")
|
||||
{
|
||||
devType = dev + ver + "/";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return devType;
|
||||
}
|
||||
|
||||
void MainWindow::on_sane_dev_arrive(QString devName, bool opened)
|
||||
{
|
||||
int idx = -1;
|
||||
|
@ -106,9 +146,15 @@ void MainWindow::on_sane_dev_arrive(QString devName, bool opened)
|
|||
|
||||
if (-1 == idx)
|
||||
{
|
||||
assert(!opened);
|
||||
ui->comboDevList->addItem(devName);
|
||||
ui->comboDevList2->addItem(devName);
|
||||
}
|
||||
else if (opened)
|
||||
{
|
||||
ui->comboDevList->setCurrentIndex(-1);
|
||||
ui->comboDevList->setCurrentIndex(idx);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_sane_dev_remove(QString devName)
|
||||
|
@ -205,7 +251,10 @@ void MainWindow::on_comboDevList_currentIndexChanged(int index)
|
|||
}
|
||||
|
||||
m_curFwVersion = QString::fromStdString(versionNum.c_str());
|
||||
ui->labelDevInfo->setText(QString(tr("open device: %1, firmware version: %2")).arg(name).arg(m_curFwVersion));
|
||||
QString devType = GetDevType(m_curFwVersion);
|
||||
|
||||
ui->labelDevInfo->setText(QString(tr("device: %1, firmware version: %2, upgrade: %3")).arg(name)
|
||||
.arg(m_curFwVersion).arg(!devType.isEmpty() ? tr("support") : tr("do not support")));
|
||||
|
||||
SANE_Int historyScanNum = 0;
|
||||
unsigned int historyScanNumLen = sizeof(SANE_Int);
|
||||
|
@ -221,8 +270,11 @@ void MainWindow::on_comboDevList_currentIndexChanged(int index)
|
|||
ui->labelScanCount->setText(tr("do not support"));
|
||||
}
|
||||
|
||||
ui->btnGetVersionList->setEnabled(true);
|
||||
ui->btnOpenFilePath->setEnabled(true);
|
||||
if (!devType.isEmpty())
|
||||
{
|
||||
ui->btnGetVersionList->setEnabled(true);
|
||||
ui->btnOpenFilePath->setEnabled(true);
|
||||
}
|
||||
ui->btnClearRollCount->setEnabled(true);
|
||||
}
|
||||
else
|
||||
|
@ -243,17 +295,10 @@ void MainWindow::on_btnGetVersionList_clicked()
|
|||
m_versionCount = 0;
|
||||
ui->comboVersionList->clear();
|
||||
|
||||
std::string devType;
|
||||
if (m_curFwVersion.left(2) == "G1")
|
||||
devType = "G100";
|
||||
else if (m_curFwVersion.left(2) == "G2")
|
||||
devType = "G200";
|
||||
else if (m_curFwVersion.left(2) == "G3")
|
||||
devType = "G300";
|
||||
else if (m_curFwVersion.left(2) == "G4")
|
||||
devType = "G400";
|
||||
QString devType = GetDevType(m_curFwVersion);
|
||||
assert(!devType.isEmpty());
|
||||
|
||||
HGVersion_GetDriverVersionList(m_versionMgr, devType.c_str(), &m_versionInfo, &m_versionCount);
|
||||
HGVersion_GetDriverVersionList(m_versionMgr, devType.toStdString().c_str(), &m_versionInfo, &m_versionCount);
|
||||
if (0 != m_versionCount)
|
||||
{
|
||||
for (HGUInt i = 0; i < m_versionCount; ++i)
|
||||
|
@ -295,10 +340,35 @@ void MainWindow::on_editFilePath_textChanged(const QString &arg1)
|
|||
|
||||
void MainWindow::on_btnOpenFilePath_clicked()
|
||||
{
|
||||
QString filePath = QFileDialog::getOpenFileName(this, tr("Open File"), ".", tr("Zip Files(*.zip *.zip)"));
|
||||
QString filePath = QFileDialog::getOpenFileName(this, tr("Open File"), ".", tr("ZIP Files(*.zip *.zip)"));
|
||||
if (!filePath.isEmpty())
|
||||
{
|
||||
ui->editFilePath->setText(filePath);
|
||||
QString devType = GetDevType(m_curFwVersion);
|
||||
assert(!devType.isEmpty());
|
||||
|
||||
HGChar fileName[256] = {0};
|
||||
HGBase_GetFileName(filePath.toStdString().c_str(), fileName, 256);
|
||||
HGChar fileVersion[256] = {0};
|
||||
HGBase_GetFilePrefix(fileName, fileVersion, 256);
|
||||
if (devType == GetDevType(fileVersion))
|
||||
{
|
||||
if (m_curFwVersion >= fileVersion)
|
||||
{
|
||||
QMessageBox msg(QMessageBox::Information, tr("tips"), tr("the selected firmware is not newer than the current version"), QMessageBox::Yes, this);
|
||||
msg.setButtonText(QMessageBox::Yes, tr("yes"));
|
||||
msg.exec();
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->editFilePath->setText(filePath);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox msg(QMessageBox::Information, tr("tips"), tr("firmware file mismatch"), QMessageBox::Yes, this);
|
||||
msg.setButtonText(QMessageBox::Yes, tr("yes"));
|
||||
msg.exec();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -307,20 +377,81 @@ void MainWindow::on_btnDownloadUpgrade_clicked()
|
|||
int idx = ui->comboVersionList->currentIndex();
|
||||
if (-1 != idx)
|
||||
{
|
||||
Dialog_upgradeFirmware dlg(m_versionMgr, m_curDevHandle, m_versionInfo[idx].url, m_versionInfo[idx].version,
|
||||
m_versionInfo[idx].md5, this);
|
||||
dlg.exec();
|
||||
if (0 == dlg.getUpgradeStatus())
|
||||
QString url = m_versionInfo[idx].url;
|
||||
QString md5 = m_versionInfo[idx].md5;
|
||||
QString versionNum = m_versionInfo[idx].version;
|
||||
|
||||
if (m_curFwVersion >= versionNum)
|
||||
{
|
||||
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware success")).arg(m_curDevName));
|
||||
QMessageBox msg(QMessageBox::Information, tr("tips"), tr("the selected firmware is not newer than the current version"), QMessageBox::Yes, this);
|
||||
msg.setButtonText(QMessageBox::Yes, tr("yes"));
|
||||
msg.exec();
|
||||
return;
|
||||
}
|
||||
else if (1 == dlg.getUpgradeStatus())
|
||||
|
||||
assert(!url.isEmpty() && !md5.isEmpty() && !versionNum.isEmpty());
|
||||
|
||||
HGChar suffix[64];
|
||||
HGBase_GetFileSuffix(url.toStdString().c_str(), suffix, 64);
|
||||
|
||||
HGChar savePath[512];
|
||||
HGBase_GetConfigPath(savePath, 512);
|
||||
HGBase_CreateDir(savePath);
|
||||
HGChar fileName[128];
|
||||
sprintf(fileName, "%s.%s", versionNum.toStdString().c_str(), suffix);
|
||||
strcat(savePath, fileName);
|
||||
|
||||
QFile saveFile(savePath);
|
||||
saveFile.open(QFile::ReadOnly);
|
||||
QByteArray fileMsg = saveFile.readAll();
|
||||
saveFile.close();
|
||||
QString md5_2 = QCryptographicHash::hash(fileMsg , QCryptographicHash::Md5).toHex();
|
||||
|
||||
QFile f(savePath);
|
||||
if(!f.exists() || md5 != md5_2)
|
||||
{
|
||||
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware failed, download file fail")).arg(m_curDevName));
|
||||
Dialog_updateProgress dlg(m_versionMgr, url, savePath, this);
|
||||
if (dlg.exec())
|
||||
{
|
||||
QFile saveFile(savePath);
|
||||
saveFile.open(QFile::ReadOnly);
|
||||
QByteArray fileMsg = saveFile.readAll();
|
||||
saveFile.close();
|
||||
QString md5_2 = QCryptographicHash::hash(fileMsg , QCryptographicHash::Md5).toHex();
|
||||
|
||||
if (md5 == md5_2)
|
||||
{
|
||||
Dialog_upgradeFirmware dlg(m_curDevHandle, savePath, this);
|
||||
dlg.exec();
|
||||
if (0 == dlg.getUpgradeStatus())
|
||||
{
|
||||
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware success")).arg(m_curDevName));
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware failed, io error")).arg(m_curDevName));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox msg(QMessageBox::Information, tr("tips"), tr("download firmware fail"), QMessageBox::Yes, this);
|
||||
msg.setButtonText(QMessageBox::Yes, tr("yes"));
|
||||
msg.exec();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (2 == dlg.getUpgradeStatus())
|
||||
else
|
||||
{
|
||||
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware failed, io error")).arg(m_curDevName));
|
||||
Dialog_upgradeFirmware dlg(m_curDevHandle, savePath, this);
|
||||
dlg.exec();
|
||||
if (0 == dlg.getUpgradeStatus())
|
||||
{
|
||||
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware success")).arg(m_curDevName));
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware failed, io error")).arg(m_curDevName));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -336,7 +467,7 @@ void MainWindow::on_btnUpgrade_clicked()
|
|||
{
|
||||
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware success")).arg(m_curDevName));
|
||||
}
|
||||
else if (2 == dlg.getUpgradeStatus())
|
||||
else
|
||||
{
|
||||
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware failed, io error")).arg(m_curDevName));
|
||||
}
|
||||
|
@ -405,6 +536,10 @@ void MainWindow::on_btnModifyPassword_clicked()
|
|||
return;
|
||||
}
|
||||
|
||||
ui->editOldPassword->setText("");
|
||||
ui->editNewPassword->setText("");
|
||||
ui->editNewPassword_2->setText("");
|
||||
|
||||
QMessageBox msg(QMessageBox::Information, tr("tips"), tr("modify password success"), QMessageBox::Yes, this);
|
||||
msg.setButtonText(QMessageBox::Yes, tr("yes"));
|
||||
msg.exec();
|
||||
|
|
|
@ -19,6 +19,7 @@ public:
|
|||
|
||||
static QString passwordEncrypt(const QString& password);
|
||||
static QString passwordDecrypt(const QString& transcode);
|
||||
static QString GetDevType(const QString& fwVersion);
|
||||
|
||||
signals:
|
||||
void sane_dev_arrive(QString devName, bool opened);
|
||||
|
|
|
@ -144,17 +144,20 @@ INCLUDEPATH += $$PWD/../../../modules/
|
|||
INCLUDEPATH += $$PWD/../../../../sdk/include/
|
||||
|
||||
SOURCES += \
|
||||
../../../app/fwupgrade/dialog_updateprogress.cpp \
|
||||
../../../app/fwupgrade/dialog_upgradefirmware.cpp \
|
||||
../../../app/fwupgrade/logindialog.cpp \
|
||||
../../../app/fwupgrade/main.cpp \
|
||||
../../../app/fwupgrade/mainwindow.cpp \
|
||||
|
||||
HEADERS += \
|
||||
../../../app/fwupgrade/dialog_updateprogress.h \
|
||||
../../../app/fwupgrade/dialog_upgradefirmware.h \
|
||||
../../../app/fwupgrade/logindialog.h \
|
||||
../../../app/fwupgrade/mainwindow.h \
|
||||
|
||||
FORMS += \
|
||||
../../../app/fwupgrade/dialog_updateprogress.ui \
|
||||
../../../app/fwupgrade/dialog_upgradefirmware.ui \
|
||||
../../../app/fwupgrade/logindialog.ui \
|
||||
../../../app/fwupgrade/mainwindow.ui
|
||||
|
|
Loading…
Reference in New Issue