mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-09-23 03:22:20 +08:00
修复快速从应用列表进入应用详情时的崩溃
正确地断开过期的信号,正确地处理过期的请求
This commit is contained in:
parent
6491b19f6e
commit
2e04d05b34
@ -148,6 +148,7 @@ namespace SpkUi
|
|||||||
void SpkPageAppDetails::ResourceAcquisitionFinished(int id, ResourceResult result)
|
void SpkPageAppDetails::ResourceAcquisitionFinished(int id, ResourceResult result)
|
||||||
{
|
{
|
||||||
QPixmap icon;
|
QPixmap icon;
|
||||||
|
// qDebug() << "PageAppDetails: Resource" << id << "acquired";
|
||||||
if(!id)
|
if(!id)
|
||||||
{
|
{
|
||||||
// id == 0, icon
|
// id == 0, icon
|
||||||
|
@ -97,6 +97,7 @@ namespace SpkUi
|
|||||||
void SpkPageAppList::ResourceAcquisitionFinished(int id, ResourceResult result)
|
void SpkPageAppList::ResourceAcquisitionFinished(int id, ResourceResult result)
|
||||||
{
|
{
|
||||||
QPixmap icon;
|
QPixmap icon;
|
||||||
|
// qDebug() << "PageAppList: Resource" << id << "acquired";
|
||||||
auto item = mAppItemList[id];
|
auto item = mAppItemList[id];
|
||||||
if(result.status == SpkResource::ResourceStatus::Ready)
|
if(result.status == SpkResource::ResourceStatus::Ready)
|
||||||
{
|
{
|
||||||
|
@ -74,7 +74,7 @@ void SpkResource::ResourceDownloaded()
|
|||||||
if(!QDir().mkpath(path))
|
if(!QDir().mkpath(path))
|
||||||
{
|
{
|
||||||
sWarn(tr("Cache directory \"%1\" cannot be created.").arg(path));
|
sWarn(tr("Cache directory \"%1\" cannot be created.").arg(path));
|
||||||
return;
|
goto ContinueNext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(writeCache.open(QFile::WriteOnly))
|
if(writeCache.open(QFile::WriteOnly))
|
||||||
@ -85,32 +85,41 @@ void SpkResource::ResourceDownloaded()
|
|||||||
else
|
else
|
||||||
sWarn("Save cache to \"" + cacheFile + "\" failed! Msg: " + writeCache.errorString());
|
sWarn("Save cache to \"" + cacheFile + "\" failed! Msg: " + writeCache.errorString());
|
||||||
|
|
||||||
|
qInfo() << "Resource " << reply->property("dest_file").toString() << " downloaded";
|
||||||
|
|
||||||
// Tell ResourceContext
|
// Tell ResourceContext
|
||||||
|
if(!reply->property("outdated").toBool())
|
||||||
AcquisitionFinish(id, ret);
|
AcquisitionFinish(id, ret);
|
||||||
|
|
||||||
|
ContinueNext:
|
||||||
// Start next possible mission
|
// Start next possible mission
|
||||||
TryBeginAwaitingTasks();
|
TryBeginAwaitingTasks();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpkResource::Acquire(SpkPageBase *dest, bool stopOngoing, bool clearQueue)
|
void SpkResource::Acquire(SpkPageBase *dest, bool stopOngoing, bool clearQueue)
|
||||||
{
|
{
|
||||||
if(stopOngoing)
|
|
||||||
{
|
|
||||||
for(auto &i : mWorkingRequests.keys())
|
for(auto &i : mWorkingRequests.keys())
|
||||||
{
|
{
|
||||||
// Don't let forced abort falsely report a finish signal. Disconnect them first.
|
// Don't let an outdated task falsely report a finish signal.
|
||||||
i->disconnect(i, &QNetworkReply::finished, this, &SpkResource::ResourceDownloaded);
|
// 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();
|
i->abort();
|
||||||
delete i;
|
delete i;
|
||||||
}
|
}
|
||||||
mWorkingRequests.clear();
|
|
||||||
|
|
||||||
|
if(stopOngoing)
|
||||||
|
{
|
||||||
|
mWorkingRequests.clear();
|
||||||
mRequestSemaphore->release(mMaximumConcurrent); // Release all semaphore users
|
mRequestSemaphore->release(mMaximumConcurrent); // Release all semaphore users
|
||||||
}
|
}
|
||||||
|
|
||||||
if(clearQueue)
|
if(clearQueue)
|
||||||
mAwaitingRequests.clear();
|
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,
|
connect(this, &SpkResource::AcquisitionFinish,
|
||||||
dest, &SpkPageBase::ResourceAcquisitionFinished,
|
dest, &SpkPageBase::ResourceAcquisitionFinished,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user