169 lines
4.8 KiB
C++
169 lines
4.8 KiB
C++
|
#include "dialog_upgradefirmware.h"
|
||
|
#include "ui_dialog_upgradefirmware.h"
|
||
|
#include <QMovie>
|
||
|
#include <QFileDialog>
|
||
|
#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)
|
||
|
, 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()
|
||
|
{
|
||
|
if (nullptr != m_thread)
|
||
|
{
|
||
|
HGBase_CloseThread(m_thread);
|
||
|
m_thread = nullptr;
|
||
|
}
|
||
|
|
||
|
delete ui;
|
||
|
}
|
||
|
|
||
|
void HGAPI Dialog_upgradeFirmware::ThreadFunc(HGThread thread, HGPointer param)
|
||
|
{
|
||
|
(void)thread;
|
||
|
Dialog_upgradeFirmware *p = (Dialog_upgradeFirmware *)param;
|
||
|
|
||
|
if (nullptr != p->m_versionMgr)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
emit p->finish();
|
||
|
}
|
||
|
|
||
|
int Dialog_upgradeFirmware::getUpgradeStatus()
|
||
|
{
|
||
|
return m_result;
|
||
|
}
|
||
|
|
||
|
void Dialog_upgradeFirmware::on_finish()
|
||
|
{
|
||
|
accept();
|
||
|
}
|
||
|
|