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: