fun:文件校验功能添加(未结束)。
This commit is contained in:
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@@ -147,7 +147,8 @@
|
|||||||
"qxmlstreamwriter": "cpp",
|
"qxmlstreamwriter": "cpp",
|
||||||
"qgraphicsdropshadoweffect": "cpp",
|
"qgraphicsdropshadoweffect": "cpp",
|
||||||
"qpushbutton": "cpp",
|
"qpushbutton": "cpp",
|
||||||
"qpainter": "cpp"
|
"qpainter": "cpp",
|
||||||
|
"qdialog": "cpp"
|
||||||
},
|
},
|
||||||
"editor.tokenColorCustomizations": {
|
"editor.tokenColorCustomizations": {
|
||||||
"textMateRules": [
|
"textMateRules": [
|
||||||
|
|||||||
@@ -82,6 +82,29 @@ void ClientCore::onDisconnected()
|
|||||||
emit sigDisconnect();
|
emit sigDisconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClientCore::handleAsk(QSharedPointer<FrameBuffer> frame)
|
||||||
|
{
|
||||||
|
InfoMsg msg = infoUnpack<InfoMsg>(frame->data);
|
||||||
|
// TODO: 处理询问请求
|
||||||
|
if (msg.command == STRMSG_REQUEST_CHECK_FILE_EXIST) {
|
||||||
|
InfoMsg ans;
|
||||||
|
ans.command = STRMSG_ANSWER_CHECK_FILE_EXIST;
|
||||||
|
for (const auto& filePath : msg.list) {
|
||||||
|
if (!Util::FileExist(filePath)) {
|
||||||
|
ans.list.append(filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!Send<InfoMsg>(ans, FBT_MSGINFO_ANSWER, frame->fid)) {
|
||||||
|
auto logMsg = tr("给") + frame->fid + tr("返回检查文件存在性消息失败。");
|
||||||
|
qCritical() << logMsg;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 未知信息
|
||||||
|
qWarning() << QString(tr("未知询问信息类型:%1")).arg(msg.command);
|
||||||
|
}
|
||||||
|
|
||||||
void ClientCore::UseFrame(QSharedPointer<FrameBuffer> frame)
|
void ClientCore::UseFrame(QSharedPointer<FrameBuffer> frame)
|
||||||
{
|
{
|
||||||
switch (frame->type) {
|
switch (frame->type) {
|
||||||
@@ -182,7 +205,7 @@ void ClientCore::UseFrame(QSharedPointer<FrameBuffer> frame)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FBT_MSGINFO_ASK: {
|
case FBT_MSGINFO_ASK: {
|
||||||
emit sigMsgAsk(frame);
|
handleAsk(frame);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FBT_MSGINFO_ANSWER: {
|
case FBT_MSGINFO_ANSWER: {
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ signals:
|
|||||||
private:
|
private:
|
||||||
void onReadyRead();
|
void onReadyRead();
|
||||||
void onDisconnected();
|
void onDisconnected();
|
||||||
|
void handleAsk(QSharedPointer<FrameBuffer> frame);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void UseFrame(QSharedPointer<FrameBuffer> frame);
|
void UseFrame(QSharedPointer<FrameBuffer> frame);
|
||||||
|
|||||||
@@ -106,8 +106,11 @@ void LoadingDialog::moveToCenter(QWidget* pParent)
|
|||||||
*/
|
*/
|
||||||
void LoadingDialog::cancelBtnClicked()
|
void LoadingDialog::cancelBtnClicked()
|
||||||
{
|
{
|
||||||
emit cancelWaiting();
|
if (isShow_) {
|
||||||
this->done(USER_CANCEL);
|
isShow_ = false;
|
||||||
|
emit cancelWaiting();
|
||||||
|
this->done(USER_CANCEL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -129,6 +132,12 @@ void LoadingDialog::paintEvent(QPaintEvent* event)
|
|||||||
QWidget::paintEvent(event);
|
QWidget::paintEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int LoadingDialog::exec()
|
||||||
|
{
|
||||||
|
isShow_ = true;
|
||||||
|
return QDialog::exec();
|
||||||
|
}
|
||||||
|
|
||||||
LoadingDialog::~LoadingDialog()
|
LoadingDialog::~LoadingDialog()
|
||||||
{
|
{
|
||||||
delete m_pLoadingMovie;
|
delete m_pLoadingMovie;
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ public:
|
|||||||
// 移动到指定窗口中间显示
|
// 移动到指定窗口中间显示
|
||||||
void moveToCenter(QWidget* pParent);
|
void moveToCenter(QWidget* pParent);
|
||||||
|
|
||||||
|
public:
|
||||||
|
int exec() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent* event) override;
|
void paintEvent(QPaintEvent* event) override;
|
||||||
|
|
||||||
@@ -32,7 +35,7 @@ private:
|
|||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void cancelWaiting();
|
void cancelWaiting();
|
||||||
|
|
||||||
private slots:
|
public slots:
|
||||||
void cancelBtnClicked();
|
void cancelBtnClicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -40,6 +43,7 @@ private:
|
|||||||
QLabel* m_pMovieLabel;
|
QLabel* m_pMovieLabel;
|
||||||
QMovie* m_pLoadingMovie;
|
QMovie* m_pLoadingMovie;
|
||||||
QLabel* m_pTipsLabel;
|
QLabel* m_pTipsLabel;
|
||||||
|
bool isShow_{};
|
||||||
QPushButton* m_pCancelBtn;
|
QPushButton* m_pCancelBtn;
|
||||||
};
|
};
|
||||||
#endif // LOADINGDIALOG_H
|
#endif // LOADINGDIALOG_H
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "Transform.h"
|
#include "Transform.h"
|
||||||
|
|
||||||
|
#include <QFileInfo>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
|
||||||
#include "ui_Transform.h"
|
#include "ui_Transform.h"
|
||||||
@@ -146,3 +147,105 @@ void TransForm::closeEvent(QCloseEvent* event)
|
|||||||
exis_ = true;
|
exis_ = true;
|
||||||
QDialog::closeEvent(event);
|
QDialog::closeEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CheckCondition::CheckCondition(QObject* parent) : QThread(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckCondition::SetClientCore(ClientCore* clientCore)
|
||||||
|
{
|
||||||
|
clientCore_ = clientCore;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckCondition::SetTasks(const QVector<TransTask>& tasks)
|
||||||
|
{
|
||||||
|
tasks_ = tasks;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckCondition::recvFrame(QSharedPointer<FrameBuffer> frame)
|
||||||
|
{
|
||||||
|
InfoMsg info = infoUnpack<InfoMsg>(frame->data);
|
||||||
|
if (info.command == STRMSG_ANSWER_CHECK_FILE_EXIST) {
|
||||||
|
remoteNotExits_ = info.list;
|
||||||
|
qInfo() << tr("检查结束,远端不存在的文件数:") << remoteNotExits_.size();
|
||||||
|
msg_ = info.command;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
msg_ = tr("收到未知信息,认为判断失败:") + info.command;
|
||||||
|
qInfo() << msg_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckCondition::interrupCheck()
|
||||||
|
{
|
||||||
|
if (!isAlreadyInter_) {
|
||||||
|
isAlreadyInter_ = true;
|
||||||
|
qWarning() << tr("中断文件校验......");
|
||||||
|
emit sigCheckOver();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckCondition::run()
|
||||||
|
{
|
||||||
|
qInfo() << tr("开始文件校验......");
|
||||||
|
|
||||||
|
resultMsgMap_.clear();
|
||||||
|
checkRet_.clear();
|
||||||
|
isRun_ = true;
|
||||||
|
msg_.clear();
|
||||||
|
isAlreadyInter_ = false;
|
||||||
|
|
||||||
|
// 先检查本地文件是否存在
|
||||||
|
for (const auto& task : tasks_) {
|
||||||
|
if (task.isUpload && !Util::FileExist(task.localPath)) {
|
||||||
|
resultMsgMap_[CCR_CHECK_LOCAL_NOT_EXIT].push_back(task.localPath);
|
||||||
|
if (!checkRet_.contains(CCR_CHECK_LOCAL_NOT_EXIT)) {
|
||||||
|
checkRet_.push_back(CCR_CHECK_LOCAL_NOT_EXIT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!task.isUpload && Util::FileExist(task.localPath)) {
|
||||||
|
resultMsgMap_[CCR_CHECK_LOCAL_EXIT].push_back(task.localPath);
|
||||||
|
if (!checkRet_.contains(CCR_CHECK_LOCAL_EXIT)) {
|
||||||
|
checkRet_.push_back(CCR_CHECK_LOCAL_EXIT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 再检查远程文件是否存在
|
||||||
|
InfoMsg msg;
|
||||||
|
msg.command = STRMSG_REQUEST_CHECK_FILE_EXIST;
|
||||||
|
for (const auto& task : tasks_) {
|
||||||
|
msg.list.push_back(task.remotePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto f = clientCore_->GetBuffer(msg, FBT_MSGINFO_ASK, clientCore_->GetRemoteID());
|
||||||
|
if (!ClientCore::syncInvoke(clientCore_, f)) {
|
||||||
|
auto errMsg = tr("检查远程文件存在性数据发送失败。");
|
||||||
|
if (!checkRet_.contains(CCR_CHECK_FAILED)) {
|
||||||
|
checkRet_.push_back(CCR_CHECK_FAILED);
|
||||||
|
resultMsgMap_[CCR_CHECK_FAILED].push_back(errMsg);
|
||||||
|
}
|
||||||
|
emit sigCheckOver();
|
||||||
|
qCritical() << errMsg;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while (isRun_) {
|
||||||
|
QThread::msleep(10);
|
||||||
|
if (msg_.isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (msg_ != STRMSG_ANSWER_CHECK_FILE_EXIST) {
|
||||||
|
if (!checkRet_.contains(CCR_CHECK_FAILED)) {
|
||||||
|
checkRet_.push_back(CCR_CHECK_FAILED);
|
||||||
|
resultMsgMap_[CCR_CHECK_FAILED].push_back(msg_);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!checkRet_.contains(CCR_CHECK_PASSED)) {
|
||||||
|
checkRet_.push_back(CCR_CHECK_PASSED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
isAlreadyInter_ = true;
|
||||||
|
emit sigCheckOver();
|
||||||
|
qInfo() << tr("文件校验结束......");
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class TransForm;
|
class TransForm;
|
||||||
@@ -33,7 +34,7 @@ signals:
|
|||||||
void sigTaskNum(const QString& data);
|
void sigTaskNum(const QString& data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setProgress(double val);
|
void setProgress(double val);
|
||||||
void handleFailed();
|
void handleFailed();
|
||||||
void handleDone();
|
void handleDone();
|
||||||
void handleUI(const TransTask& task);
|
void handleUI(const TransTask& task);
|
||||||
@@ -44,9 +45,9 @@ protected:
|
|||||||
void closeEvent(QCloseEvent* event) override;
|
void closeEvent(QCloseEvent* event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool exis_{ false };
|
bool exis_{false};
|
||||||
TranFromTh* workTh_{};
|
TranFromTh* workTh_{};
|
||||||
qint32 curTaskNum_{ 0 };
|
qint32 curTaskNum_{0};
|
||||||
QVector<TransTask> tasks_;
|
QVector<TransTask> tasks_;
|
||||||
FileTrans* fileTrans_{};
|
FileTrans* fileTrans_{};
|
||||||
ClientCore* clientCore_{};
|
ClientCore* clientCore_{};
|
||||||
@@ -61,6 +62,7 @@ public:
|
|||||||
explicit TranFromTh(TransForm* tf, QObject* parent = nullptr) : QThread(parent), tf_(tf)
|
explicit TranFromTh(TransForm* tf, QObject* parent = nullptr) : QThread(parent), tf_(tf)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void run() override
|
void run() override
|
||||||
{
|
{
|
||||||
@@ -73,4 +75,47 @@ private:
|
|||||||
TransForm* tf_;
|
TransForm* tf_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TRANSFORM_H
|
enum CondCheckResult {
|
||||||
|
CCR_NO_CHECK = 0,
|
||||||
|
CCR_CHECK_PASSED,
|
||||||
|
CCR_CHECK_FAILED,
|
||||||
|
CCR_CHECK_INTERRUPT,
|
||||||
|
CCR_CHECK_LOCAL_EXIT,
|
||||||
|
CCR_CHECK_REMOTE_EXIT,
|
||||||
|
CCR_CHECK_LOCAL_NOT_EXIT,
|
||||||
|
CCR_CHECK_REMOTE_NOT_EXIT
|
||||||
|
};
|
||||||
|
|
||||||
|
class CheckCondition : public QThread
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CheckCondition(QObject* parent = nullptr);
|
||||||
|
|
||||||
|
public:
|
||||||
|
void SetClientCore(ClientCore* clientCore);
|
||||||
|
void SetTasks(const QVector<TransTask>& tasks);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void sigCheckOver();
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void interrupCheck();
|
||||||
|
void recvFrame(QSharedPointer<FrameBuffer> frame);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void run() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString msg_;
|
||||||
|
bool isRun_;
|
||||||
|
bool isAlreadyInter_;
|
||||||
|
QVector<TransTask> tasks_;
|
||||||
|
ClientCore* clientCore_{};
|
||||||
|
QVector<QString> remoteNotExits_;
|
||||||
|
QVector<CondCheckResult> checkRet_;
|
||||||
|
std::unordered_map<CondCheckResult, QVector<QString>> resultMsgMap_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TRANSFORM_H
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "frelayGUI.h"
|
#include "frelayGUI.h"
|
||||||
|
|
||||||
|
#include <Form/Loading.h>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
#include <QSplitter>
|
#include <QSplitter>
|
||||||
@@ -35,7 +36,7 @@ frelayGUI::frelayGUI(QWidget* parent) : QDialog(parent), ui(new Ui::frelayGUI)
|
|||||||
// QLabel* permanent = new QLabel(this);
|
// QLabel* permanent = new QLabel(this);
|
||||||
// permanent->setFrameStyle(QFrame::Box | QFrame::Sunken);
|
// permanent->setFrameStyle(QFrame::Box | QFrame::Sunken);
|
||||||
// permanent->setText(QString("%1 on %2").arg(VERSION_GIT_COMMIT, VERSION_GIT_BRANCH));
|
// permanent->setText(QString("%1 on %2").arg(VERSION_GIT_COMMIT, VERSION_GIT_BRANCH));
|
||||||
//this->statusBar()->addPermanentWidget(permanent);
|
// this->statusBar()->addPermanentWidget(permanent);
|
||||||
}
|
}
|
||||||
|
|
||||||
frelayGUI::~frelayGUI()
|
frelayGUI::~frelayGUI()
|
||||||
@@ -142,6 +143,22 @@ void frelayGUI::HandleTask(const QVector<TransTask>& tasks)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
transform_->SetTasks(tasks);
|
transform_->SetTasks(tasks);
|
||||||
|
|
||||||
|
// 检查文件
|
||||||
|
CheckCondition checkThread(this);
|
||||||
|
checkThread.SetTasks(tasks);
|
||||||
|
checkThread.SetClientCore(clientCore_);
|
||||||
|
|
||||||
|
LoadingDialog checking(this);
|
||||||
|
checking.setTipsText("正在检查文件...");
|
||||||
|
|
||||||
|
connect(&checkThread, &CheckCondition::sigCheckOver, &checking, &LoadingDialog::cancelBtnClicked);
|
||||||
|
connect(&checking, &LoadingDialog::cancelWaiting, &checkThread, &CheckCondition::interrupCheck);
|
||||||
|
connect(clientCore_, &ClientCore::sigMsgAnswer, &checkThread, &CheckCondition::recvFrame);
|
||||||
|
|
||||||
|
checkThread.start();
|
||||||
|
checking.exec();
|
||||||
|
|
||||||
transform_->exec();
|
transform_->exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,9 +42,8 @@ enum FrameBufferType : uint16_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 字符串标识
|
// 字符串标识
|
||||||
#define STRMSG_CHECK_FILE_EXIST "checkFileExist"
|
#define STRMSG_REQUEST_CHECK_FILE_EXIST "requestCheckFileExist"
|
||||||
#define STRMSG_FILE_EXIST "fileExist"
|
#define STRMSG_ANSWER_CHECK_FILE_EXIST "answerCheckFileExist"
|
||||||
#define STRMSG_FILE_NOT_EXIST "fileNotExist"
|
|
||||||
|
|
||||||
struct FrameBuffer {
|
struct FrameBuffer {
|
||||||
QByteArray data;
|
QByteArray data;
|
||||||
|
|||||||
@@ -125,6 +125,16 @@ QString Util::GetVersion()
|
|||||||
return ver;
|
return ver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Util::FileExist(const QString& path)
|
||||||
|
{
|
||||||
|
return QFile::exists(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Util::DirExist(const QString& path)
|
||||||
|
{
|
||||||
|
return QDir(path).exists();
|
||||||
|
}
|
||||||
|
|
||||||
QString DirFileHelper::GetErr() const
|
QString DirFileHelper::GetErr() const
|
||||||
{
|
{
|
||||||
return QString();
|
return QString();
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ public:
|
|||||||
static QString GetCurConfigPath(const QString& sub);
|
static QString GetCurConfigPath(const QString& sub);
|
||||||
static void ConsoleMsgHander(QtMsgType type, const QMessageLogContext& context, const QString& msg);
|
static void ConsoleMsgHander(QtMsgType type, const QMessageLogContext& context, const QString& msg);
|
||||||
static QString GetVersion();
|
static QString GetVersion();
|
||||||
|
static bool FileExist(const QString& path);
|
||||||
|
static bool DirExist(const QString& path);
|
||||||
};
|
};
|
||||||
|
|
||||||
class DirFileHelper : public QObject
|
class DirFileHelper : public QObject
|
||||||
|
|||||||
Reference in New Issue
Block a user