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_->permission = info.permissions;
downTask_->totalSize = info.size; downTask_->totalSize = info.size;
downTask_->tranSize = 0; downTask_->tranSize = 0;
isSend_ = false;
qDebug() << QString(tr("Can Down trans file:%1.")).arg(info.fromPath); 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); InfoMsg info = infoUnpack<InfoMsg>(frame->data);
qInfo() << QString(tr("开始发送 %1 到 %2")).arg(info.fromPath, frame->fid); qInfo() << QString(tr("开始发送 %1 到 %2")).arg(info.fromPath, frame->fid);
isSend_ = true;
SendFile(sendTask_); SendFile(sendTask_);
} }
@@ -353,7 +355,7 @@ void FileTrans::fbtTransFailed(QSharedPointer<FrameBuffer> frame)
void FileTrans::Interrupt(bool notic) 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()); qWarning() << QString(tr("传输文件 %1 中断。")).arg(downTask_->file.fileName());
downTask_->file.close(); downTask_->file.close();
@@ -368,7 +370,7 @@ void FileTrans::Interrupt(bool notic)
downTask_->state = TaskState::STATE_NONE; 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()); qWarning() << QString(tr("传输文件 %1 中断。")).arg(sendTask_->file.fileName());
sendTask_->file.close(); sendTask_->file.close();

View File

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

View File

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

View File

@@ -9,10 +9,11 @@
#include <QHeaderView> #include <QHeaderView>
#include <QLineEdit> #include <QLineEdit>
#include <QListWidget> #include <QListWidget>
#include <QMessageBox>
#include <QTableWidgetItem> #include <QTableWidgetItem>
#include <RemoteFile.h> #include <RemoteFile.h>
#include "Form/FileInfoForm.h"
#include "Form/FileInfoForm.h"
#include "GuiUtil/Public.h" #include "GuiUtil/Public.h"
#include "ui_FileControl.h" #include "ui_FileControl.h"
@@ -56,6 +57,12 @@ void FileManager::SetModeStr(const QString& modeStr, int type, ClientCore* clien
evtHome(); evtHome();
evtFile(); evtFile();
} }
if (isRemote_) {
menu_->addAction(tr("下载"), this, &FileManager::UpDown);
} else {
menu_->addAction(tr("上传"), this, &FileManager::UpDown);
}
} }
void FileManager::InitControl() void FileManager::InitControl()
@@ -471,6 +478,49 @@ void FileManager::ShowProperties()
info->exec(); 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() QString FileManager::GetRoot()
{ {
if (isRemote_) { if (isRemote_) {

View File

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

View File

@@ -52,7 +52,7 @@ void CustomTableWidget::dropEvent(QDropEvent* event)
for (int i = 0; i < (parseData.size() / 5); ++i) { for (int i = 0; i < (parseData.size() / 5); ++i) {
if (parseData[i * 5 + 3] != "File") { 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; continue;
} }
TransTask task; TransTask task;
@@ -69,6 +69,10 @@ void CustomTableWidget::dropEvent(QDropEvent* event)
} }
tasks.push_back(task); tasks.push_back(task);
} }
if (tasks.empty()) {
return;
}
emit sigTasks(tasks); emit sigTasks(tasks);
} }

View File

@@ -7,16 +7,17 @@
## 问题清单: ## 问题清单:
| 序号 | 类型 | 内容 | 说明 | 基于版本 | 完成版本 | | 序号 | 类型 | 内容 | 说明 | 基于版本 | 完成版本 |
| :--: | :--: | ------------------------------------------------------------ | :--: | :------: | :------: | | :--: | :--: | ------------------------------------------------------------ | :----: | :------: | :------: |
| 40 | 问题 | 上传方完成后,接收端未接收完毕不能退出的问题。 | | 0.2.3 | 0.2.4 |
| 39 | 优化 | Console端断联后应当自动退出。 | | 0.2.3 | 0.2.4 | | 39 | 优化 | Console端断联后应当自动退出。 | | 0.2.3 | 0.2.4 |
| 38 | 功能 | PE中使用没有拖拽功能,文件管理器要有下载/上传按钮。 | | 0.2.3 | | | 38 | 功能 | PE中使用没有拖拽功能,文件管理器要有下载/上传按钮。 | | 0.2.3 | 0.2.4 |
| 37 | 问题 | 未连接对方客户端时,执行对照传输会崩溃。 | | 0.2.3 | | | 37 | 问题 | 未连接对方客户端时,执行对照传输会崩溃。 | 待复现 | 0.2.3 | |
| 36 | 功能 | 备份文件功能。 | | 0.2.3 | | | 36 | 功能 | 备份文件功能。 | | 0.2.3 | |
| 35 | 功能 | 完善对照功能的界面其他内容。 | | 0.2.3 | | | 35 | 功能 | 完善对照功能的界面其他内容。 | | 0.2.3 | |
| 34 | 功能 | 支持删除、重命名、新建文件(夹)。 | | 0.2.3 | | | 34 | 功能 | 支持删除、重命名、新建文件(夹)。 | | 0.2.3 | |
| 33 | 功能 | 弹窗查看文件(夹)属性窗口。 | | 0.2.3 | | | 33 | 功能 | 弹窗查看文件(夹)属性窗口。 | | 0.2.3 | 0.2.4 |
| 32 | 功能 | 路径选择显示驱动器。 | | 0.2.2 | 0.2.3 | | 32 | 功能 | 路径选择显示驱动器。 | | 0.2.2 | 0.2.3 |
| 31 | 功能 | Server端buffer大小判断,有过多无效数据则踢出该客户端。 | | 0.2.2 | | | 31 | 功能 | Server端buffer大小判断,有过多无效数据则踢出该客户端。 | | 0.2.2 | 0.2.4 |
| 30 | 功能 | 传输界面的取消退出,缺失功能处理。 | | 0.2.2 | 0.2.3 | | 30 | 功能 | 传输界面的取消退出,缺失功能处理。 | | 0.2.2 | 0.2.3 |
| 29 | 功能 | 根据接收端的速率限制发送端的速度。 | | 0.2.2 | 0.2.3 | | 29 | 功能 | 根据接收端的速率限制发送端的速度。 | | 0.2.2 | 0.2.3 |
| 28 | 变更 | 语言简体中文。 | | 0.2.2 | 0.2.3 | | 28 | 变更 | 语言简体中文。 | | 0.2.2 | 0.2.3 |