diff --git a/ClientCore/FileTrans.cpp b/ClientCore/FileTrans.cpp index 28d3cd6..b355bb8 100644 --- a/ClientCore/FileTrans.cpp +++ b/ClientCore/FileTrans.cpp @@ -289,6 +289,7 @@ void FileTrans::fbtCanDown(QSharedPointer frame) downTask_->permission = info.permissions; downTask_->totalSize = info.size; downTask_->tranSize = 0; + isSend_ = false; qDebug() << QString(tr("Can Down trans file:%1.")).arg(info.fromPath); } @@ -339,6 +340,7 @@ void FileTrans::fbtCanSend(QSharedPointer frame) { InfoMsg info = infoUnpack(frame->data); qInfo() << QString(tr("开始发送 %1 到 %2")).arg(info.fromPath, frame->fid); + isSend_ = true; SendFile(sendTask_); } @@ -353,7 +355,7 @@ void FileTrans::fbtTransFailed(QSharedPointer frame) void FileTrans::Interrupt(bool notic) { - if (downTask_->state == TaskState::STATE_RUNNING) { + if (!isSend_ && downTask_->state == TaskState::STATE_RUNNING) { qWarning() << QString(tr("传输文件 %1 中断。")).arg(downTask_->file.fileName()); downTask_->file.close(); @@ -368,7 +370,7 @@ void FileTrans::Interrupt(bool notic) downTask_->state = TaskState::STATE_NONE; } - if (sendTask_->state == TaskState::STATE_RUNNING) { + if (isSend_ && sendTask_->state == TaskState::STATE_RUNNING) { qWarning() << QString(tr("传输文件 %1 中断。")).arg(sendTask_->file.fileName()); sendTask_->file.close(); diff --git a/ClientCore/FileTrans.h b/ClientCore/FileTrans.h index e295bf2..a1719ed 100644 --- a/ClientCore/FileTrans.h +++ b/ClientCore/FileTrans.h @@ -98,8 +98,9 @@ private: QMutex lMut_; QMutex rMut_; - ClientCore* clientCore_; QMutex sthMut_; + bool isSend_{}; + ClientCore* clientCore_; QMap upTasks_; }; diff --git a/Gui/Control/CompareControl.cpp b/Gui/Control/CompareControl.cpp index 5a6684e..35a4af7 100644 --- a/Gui/Control/CompareControl.cpp +++ b/Gui/Control/CompareControl.cpp @@ -92,6 +92,9 @@ void Compare::InitControl() }); LoadTitles(); + + isResource_ = true; + ui->tableWidget->setIsResource(isResource_); } void Compare::InitTabWidget() diff --git a/Gui/Control/FileControl.cpp b/Gui/Control/FileControl.cpp index 2c85987..8e5c394 100644 --- a/Gui/Control/FileControl.cpp +++ b/Gui/Control/FileControl.cpp @@ -9,10 +9,11 @@ #include #include #include +#include #include #include -#include "Form/FileInfoForm.h" +#include "Form/FileInfoForm.h" #include "GuiUtil/Public.h" #include "ui_FileControl.h" @@ -56,6 +57,12 @@ void FileManager::SetModeStr(const QString& modeStr, int type, ClientCore* clien evtHome(); evtFile(); } + + if (isRemote_) { + menu_->addAction(tr("下载"), this, &FileManager::UpDown); + } else { + menu_->addAction(tr("上传"), this, &FileManager::UpDown); + } } void FileManager::InitControl() @@ -471,6 +478,49 @@ void FileManager::ShowProperties() info->exec(); } +void FileManager::UpDown() +{ + auto datas = ui->tableWidget->selectedItems(); + if (datas.isEmpty()) { + return; + } + if (datas.size() % 5 != 0) { + QMessageBox::information(this, tr("提示"), tr("请选择完整的行。")); + return; + } + QVector tasks; + for (int i = 0; i < (datas.size() / 5); ++i) { + if (datas[i * 5 + 3]->text() != "File") { + qDebug() << QString(tr("暂不支持传输文件夹:%1")).arg(datas[i * 5 + 3]->text()); + continue; + } + /* + 要注意这一块的逻辑,本软件的所讲的【上传】【下载】都是针对本地。 + 这里的任务拼接和 DropEvent 有所不同, + DropEvent 是接收方负责拼接任务,但是这里是发送方拼接任务。 + + 所以这里的拼接逻辑需要注意。 + */ + TransTask task; + task.taskUUID = Util::UUID(); + task.isUpload = !isRemote_; + task.localId = cliCore_->GetOwnID(); + task.remoteId = cliCore_->GetRemoteID(); + if (isRemote_) { + task.remotePath = Util::Join(GlobalData::Ins()->GetRemoteRoot(), datas[i * 5 + 1]->text()); + task.localPath = GlobalData::Ins()->GetLocalRoot(); + } else { + task.remotePath = GlobalData::Ins()->GetRemoteRoot(); + task.localPath = Util::Join(GlobalData::Ins()->GetLocalRoot(), datas[i * 5 + 1]->text()); + } + tasks.push_back(task); + } + if (tasks.isEmpty()) { + return; + } + emit sigSendTasks(tasks); +} + QString FileManager::GetRoot() { if (isRemote_) { diff --git a/Gui/Control/FileControl.h b/Gui/Control/FileControl.h index a27bae2..6c6dbea 100644 --- a/Gui/Control/FileControl.h +++ b/Gui/Control/FileControl.h @@ -57,6 +57,7 @@ private: void ShowFilterForm(); void CopyFullPath(); void ShowProperties(); + void UpDown(); public slots: void evtHome(); diff --git a/Gui/Control/cusTableWidget.cpp b/Gui/Control/cusTableWidget.cpp index 7da0a0a..0cd55b7 100644 --- a/Gui/Control/cusTableWidget.cpp +++ b/Gui/Control/cusTableWidget.cpp @@ -52,7 +52,7 @@ void CustomTableWidget::dropEvent(QDropEvent* event) for (int i = 0; i < (parseData.size() / 5); ++i) { if (parseData[i * 5 + 3] != "File") { - qDebug() << QString(tr("Not Handle %1")).arg(parseData[i * 5 + 1]); + qDebug() << QString(tr("暂不支持传输文件夹:%1")).arg(parseData[i * 5 + 1]); continue; } TransTask task; @@ -69,6 +69,10 @@ void CustomTableWidget::dropEvent(QDropEvent* event) } tasks.push_back(task); } + + if (tasks.empty()) { + return; + } emit sigTasks(tasks); } diff --git a/Gui/Form/Transform.h b/Gui/Form/Transform.h index 2e47b46..ef3ba16 100644 --- a/Gui/Form/Transform.h +++ b/Gui/Form/Transform.h @@ -105,4 +105,4 @@ private: ClientCore* clientCore_{}; }; -#endif // TRANSFORM_H \ No newline at end of file +#endif // TRANSFORM_H \ No newline at end of file diff --git a/Note/version.md b/Note/version.md index 9c7b141..2d5ddbe 100644 --- a/Note/version.md +++ b/Note/version.md @@ -6,44 +6,45 @@ ## 问题清单: -| 序号 | 类型 | 内容 | 说明 | 基于版本 | 完成版本 | -| :--: | :--: | ------------------------------------------------------------ | :--: | :------: | :------: | -| 39 | 优化 | Console端断联后应当自动退出。 | | 0.2.3 | 0.2.4 | -| 38 | 功能 | PE中使用没有拖拽功能,文件管理器要有下载/上传按钮。 | | 0.2.3 | | -| 37 | 问题 | 未连接对方客户端时,执行对照传输会崩溃。 | | 0.2.3 | | -| 36 | 功能 | 备份文件功能。 | | 0.2.3 | | -| 35 | 功能 | 完善对照功能的界面其他内容。 | | 0.2.3 | | -| 34 | 功能 | 支持删除、重命名、新建文件(夹)。 | | 0.2.3 | | -| 33 | 功能 | 弹窗查看文件(夹)属性窗口。 | | 0.2.3 | | -| 32 | 功能 | 路径选择显示驱动器。 | | 0.2.2 | 0.2.3 | -| 31 | 功能 | Server端buffer大小判断,有过多无效数据则踢出该客户端。 | | 0.2.2 | | -| 30 | 功能 | 传输界面的取消退出,缺失功能处理。 | | 0.2.2 | 0.2.3 | -| 29 | 功能 | 根据接收端的速率限制发送端的速度。 | | 0.2.2 | 0.2.3 | -| 28 | 变更 | 语言简体中文。 | | 0.2.2 | 0.2.3 | -| 27 | 功能 | 传输前检查对方或者自己是否已存在某些文件,提示是否覆盖。 | | 0.2.2 | 0.2.3 | -| 26 | 功能 | 最好能保存关闭界面时Splitter和UI的尺寸。 | | 0.2.2 | | -| 25 | 功能 | 手动输入的文件夹访问路径保存历史记录,以便后续可能再次使用(10条)。 | | 0.2.2 | | -| 24 | 问题 | 发送端如果发送的数据比较大,UI会卡住(功能是正常的)。 | | 0.2.2 | 0.2.3 | -| 23 | 问题 | 作为接收端如果对方断联要处理这个情况。 | | 0.2.2 | 0.2.3 | -| 22 | 功能 | 配置可以切组。 | | 0.2.2 | | -| 21 | 功能 | 可以传输文件夹。 | | 0.2.2 | | -| 20 | 功能 | 对照传输可以打开本地文件夹。 | | 0.2.2 | 0.2.3 | -| 19 | 问题 | 客户之间心跳包,被动/主动失联后断开,清除相关内容,终止相关任务。 | | 0.2.2 | 0.2.3 | -| 18 | 问题 | 断开后重连貌似没有发送心跳包。 | | 0.1 | 0.2 | -| 17 | 问题 | 服务端主动踢出的客户端,主动重连假链接,不可用无反应。 | | 0.1 | 0.2 | -| 16 | 优化 | 传输完成后接收端要刷新一次。 | | 0.1 | | -| 15 | 问题 | 拖动文件夹到对方,应当不处理,并日志提示。 | | 0.1 | 0.2 | -| 14 | 功能 | 文件浏览部分添加右键复制全路径功能。 | | 0.1 | 0.2 | -| 13 | 功能 | IP端口部分要添加可选择历史。 | | 0.1 | 0.2 | -| 12 | 功能 | 对照传输前要先校验文件存在性。 | | 0.1 | 0.2.3 | -| 11 | 问题 | 断连后当前远端ID要清除。 | | 0.1 | 0.2 | -| 10 | 功能 | 对照传输可以支持反向下载。 | | 0.1 | 0.2 | -| 9 | 优化 | 输入路径后可以直接回车访问。 | | 0.1 | 0.2 | -| 8 | 功能 | 文件浏览页面要支持按照类型排序,时间排序,和文件后缀筛选。 | | 0.1 | 0.2 | -| 7 | 优化 | IP和Port宽度要合理一些,IP过小,Port宽度过大。 | | 0.1 | 0.2 | -| 6 | 功能 | 比对控件添加可尝试目录浏览控件跳转到指定目录。 | | 0.1 | 0.2 | -| 5 | 问题 | 未设置心跳包,导致超时被Server端踢出。 | 必改 | 0.1 | 0.2 | -| 4 | 问题 | 重复链接Server会崩溃。 | | 0.1 | 0.2 | -| 3 | 优化 | 首次启动时应当按照当前分辨率进行初始化大小,而不是指定大小。 | | 0.1 | 0.2 | -| 2 | 问题 | 当某个文件传输失败的时候,关闭传输窗口,再次传输显示已经在传输中。 | | 0.1 | 0.2.3 | -| 1 | 问题 | Console端显示未注册QSharedPointer\类型 | | 0.1 | 0.2 | +| 序号 | 类型 | 内容 | 说明 | 基于版本 | 完成版本 | +| :--: | :--: | ------------------------------------------------------------ | :----: | :------: | :------: | +| 40 | 问题 | 上传方完成后,接收端未接收完毕不能退出的问题。 | | 0.2.3 | 0.2.4 | +| 39 | 优化 | Console端断联后应当自动退出。 | | 0.2.3 | 0.2.4 | +| 38 | 功能 | PE中使用没有拖拽功能,文件管理器要有下载/上传按钮。 | | 0.2.3 | 0.2.4 | +| 37 | 问题 | 未连接对方客户端时,执行对照传输会崩溃。 | 待复现 | 0.2.3 | | +| 36 | 功能 | 备份文件功能。 | | 0.2.3 | | +| 35 | 功能 | 完善对照功能的界面其他内容。 | | 0.2.3 | | +| 34 | 功能 | 支持删除、重命名、新建文件(夹)。 | | 0.2.3 | | +| 33 | 功能 | 弹窗查看文件(夹)属性窗口。 | | 0.2.3 | 0.2.4 | +| 32 | 功能 | 路径选择显示驱动器。 | | 0.2.2 | 0.2.3 | +| 31 | 功能 | Server端buffer大小判断,有过多无效数据则踢出该客户端。 | | 0.2.2 | 0.2.4 | +| 30 | 功能 | 传输界面的取消退出,缺失功能处理。 | | 0.2.2 | 0.2.3 | +| 29 | 功能 | 根据接收端的速率限制发送端的速度。 | | 0.2.2 | 0.2.3 | +| 28 | 变更 | 语言简体中文。 | | 0.2.2 | 0.2.3 | +| 27 | 功能 | 传输前检查对方或者自己是否已存在某些文件,提示是否覆盖。 | | 0.2.2 | 0.2.3 | +| 26 | 功能 | 最好能保存关闭界面时Splitter和UI的尺寸。 | | 0.2.2 | | +| 25 | 功能 | 手动输入的文件夹访问路径保存历史记录,以便后续可能再次使用(10条)。 | | 0.2.2 | | +| 24 | 问题 | 发送端如果发送的数据比较大,UI会卡住(功能是正常的)。 | | 0.2.2 | 0.2.3 | +| 23 | 问题 | 作为接收端如果对方断联要处理这个情况。 | | 0.2.2 | 0.2.3 | +| 22 | 功能 | 配置可以切组。 | | 0.2.2 | | +| 21 | 功能 | 可以传输文件夹。 | | 0.2.2 | | +| 20 | 功能 | 对照传输可以打开本地文件夹。 | | 0.2.2 | 0.2.3 | +| 19 | 问题 | 客户之间心跳包,被动/主动失联后断开,清除相关内容,终止相关任务。 | | 0.2.2 | 0.2.3 | +| 18 | 问题 | 断开后重连貌似没有发送心跳包。 | | 0.1 | 0.2 | +| 17 | 问题 | 服务端主动踢出的客户端,主动重连假链接,不可用无反应。 | | 0.1 | 0.2 | +| 16 | 优化 | 传输完成后接收端要刷新一次。 | | 0.1 | | +| 15 | 问题 | 拖动文件夹到对方,应当不处理,并日志提示。 | | 0.1 | 0.2 | +| 14 | 功能 | 文件浏览部分添加右键复制全路径功能。 | | 0.1 | 0.2 | +| 13 | 功能 | IP端口部分要添加可选择历史。 | | 0.1 | 0.2 | +| 12 | 功能 | 对照传输前要先校验文件存在性。 | | 0.1 | 0.2.3 | +| 11 | 问题 | 断连后当前远端ID要清除。 | | 0.1 | 0.2 | +| 10 | 功能 | 对照传输可以支持反向下载。 | | 0.1 | 0.2 | +| 9 | 优化 | 输入路径后可以直接回车访问。 | | 0.1 | 0.2 | +| 8 | 功能 | 文件浏览页面要支持按照类型排序,时间排序,和文件后缀筛选。 | | 0.1 | 0.2 | +| 7 | 优化 | IP和Port宽度要合理一些,IP过小,Port宽度过大。 | | 0.1 | 0.2 | +| 6 | 功能 | 比对控件添加可尝试目录浏览控件跳转到指定目录。 | | 0.1 | 0.2 | +| 5 | 问题 | 未设置心跳包,导致超时被Server端踢出。 | 必改 | 0.1 | 0.2 | +| 4 | 问题 | 重复链接Server会崩溃。 | | 0.1 | 0.2 | +| 3 | 优化 | 首次启动时应当按照当前分辨率进行初始化大小,而不是指定大小。 | | 0.1 | 0.2 | +| 2 | 问题 | 当某个文件传输失败的时候,关闭传输窗口,再次传输显示已经在传输中。 | | 0.1 | 0.2.3 | +| 1 | 问题 | Console端显示未注册QSharedPointer\类型 | | 0.1 | 0.2 |