func:添加右键上传下载。修正发送退出对方接收中断问题。

This commit is contained in:
2025-11-15 21:54:46 +08:00
parent 7a69db774d
commit d73ddf7341
8 changed files with 109 additions and 47 deletions

View File

@@ -289,6 +289,7 @@ void FileTrans::fbtCanDown(QSharedPointer<FrameBuffer> 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<FrameBuffer> frame)
{
InfoMsg info = infoUnpack<InfoMsg>(frame->data);
qInfo() << QString(tr("开始发送 %1 到 %2")).arg(info.fromPath, frame->fid);
isSend_ = true;
SendFile(sendTask_);
}
@@ -353,7 +355,7 @@ void FileTrans::fbtTransFailed(QSharedPointer<FrameBuffer> 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();

View File

@@ -98,8 +98,9 @@ private:
QMutex lMut_;
QMutex rMut_;
ClientCore* clientCore_;
QMutex sthMut_;
bool isSend_{};
ClientCore* clientCore_;
QMap<QString, QThread*> upTasks_;
};

View File

@@ -92,6 +92,9 @@ void Compare::InitControl()
});
LoadTitles();
isResource_ = true;
ui->tableWidget->setIsResource(isResource_);
}
void Compare::InitTabWidget()

View File

@@ -9,10 +9,11 @@
#include <QHeaderView>
#include <QLineEdit>
#include <QListWidget>
#include <QMessageBox>
#include <QTableWidgetItem>
#include <RemoteFile.h>
#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<TransTask> 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_) {

View File

@@ -57,6 +57,7 @@ private:
void ShowFilterForm();
void CopyFullPath();
void ShowProperties();
void UpDown();
public slots:
void evtHome();

View File

@@ -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);
}

View File

@@ -105,4 +105,4 @@ private:
ClientCore* clientCore_{};
};
#endif // TRANSFORM_H
#endif // TRANSFORM_H

View File

@@ -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\<FrameBuffer\>类型 | | 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\<FrameBuffer\>类型 | | 0.1 | 0.2 |