NOISSUE Fix edgecase where new searches won't be processed
This resolves an issue with the modpacks.ch search functionality, in which a search issued while one is currently in progress won't be made and the UI won't allow for the search to be made after. Reproduction Steps: 1. Open the FTB pane in the Add Instance Dialog 2. Perform a search while MMC is still performing the initial search The search won't be performed, the existing search will have been aborted, and you are unable to try the search again (without trying a different search in the meantime). This was caused by 2 things: 1. A search cannot be re-attempted, and this logic doesn't consider failures. 2. The failure slot wasn't called when the NetJob was aborted, so the search would never be performed - but the term would be stored as if it had (trigering point 1). I have resolved this by doing 2 things: 1. If the failure slot is called, set a searchState of Failed. Allow search re-attempts in this case. 2. If there is a present NetJob, abort and reset it. The immediately continue with the search.
This commit is contained in:
parent
73af0f271a
commit
8e6400e8d8
@ -106,21 +106,22 @@ void ListModel::getLogo(const QString &logo, const QString &logoUrl, LogoCallbac
|
|||||||
|
|
||||||
void ListModel::searchWithTerm(const QString &term)
|
void ListModel::searchWithTerm(const QString &term)
|
||||||
{
|
{
|
||||||
if(currentSearchTerm == term && currentSearchTerm.isNull() == term.isNull()) {
|
if(searchState != Failed && currentSearchTerm == term && currentSearchTerm.isNull() == term.isNull()) {
|
||||||
|
// unless the search has failed, then there is no need to perform an identical search.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
currentSearchTerm = term;
|
currentSearchTerm = term;
|
||||||
|
|
||||||
if(jobPtr) {
|
if(jobPtr) {
|
||||||
jobPtr->abort();
|
jobPtr->abort();
|
||||||
searchState = ResetRequested;
|
jobPtr.reset();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
modpacks.clear();
|
modpacks.clear();
|
||||||
endResetModel();
|
endResetModel();
|
||||||
searchState = None;
|
searchState = None;
|
||||||
}
|
|
||||||
performSearch();
|
performSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,15 +155,7 @@ void ListModel::searchRequestFailed(QString reason)
|
|||||||
jobPtr.reset();
|
jobPtr.reset();
|
||||||
remainingPacks.clear();
|
remainingPacks.clear();
|
||||||
|
|
||||||
if(searchState == ResetRequested) {
|
searchState = Failed;
|
||||||
beginResetModel();
|
|
||||||
modpacks.clear();
|
|
||||||
endResetModel();
|
|
||||||
|
|
||||||
performSearch();
|
|
||||||
} else {
|
|
||||||
searchState = Finished;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ListModel::requestPack()
|
void ListModel::requestPack()
|
||||||
|
@ -57,7 +57,8 @@ private:
|
|||||||
None,
|
None,
|
||||||
CanPossiblyFetchMore,
|
CanPossiblyFetchMore,
|
||||||
ResetRequested,
|
ResetRequested,
|
||||||
Finished
|
Finished,
|
||||||
|
Failed,
|
||||||
} searchState = None;
|
} searchState = None;
|
||||||
NetJobPtr jobPtr;
|
NetJobPtr jobPtr;
|
||||||
int currentPack;
|
int currentPack;
|
||||||
|
Loading…
Reference in New Issue
Block a user