From 2e04d05b34fe34d44e7234ca71bf59c19f93b566 Mon Sep 17 00:00:00 2001
From: RigoLigoRLC <rigoligo03@gmail.com>
Date: Thu, 2 Dec 2021 18:20:28 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BF=AB=E9=80=9F=E4=BB=8E?=
=?UTF-8?q?=E5=BA=94=E7=94=A8=E5=88=97=E8=A1=A8=E8=BF=9B=E5=85=A5=E5=BA=94?=
=?UTF-8?q?=E7=94=A8=E8=AF=A6=E6=83=85=E6=97=B6=E7=9A=84=E5=B4=A9=E6=BA=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
正确地断开过期的信号,正确地处理过期的请求
---
gui/page/spkpageappdetails.cpp | 1 +
gui/page/spkpageapplist.cpp | 1 +
src/spkresource.cpp | 31 ++++++++++++++++++++-----------
3 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/gui/page/spkpageappdetails.cpp b/gui/page/spkpageappdetails.cpp
index 55f7bbc..a613436 100644
--- a/gui/page/spkpageappdetails.cpp
+++ b/gui/page/spkpageappdetails.cpp
@@ -148,6 +148,7 @@ namespace SpkUi
void SpkPageAppDetails::ResourceAcquisitionFinished(int id, ResourceResult result)
{
QPixmap icon;
+// qDebug() << "PageAppDetails: Resource" << id << "acquired";
if(!id)
{
// id == 0, icon
diff --git a/gui/page/spkpageapplist.cpp b/gui/page/spkpageapplist.cpp
index 7b22297..17045d5 100644
--- a/gui/page/spkpageapplist.cpp
+++ b/gui/page/spkpageapplist.cpp
@@ -97,6 +97,7 @@ namespace SpkUi
void SpkPageAppList::ResourceAcquisitionFinished(int id, ResourceResult result)
{
QPixmap icon;
+// qDebug() << "PageAppList: Resource" << id << "acquired";
auto item = mAppItemList[id];
if(result.status == SpkResource::ResourceStatus::Ready)
{
diff --git a/src/spkresource.cpp b/src/spkresource.cpp
index 22ecccc..43f62bc 100644
--- a/src/spkresource.cpp
+++ b/src/spkresource.cpp
@@ -74,7 +74,7 @@ void SpkResource::ResourceDownloaded()
if(!QDir().mkpath(path))
{
sWarn(tr("Cache directory \"%1\" cannot be created.").arg(path));
- return;
+ goto ContinueNext;
}
}
if(writeCache.open(QFile::WriteOnly))
@@ -85,32 +85,41 @@ void SpkResource::ResourceDownloaded()
else
sWarn("Save cache to \"" + cacheFile + "\" failed! Msg: " + writeCache.errorString());
+ qInfo() << "Resource " << reply->property("dest_file").toString() << " downloaded";
+
// Tell ResourceContext
- AcquisitionFinish(id, ret);
+ if(!reply->property("outdated").toBool())
+ AcquisitionFinish(id, ret);
+
+ContinueNext:
// Start next possible mission
TryBeginAwaitingTasks();
}
void SpkResource::Acquire(SpkPageBase *dest, bool stopOngoing, bool clearQueue)
{
+ for(auto &i : mWorkingRequests.keys())
+ {
+ // Don't let an outdated task falsely report a finish signal.
+ // This is the designed way of stopping it from emitting a finish signal
+ i->setProperty("outdated", true);
+ // And abort as requested.
+ if(stopOngoing)
+ i->abort();
+ delete i;
+ }
+
if(stopOngoing)
{
- for(auto &i : mWorkingRequests.keys())
- {
- // Don't let forced abort falsely report a finish signal. Disconnect them first.
- i->disconnect(i, &QNetworkReply::finished, this, &SpkResource::ResourceDownloaded);
- i->abort();
- delete i;
- }
mWorkingRequests.clear();
-
mRequestSemaphore->release(mMaximumConcurrent); // Release all semaphore users
}
if(clearQueue)
mAwaitingRequests.clear();
- disconnect(this, SLOT(AcquisitionFinish(int, ResourceResult)));
+ auto discResult = disconnect(this, SIGNAL(AcquisitionFinish(int, ResourceResult)), nullptr, nullptr);
+// qDebug() << "SpkResource: Acquisition disconnection" << (discResult ? "success" : "failure");
connect(this, &SpkResource::AcquisitionFinish,
dest, &SpkPageBase::ResourceAcquisitionFinished,