From 67db0163fc133fda38c00a19816a5335940f2294 Mon Sep 17 00:00:00 2001 From: taynpg Date: Sun, 9 Nov 2025 18:10:54 +0800 Subject: [PATCH] =?UTF-8?q?func=EF=BC=9A=E6=B7=BB=E5=8A=A0=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=A9=B1=E5=8A=A8=E5=99=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ClientCore/ClientCore.cpp | 3 ++- ClientCore/ClientCore.h | 2 +- ClientCore/RemoteFile.cpp | 3 ++- Gui/Control/FileControl.cpp | 17 +++++++++++++---- Gui/Control/FileControl.h | 3 ++- Note/version.md | 1 + Util/LocalFile.cpp | 2 +- Util/Util.cpp | 13 +++++++++++++ Util/Util.h | 3 ++- 9 files changed, 37 insertions(+), 10 deletions(-) diff --git a/ClientCore/ClientCore.cpp b/ClientCore/ClientCore.cpp index 8d6483f..3274ef0 100644 --- a/ClientCore/ClientCore.cpp +++ b/ClientCore/ClientCore.cpp @@ -152,6 +152,7 @@ void ClientCore::UseFrame(QSharedPointer frame) case FrameBufferType::FBT_CLI_ASK_HOME: { InfoMsg info; info.msg = Util::GetUserHome(); + info.list = Util::GetLocalDrivers(); if (!Send(info, FBT_CLI_ANS_HOME, frame->fid)) { qCritical() << QString(tr("send home failed.")); return; @@ -161,7 +162,7 @@ void ClientCore::UseFrame(QSharedPointer frame) case FrameBufferType::FBT_CLI_ANS_HOME: { InfoMsg info = infoUnpack(frame->data); qInfo() << QString(tr("用户目录:%1")).arg(info.msg); - emit sigPath(info.msg); + emit sigPath(info.msg, info.list); break; } case FrameBufferType::FBT_SER_MSG_FORWARD_FAILED: { diff --git a/ClientCore/ClientCore.h b/ClientCore/ClientCore.h index fd0dd0d..3c42f57 100644 --- a/ClientCore/ClientCore.h +++ b/ClientCore/ClientCore.h @@ -64,7 +64,7 @@ public: signals: void sigDisconnect(); - void sigPath(const QString& path); + void sigPath(const QString& path, const QStringList& drivers); void sigClients(const InfoClientVec& clients); void sigFiles(const DirFileInfoVec& files); void sigReqSend(QSharedPointer frame); diff --git a/ClientCore/RemoteFile.cpp b/ClientCore/RemoteFile.cpp index 54a9ea6..7c145b9 100644 --- a/ClientCore/RemoteFile.cpp +++ b/ClientCore/RemoteFile.cpp @@ -11,7 +11,8 @@ RemoteFile::RemoteFile(QObject* parent) : DirFileHelper(parent) void RemoteFile::setClientCore(ClientCore* cliCore) { cliCore_ = cliCore; - connect(cliCore_, &ClientCore::sigPath, this, [this](const QString& path) { sigHome(path); }); + connect(cliCore_, &ClientCore::sigPath, this, + [this](const QString& path, const QStringList& drivers) { sigHome(path, drivers); }); connect(cliCore_, &ClientCore::sigFiles, this, [this](const DirFileInfoVec& files) { sigDirFile(files); }); } diff --git a/Gui/Control/FileControl.cpp b/Gui/Control/FileControl.cpp index bca240a..22e8d51 100644 --- a/Gui/Control/FileControl.cpp +++ b/Gui/Control/FileControl.cpp @@ -109,17 +109,26 @@ void FileManager::InitMenu() menu_->addSeparator(); } -void FileManager::ShowPath(const QString& path) +void FileManager::ShowPath(const QString& path, const QStringList& drivers) { QMutexLocker locker(&cbMut_); + int existingIndex = ui->comboBox->findText(path); if (existingIndex != -1) { ui->comboBox->removeItem(existingIndex); } else if (ui->comboBox->count() >= 20) { ui->comboBox->removeItem(ui->comboBox->count() - 1); } - ui->comboBox->insertItem(0, path); + for (const auto& driver : drivers) { + if (ui->comboBox->findText(driver) == -1) { + ui->comboBox->insertItem(0, driver); + } + } + if (ui->comboBox->findText(path) == -1) { + ui->comboBox->insertItem(0, path); + } ui->comboBox->setCurrentIndex(0); + drivers_ = drivers; } void FileManager::ShowFile(const DirFileInfoVec& info) @@ -133,7 +142,7 @@ void FileManager::ShowFile(const DirFileInfoVec& info) RefreshTab(); ui->tableWidget->resizeColumnToContents(0); SetRoot(currentInfo_.root); - ShowPath(GetRoot()); + ShowPath(GetRoot(), drivers_); } void FileManager::SetRoot(const QString& path) @@ -479,7 +488,7 @@ void FileManager::evtUp() auto r = fileHelper_->GetDirFile(path); if (r) { SetRoot(path); - ShowPath(GetRoot()); + ShowPath(GetRoot(), drivers_); } } diff --git a/Gui/Control/FileControl.h b/Gui/Control/FileControl.h index 9a0efb8..d1497c0 100644 --- a/Gui/Control/FileControl.h +++ b/Gui/Control/FileControl.h @@ -46,7 +46,7 @@ signals: private: void InitControl(); void InitMenu(); - void ShowPath(const QString& path); + void ShowPath(const QString& path, const QStringList& drivers); void ShowFile(const DirFileInfoVec& info); void doubleClick(int row, int column); void SetRoot(const QString& path); @@ -70,6 +70,7 @@ private: ClientCore* cliCore_; QMutex cbMut_; QMutex tbMut_; + QStringList drivers_; QSet fileTypes_; QSet curSelectTypes_; DirFileInfoVec currentInfo_; diff --git a/Note/version.md b/Note/version.md index 32fdd91..ceb388b 100644 --- a/Note/version.md +++ b/Note/version.md @@ -8,6 +8,7 @@ | 序号 | 类型 | 内容 | 说明 | 基于版本 | 完成版本 | | :--: | :--: | ------------------------------------------------------------ | :--: | :------: | :------: | +| 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 | diff --git a/Util/LocalFile.cpp b/Util/LocalFile.cpp index 29eadc5..b8a9708 100644 --- a/Util/LocalFile.cpp +++ b/Util/LocalFile.cpp @@ -11,7 +11,7 @@ LocalFile::LocalFile(QObject* parent) : DirFileHelper(parent) bool LocalFile::GetHome() { auto home = Util::GetUserHome(); - emit sigHome(home); + emit sigHome(home, Util::GetLocalDrivers()); return true; } diff --git a/Util/Util.cpp b/Util/Util.cpp index 34ae38b..a1b765f 100644 --- a/Util/Util.cpp +++ b/Util/Util.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -154,6 +155,18 @@ QString Util::UUID() return QUuid::createUuid().toString().remove("{").remove("}"); } +QVector Util::GetLocalDrivers() +{ + QVector result; + auto drivers = QStorageInfo::mountedVolumes(); + for (const auto& driver : drivers) { + if (driver.isValid() && driver.isReady()) { + result.push_back(driver.rootPath()); + } + } + return result; +} + QString DirFileHelper::GetErr() const { return QString(); diff --git a/Util/Util.h b/Util/Util.h index 81c7cbf..f96bb3e 100644 --- a/Util/Util.h +++ b/Util/Util.h @@ -52,6 +52,7 @@ public: static bool FileExist(const QString& path); static bool DirExist(const QString& path, bool isFilePath); static QString UUID(); + static QVector GetLocalDrivers(); }; class DirFileHelper : public QObject @@ -65,7 +66,7 @@ public: QString GetErr() const; signals: - void sigHome(const QString& path); + void sigHome(const QString& path, const QStringList& drivers); void sigDirFile(const DirFileInfoVec& dirFile); protected: