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,