mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-12-16 17:11:37 +08:00
实现垃圾文件计数和清理
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
|
||||
#include <QtConcurrent/QtConcurrentRun>
|
||||
#include <QMutexLocker>
|
||||
#include <QFutureWatcher>
|
||||
#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<void>::finished,
|
||||
this, &SpkPageSettings::CleanedResource);
|
||||
connect(&mFwResourceCount, &QFutureWatcher<void>::finished,
|
||||
this, &SpkPageSettings::CountFinishResource);
|
||||
connect(&mFwDownloadClean, &QFutureWatcher<void>::finished,
|
||||
this, &SpkPageSettings::CleanedDownload);
|
||||
connect(&mFwDownloadCount, &QFutureWatcher<void>::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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Download path</string>
|
||||
<string>Download path*</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
Reference in New Issue
Block a user