From 3bd76b865d8c4c2f2bdd70945e5502a6e8009598 Mon Sep 17 00:00:00 2001 From: RigoLigoRLC Date: Wed, 20 Apr 2022 14:53:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=9E=83=E5=9C=BE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E8=AE=A1=E6=95=B0=E5=92=8C=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gui/page/spkpagesettings.cpp | 153 ++++++++++++++++++++++++++++++++--- gui/page/ui/settings.ui | 2 +- gui/spkstretchlayout.cpp | 4 +- inc/page/spkpagesettings.h | 22 ++++- lang/zh.ts | 36 +++++++-- 5 files changed, 198 insertions(+), 19 deletions(-) diff --git a/gui/page/spkpagesettings.cpp b/gui/page/spkpagesettings.cpp index 0b4f884..fb44d05 100644 --- a/gui/page/spkpagesettings.cpp +++ b/gui/page/spkpagesettings.cpp @@ -1,4 +1,7 @@ +#include +#include +#include #include "spkutils.h" #include "page/spkpagesettings.h" #include "spkmsgbox.h" @@ -11,9 +14,9 @@ namespace SpkUi mMainArea = new QScrollArea(); mMainLay = new QVBoxLayout(this); mSettingsWidget = new QWidget(this); - mSettingsUi = new Ui::SpkUiSettings; + ui = new Ui::SpkUiSettings; - mSettingsUi->setupUi(mSettingsWidget); + ui->setupUi(mSettingsWidget); mMainLay->addWidget(mMainArea); @@ -23,6 +26,25 @@ namespace SpkUi CFG->BindField("url/repo", &this->mRepoListUrl, "https://d.store.deepinos.org.cn/store/server.list"); + mBytesDownloads = mBytesResource = -1; + + connect(&mFwResourceClean, &QFutureWatcher::finished, + this, &SpkPageSettings::CleanedResource); + connect(&mFwResourceCount, &QFutureWatcher::finished, + this, &SpkPageSettings::CountFinishResource); + connect(&mFwDownloadClean, &QFutureWatcher::finished, + this, &SpkPageSettings::CleanedDownload); + connect(&mFwDownloadCount, &QFutureWatcher::finished, + this, &SpkPageSettings::CountFinishDownload); + connect(ui->btnViewDownloadedContent, &QPushButton::clicked, + this, &SpkPageSettings::on_btnViewDownloadedContent_clicked); + connect(ui->btnViewResourceCache, &QPushButton::clicked, + this, &SpkPageSettings::on_btnViewResourceCache_clicked); + connect(ui->btnCleanDownloadedContent, &QPushButton::clicked, + this, &SpkPageSettings::on_btnCleanDownloadedContent_clicked); + connect(ui->btnCleanResourceCache, &QPushButton::clicked, + this, &SpkPageSettings::on_btnCleanResourceCache_clicked); + SetupUi(); } @@ -33,8 +55,6 @@ namespace SpkUi void SpkPageSettings::SetupUi() { - auto ui = mSettingsUi; - ui->lblSettingsTitle->setObjectName("styConfTitle"); ui->lblCleanup->setObjectName("styConfTitle"); ui->lblAdvanced->setObjectName("styConfTitle"); @@ -45,8 +65,6 @@ namespace SpkUi void SpkPageSettings::ReadConfiguration() { - auto ui = mSettingsUi; - ui->spnConcurrentResDownloads->setValue(CFG->ReadField("resource/concurrent", 5).toInt()); ui->edtApiUrl->setText(CFG->ReadField("url/api", "").toString()); ui->edtResourceUrl->setText(CFG->ReadField("url/res", "").toString()); @@ -60,8 +78,6 @@ namespace SpkUi void SpkPageSettings::SaveConfiguration() { - auto ui = mSettingsUi; - CFG->SetSettings("resource/concurrent", ui->spnConcurrentResDownloads->value()); CFG->SetField("url/api", ui->edtApiUrl->text()); CFG->SetField("url/res", ui->edtResourceUrl->text()); @@ -69,7 +85,6 @@ namespace SpkUi CFG->SetField("dirs/download", ui->edtDownloadPath->text()); CFG->SetSettings("internal/qss_path", ui->edtQssPath->text()); CFG->SetField("url/repo", ui->edtRepoListUrl->text()); - if(!CFG->SetField("download/servers", ui->edtDownloadServers->toPlainText())) SpkMsgBox::StaticExec(tr("Cannot change distribution servers.\n" "There's probably still downloads going on."), @@ -83,8 +98,128 @@ namespace SpkUi QMessageBox::Warning); } + void SpkPageSettings::CountCleaning() + { + ui->lblSizeDownloadedContent->setText(tr("Counting...")); + ui->lblSizeResourceCache->setText(tr("Counting...")); + auto futureDownload = QtConcurrent::run([&]() + { + QDirIterator itr(ui->edtDownloadPath->text().replace('*', QDir::homePath()), + QDirIterator::Subdirectories); + if(mMutDownload.tryLock(0)) + { + int64_t size = 0; + while(itr.hasNext()) + { + QFile f(itr.next()); + size += f.size(); + } + mBytesDownloads = size; + mMutDownload.unlock(); + } + }); + auto futureResource = QtConcurrent::run([&]() + { + QDirIterator itr(ui->edtResourceCachePath->text().replace('*', QDir::homePath()), + QDirIterator::Subdirectories); + if(mMutResource.tryLock((0))) + { + int64_t size = 0; + while(itr.hasNext()) + { + QFile f(itr.next()); + size += f.size(); + } + mBytesResource = size; + mMutResource.unlock(); + } + }); + mFwDownloadCount.setFuture(futureDownload); + mFwResourceCount.setFuture(futureResource); + } + + void SpkPageSettings::CleanedResource() + { + ui->lblSizeResourceCache->setText(tr("Cleaned")); + } + + void SpkPageSettings::CleanedDownload() + { + ui->lblSizeDownloadedContent->setText(tr("Cleaned")); + } + void SpkPageSettings::Activated() { ReadConfiguration(); + CountCleaning(); } + + void SpkPageSettings::CountFinishResource() + { + if(mBytesResource >= 0) + ui->lblSizeResourceCache->setText(SpkUtils::BytesToSize(mBytesResource)); + } + + void SpkPageSettings::CountFinishDownload() + { + if(mBytesDownloads >= 0) + ui->lblSizeDownloadedContent->setText(SpkUtils::BytesToSize(mBytesDownloads)); + } + + void SpkPageSettings::on_btnViewResourceCache_clicked() + { + QDesktopServices::openUrl(ui->edtResourceCachePath->text().replace('*', QDir::homePath())); + } + + void SpkPageSettings::on_btnViewDownloadedContent_clicked() + { + QDesktopServices::openUrl(ui->edtDownloadPath->text().replace('*', QDir::homePath())); + } + + +void SpkPageSettings::on_btnCleanResourceCache_clicked() +{ + ui->lblSizeResourceCache->setText(tr("Cleaning...")); + auto future = QtConcurrent::run([&]() + { + QDirIterator itr(ui->edtResourceCachePath->text().replace('*', QDir::homePath()), + QDirIterator::Subdirectories); + if(mMutDownload.tryLock(0)) + { + int64_t size = 0; + while(itr.hasNext()) + { + QFile f(itr.next()); + f.remove(); + } + mBytesDownloads = size; + mMutDownload.unlock(); + } + }); + mFwResourceClean.setFuture(future); +} + + +void SpkPageSettings::on_btnCleanDownloadedContent_clicked() +{ + ui->lblSizeDownloadedContent->setText(tr("Cleaning...")); + auto futureDownload = QtConcurrent::run([&]() + { + QDirIterator itr(ui->edtDownloadPath->text().replace('*', QDir::homePath()), + QDirIterator::Subdirectories); + if(mMutDownload.tryLock(0)) + { + int64_t size = 0; + while(itr.hasNext()) + { + QFile f(itr.next()); + f.remove(); + } + mBytesDownloads = size; + mMutDownload.unlock(); + } + }); + mFwDownloadClean.setFuture(futureDownload); +} + } diff --git a/gui/page/ui/settings.ui b/gui/page/ui/settings.ui index 37ac613..2632042 100644 --- a/gui/page/ui/settings.ui +++ b/gui/page/ui/settings.ui @@ -236,7 +236,7 @@ -1 - Download path + Download path* diff --git a/gui/spkstretchlayout.cpp b/gui/spkstretchlayout.cpp index 035eae2..0783f33 100644 --- a/gui/spkstretchlayout.cpp +++ b/gui/spkstretchlayout.cpp @@ -49,7 +49,7 @@ QLayoutItem *SpkStretchLayout::itemAt(int i) const QLayoutItem *SpkStretchLayout::takeAt(int i) { - return i >=0 && i < mItems.size() ? mItems.takeAt(i) : nullptr; + return i >= 0 && i < mItems.size() ? mItems.takeAt(i) : nullptr; } void SpkStretchLayout::setGeometry(const QRect &rect) @@ -87,4 +87,6 @@ void SpkStretchLayout::setGeometry(const QRect &rect) (i / countPerLine) * (size.height() + spacing()) + spc + origin.y()); o->setGeometry(geo); } + +// qDebug() << rect; } diff --git a/inc/page/spkpagesettings.h b/inc/page/spkpagesettings.h index af67861..1ddac7a 100644 --- a/inc/page/spkpagesettings.h +++ b/inc/page/spkpagesettings.h @@ -3,6 +3,8 @@ #include #include +#include +#include #include "page/spkpagebase.h" #include "ui_settings.h" @@ -20,17 +22,35 @@ namespace SpkUi void ReadConfiguration(); void SaveConfiguration(); + void CountCleaning(); + virtual void Activated() override; private slots: + void on_btnCleanDownloadedContent_clicked(); + void on_btnCleanResourceCache_clicked(); + void on_btnViewDownloadedContent_clicked(); + void on_btnViewResourceCache_clicked(); + + void CountFinishResource(); + void CountFinishDownload(); + void CleanedResource(); + void CleanedDownload(); private: QScrollArea *mMainArea; QVBoxLayout *mMainLay; QWidget *mSettingsWidget; - Ui::SpkUiSettings *mSettingsUi; + Ui::SpkUiSettings *ui; QString mRepoListUrl; + QFutureWatcher mFwResourceCount, + mFwDownloadCount, + mFwResourceClean, + mFwDownloadClean; + QMutex mMutResource, mMutDownload; + int64_t mBytesResource, mBytesDownloads; + }; } diff --git a/lang/zh.ts b/lang/zh.ts index ca53d7c..66d3408 100644 --- a/lang/zh.ts +++ b/lang/zh.ts @@ -408,7 +408,7 @@ Right now we are not just a Chinese group. We are discovering our way into more Image Preview - + 图片预览 @@ -798,29 +798,47 @@ to use terminal for program output. SpkUi::SpkPageSettings - + Cannot change distribution servers. There's probably still downloads going on. 无法更改分发服务器。 可能是因为还有下载正在进行。 - + Cannot set distribution server 无法设置分发服务器 - + Auto mode can only be used when DDE plugin is loaded. Option change is not applied. 自动模式只能在DDE插件加载时使用。 选项更改未应用。 - + Cannot set theme mode 无法设置主题模式 + + + + Counting... + 正在统计…… + + + + + Cleaned + 已清理 + + + + + Cleaning... + 清理中…… + SpkUi::SpkPopup @@ -939,11 +957,15 @@ Option change is not applied. Manual 手动 + + Download path + 下载路径 + - Download path - 下载路径 + Download path* + 下载路径*