From 434e0c09ff26676c5269acb7b4fc13d47a2b07cb Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Mon, 18 Jul 2022 16:59:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9B=B4=E6=96=B0=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E8=8F=9C=E5=8D=95=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scanner/dialog_updateprogress.cpp | 2 +- app/scanner/dialog_updateprogress.h | 2 +- app/scanner/dialog_upgrade.cpp | 158 ++++++++++++++++++++ app/scanner/dialog_upgrade.h | 41 +++++ app/scanner/dialog_upgrade.ui | 113 ++++++++++++++ app/scanner/mainwindow.cpp | 69 +-------- app/scanner/mainwindow.h | 1 - build-qt/HGSolution/HGScanner/HGScanner.pro | 13 +- 8 files changed, 328 insertions(+), 71 deletions(-) create mode 100644 app/scanner/dialog_upgrade.cpp create mode 100644 app/scanner/dialog_upgrade.h create mode 100644 app/scanner/dialog_upgrade.ui diff --git a/app/scanner/dialog_updateprogress.cpp b/app/scanner/dialog_updateprogress.cpp index e5120832..c807c31d 100644 --- a/app/scanner/dialog_updateprogress.cpp +++ b/app/scanner/dialog_updateprogress.cpp @@ -78,7 +78,7 @@ void Dialog_updateProgress::ThreadFunc(HGThread thread, HGPointer param) #endif emit p->finish(); - emit p->upgradeApp(p->m_savePath); + emit p->upgrade(p->m_savePath); } else { diff --git a/app/scanner/dialog_updateprogress.h b/app/scanner/dialog_updateprogress.h index 8d279083..17b884f3 100644 --- a/app/scanner/dialog_updateprogress.h +++ b/app/scanner/dialog_updateprogress.h @@ -25,7 +25,7 @@ private: signals: void updateProgress(int value); void finish(); - void upgradeApp(QString pkgPath); + void upgrade(QString pkgPath); private slots: void on_updateProgress(int value); void on_finish(); diff --git a/app/scanner/dialog_upgrade.cpp b/app/scanner/dialog_upgrade.cpp new file mode 100644 index 00000000..8723cde8 --- /dev/null +++ b/app/scanner/dialog_upgrade.cpp @@ -0,0 +1,158 @@ +#include "dialog_upgrade.h" +#include "ui_dialog_upgrade.h" +#include "base/HGUtility.h" +#include +#include +#include +#include + +Dialog_upgrade::Dialog_upgrade(class VersionDll *versionDll, QWidget *parent) : + QDialog(parent) + , ui(new Ui::Dialog_upgrade) + , m_versionDll(versionDll) +{ + ui->setupUi(this); + setWindowTitle(tr("upgrade online")); + setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); + this->layout()->setSizeConstraint(QLayout::SetFixedSize); + + ui->listWidget->setVisible(false); + ui->pbtn_upgrade->setVisible(false); + ui->pbtn_install->setVisible(false); + ui->pbtn_cancel->setVisible(false); + ui->label->setVisible(false); + + HGVersionInfo *versionInfo = NULL; + HGUInt versionCount = 0; + m_versionDll->GetVersionList(HGVERSION_APPNAME_SCANNER, &versionInfo, &versionCount); + + for(HGUInt i = 0; i < versionCount; ++i) + { + QListWidgetItem *listwidgetItem = new QListWidgetItem; + listwidgetItem->setText(QString(versionInfo[i].version)); + listwidgetItem->setData(Qt::UserRole, versionInfo[i].url); + listwidgetItem->setData(Qt::UserRole+1, versionInfo[i].md5); + listwidgetItem->setToolTip(tr("upgrade contents: ") + versionInfo[i].desc + tr(" bug description: ") + versionInfo[i].bugInfo); + ui->listWidget->addItem(listwidgetItem); + } + + if(ui->listWidget->count() > 0) + { + QListWidgetItem *item = ui->listWidget->item(0); + item->setSelected(true); + } + + HGChar currVersion[64] = {0}; + m_versionDll->GetCurrVersion(HGVERSION_APPNAME_SCANNER, currVersion, 64); + HGInt result = 0; + std::string newestVersionNum = ui->listWidget->item(0)->text().toStdString().c_str(); + m_versionDll->CompareVersion(currVersion, newestVersionNum.c_str(), &result); + if(result == 0) + { + ui->label_detectResult->setText(tr("The current version is the latest! The current version number is : ") + currVersion); + ui->pbtn_upgrade->setVisible(false); + return; + } + else + { + ui->pbtn_upgrade->setVisible(true); + ui->label_detectResult->setText(tr("Discover the new version : ") + + ui->listWidget->item(0)->text().toStdString().c_str() + + tr(" ,the current version is : ") + currVersion); + } + + connect(ui->listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(on_listWidget_itemDoubleClicked(QListWidgetItem*)), Qt::QueuedConnection); + + m_versionDll->ReleaseVersionList(versionInfo, versionCount); +} + +Dialog_upgrade::~Dialog_upgrade() +{ + delete ui; +} + +void Dialog_upgrade::on_pbtn_install_clicked() +{ + QListWidgetItem *item = ui->listWidget->currentItem(); + on_listWidget_itemDoubleClicked(item); + close(); +} + +void Dialog_upgrade::on_pbtn_cancel_clicked() +{ + close(); +} + +void Dialog_upgrade::on_listWidget_itemDoubleClicked(QListWidgetItem *item) +{ + close(); + + HGChar currVersion[64] = {0}; + m_versionDll->GetCurrVersion(HGVERSION_APPNAME_SCANNER, currVersion, 64); + + std::string selectVersionNum = item->text().toStdString().c_str(); + HGInt result = 0; + m_versionDll->CompareVersion(currVersion, selectVersionNum.c_str(), &result); + if(result == 0) + { + QMessageBox::information(this, "tip", "Already in current version"); + return; + } + else + { + QString url = item->data(Qt::UserRole).toString(); + QString versionNum = item->text(); + QString md5 = item->data(Qt::UserRole+1).toString(); + + HGChar savePath[512]; + HGBase_GetConfigPath(savePath, 512); + HGBase_CreateDir(savePath); + strcat(savePath, (versionNum + QString("%1").arg(".exe")).toLatin1().data()); + + 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) + { + Dialog_updateProgress *dlg = new Dialog_updateProgress(m_versionDll, url, savePath); + dlg->exec(); + connect(dlg, SIGNAL(upgrade(QString)), this, SLOT(on_upgrade(QString)), Qt::QueuedConnection); + } + else + { + on_upgrade(savePath); + } + } +} + +void Dialog_upgrade::on_upgrade(QString pkgPath) +{ + emit upgradeApp(pkgPath); +} + +void Dialog_upgrade::on_pbtn_selectVersion_clicked() +{ + if(ui->listWidget->count() == 0) + { + ui->pbtn_install->setVisible(false); + } + else + { + ui->pbtn_install->setVisible(true); + } + ui->pbtn_selectVersion->setVisible(false); + ui->listWidget->setVisible(true); + ui->pbtn_cancel->setVisible(true); + ui->label->setVisible(true); +} + +void Dialog_upgrade::on_pbtn_upgrade_clicked() +{ + QListWidgetItem *item = ui->listWidget->item(0); + on_listWidget_itemDoubleClicked(item); + close(); +} diff --git a/app/scanner/dialog_upgrade.h b/app/scanner/dialog_upgrade.h new file mode 100644 index 00000000..375353af --- /dev/null +++ b/app/scanner/dialog_upgrade.h @@ -0,0 +1,41 @@ +#ifndef DIALOG_UPGRADE_H +#define DIALOG_UPGRADE_H + +#include +#include "VersionDll.h" +#include "dialog_updateprogress.h" + +namespace Ui { +class Dialog_upgrade; +} + +class Dialog_upgrade : public QDialog +{ + Q_OBJECT + +public: + explicit Dialog_upgrade(class VersionDll *versionDll, QWidget *parent = nullptr); + ~Dialog_upgrade(); + +private slots: + void on_pbtn_install_clicked(); + + void on_pbtn_cancel_clicked(); + + void on_listWidget_itemDoubleClicked(QListWidgetItem *item); + void on_upgrade(QString pkgPath); + + void on_pbtn_selectVersion_clicked(); + + void on_pbtn_upgrade_clicked(); + +signals: + void upgradeApp(QString pkgPath); + +private: + Ui::Dialog_upgrade *ui; + + VersionDll *m_versionDll; +}; + +#endif // DIALOG_UPGRADE_H diff --git a/app/scanner/dialog_upgrade.ui b/app/scanner/dialog_upgrade.ui new file mode 100644 index 00000000..77c7fd56 --- /dev/null +++ b/app/scanner/dialog_upgrade.ui @@ -0,0 +1,113 @@ + + + Dialog_upgrade + + + + 0 + 0 + 431 + 253 + + + + Dialog + + + + + + detect result. versionNum: + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + upgrade the latest version + + + + + + + select version + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Detected installable versions: + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + install + + + + + + + cancel + + + + + + + + + + diff --git a/app/scanner/mainwindow.cpp b/app/scanner/mainwindow.cpp index cd09155f..60cc67d9 100644 --- a/app/scanner/mainwindow.cpp +++ b/app/scanner/mainwindow.cpp @@ -29,6 +29,7 @@ #include "dialog_moveto.h" #include "dialog_imageeditor.h" #include "dialog_updateprogress.h" +#include "dialog_upgrade.h" #include "hg_settingdialog.h" #include "base/HGInfo.h" #include "imgfmt/HGPdf.h" @@ -1092,52 +1093,6 @@ void MainWindow::on_statusInfoDblClick() m_dialogLog->show(); } -void MainWindow::on_upgrade(QListWidgetItem *item) -{ - HGChar currVersion[64] = {0}; - m_versionDll->GetCurrVersion(HGVERSION_APPNAME_SCANNER, currVersion, 64); - - std::string selectVersionNum = item->text().toStdString().c_str(); - - m_listwidget->close(); - HGInt result = 0; - m_versionDll->CompareVersion(currVersion, selectVersionNum.c_str(), &result); - if(result == 0) - { - QMessageBox::information(this, "tip", "Already in current version"); - return; - } - else - { - QString url = item->data(Qt::UserRole).toString(); - QString versionNum = item->text(); - QString md5 = item->data(Qt::UserRole+1).toString(); - - HGChar savePath[512]; - HGBase_GetConfigPath(savePath, 512); - HGBase_CreateDir(savePath); - strcat(savePath, (versionNum + QString("%1").arg(".exe")).toLatin1().data()); - - 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) - { - Dialog_updateProgress *dlg = new Dialog_updateProgress(m_versionDll, url, savePath); - dlg->exec(); - connect(dlg, SIGNAL(upgradeApp(QString)), this, SLOT(on_upgradeApp(QString)), Qt::QueuedConnection); - } - else - { - on_upgradeApp(savePath); - } - } -} - void MainWindow::on_upgradeApp(QString pkgPath) { QProcess proc; @@ -3187,31 +3142,19 @@ void MainWindow::on_act_sortPages_triggered() void MainWindow::on_actionact_update_triggered() { - m_listwidget = new QListWidget; - m_listwidget->setWindowTitle("chose the version"); - HGVersionInfo *versionInfo = NULL; HGUInt versionCount = 0; m_versionDll->GetVersionList(HGVERSION_APPNAME_SCANNER, &versionInfo, &versionCount); - if(versionCount > 0) { - for(HGUInt i = 0; i < versionCount; ++i) - { - QListWidgetItem *listwidgetItem = new QListWidgetItem; - listwidgetItem->setText(QString(versionInfo[i].version)); - listwidgetItem->setData(Qt::UserRole, versionInfo[i].url); - listwidgetItem->setData(Qt::UserRole+1, versionInfo[i].md5); - listwidgetItem->setToolTip(versionInfo[i].desc + tr(" buginfo: ") + versionInfo[i].bugInfo); - m_listwidget->addItem(listwidgetItem); - } - m_listwidget->show(); - connect(m_listwidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(on_upgrade(QListWidgetItem*)), Qt::QueuedConnection); - - m_versionDll->ReleaseVersionList(versionInfo, versionCount); + Dialog_upgrade dlg(m_versionDll, this); + connect(&dlg, SIGNAL(upgradeApp(QString)), this, SLOT(on_upgradeApp(QString)), Qt::QueuedConnection); + dlg.exec(); + disconnect(&dlg, SIGNAL(upgradeApp(QString)), this, SLOT(on_upgradeApp(QString))); } else { QMessageBox::critical(this, tr("error"), tr("get versionlist failed")); + return; } } diff --git a/app/scanner/mainwindow.h b/app/scanner/mainwindow.h index 39f81a3c..ff6c9652 100644 --- a/app/scanner/mainwindow.h +++ b/app/scanner/mainwindow.h @@ -122,7 +122,6 @@ private slots: void on_continueScan(); void on_stopScan(); void on_statusInfoDblClick(); - void on_upgrade(QListWidgetItem *item); void on_upgradeApp(QString pkgPath); void on_act_thumbnailBar_triggered(bool checked); diff --git a/build-qt/HGSolution/HGScanner/HGScanner.pro b/build-qt/HGSolution/HGScanner/HGScanner.pro index ec2f5afb..eddeabcc 100644 --- a/build-qt/HGSolution/HGScanner/HGScanner.pro +++ b/build-qt/HGSolution/HGScanner/HGScanner.pro @@ -162,8 +162,9 @@ SOURCES += \ ../../../app/scanner/HGImgView.cpp \ ../../../app/scanner/HGUIGlobal.cpp \ ../../../utility/HGString.cpp \ - ../../../app/scanner/dialog_input.cpp\ - ../../../app/scanner/dialog_updateprogress.cpp + ../../../app/scanner/dialog_input.cpp \ + ../../../app/scanner/dialog_updateprogress.cpp \ + ../../../app/scanner/dialog_upgrade.cpp HEADERS += \ ../../../app/scanner/VersionDll.h \ @@ -208,8 +209,9 @@ HEADERS += \ ../../../app/scanner/HGUIGlobal.h \ ../../../utility/HGString.h \ ../../../app/scanner/dialog_input.h \ - ../../../app/scanner/custom_file_dialog.h\ - ../../../app/scanner/dialog_updateprogress.h + ../../../app/scanner/custom_file_dialog.h \ + ../../../app/scanner/dialog_updateprogress.h \ + ../../../app/scanner/dialog_upgrade.h FORMS += \ ../../../app/scanner/cutdialog.ui \ @@ -240,7 +242,8 @@ FORMS += \ ../../../app/scanner/widget_statusbar.ui \ ../../../app/scanner/dialog_log.ui \ ../../../app/scanner/dialog_input.ui \ - ../../../app/scanner/dialog_updateprogress.ui + ../../../app/scanner/dialog_updateprogress.ui \ + ../../../app/scanner/dialog_upgrade.ui TRANSLATIONS += \ ../../../app/scanner/Scanner_zh_CN.ts \