mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-21 09:05:10 -07:00
[PublicDecks] Drop stale deck-list replies after the loading timeout
A reply that lands after its own loading timeout (the reverse of the ping sweep dropping the command) could stop the newer request's timeout timer and repaint the grid with out-of-date data. Each refresh now captures a monotonically increasing request id, and only the newest request's reply updates the grid.
This commit is contained in:
parent
cafc1df171
commit
2d15529d48
2 changed files with 13 additions and 1 deletions
|
|
@ -131,12 +131,23 @@ void RemotePublicDecksModel::refresh(const QString &userName)
|
|||
if (loading) {
|
||||
return;
|
||||
}
|
||||
// Every refresh captures its own request id so a reply that lands after its
|
||||
// loading timeout (the reverse of the ping sweep dropping the command) is
|
||||
// recognised as stale: it must not stop the newer request's timer or paint
|
||||
// the grid with out-of-date data.
|
||||
const int seq = ++requestSequence;
|
||||
setLoading(true);
|
||||
loadingTimeoutTimer->start();
|
||||
Command_DeckListOtherUser cmd;
|
||||
cmd.set_user_name(userName.toStdString());
|
||||
PendingCommand *pend = client->prepareSessionCommand(cmd);
|
||||
connect(pend, &PendingCommand::finished, this, &RemotePublicDecksModel::decksReceived);
|
||||
connect(pend, &PendingCommand::finished, this,
|
||||
[this, seq](const Response &response, const CommandContainer &commandContainer) {
|
||||
if (seq != requestSequence) {
|
||||
return; // a newer refresh superseded this one
|
||||
}
|
||||
decksReceived(response, commandContainer);
|
||||
});
|
||||
client->sendCommand(pend);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -117,6 +117,7 @@ private:
|
|||
QList<DeckEntry> decks;
|
||||
QList<int> visibleIndices; ///< Row indices into `decks` that pass the current filters.
|
||||
bool loading = false;
|
||||
int requestSequence = 0; ///< Monotonically increases per refresh; only the newest request may update the grid.
|
||||
|
||||
QString searchText;
|
||||
VisualDeckStorageSortFilterProxyModel::FilterMode colorFilterMode = VisualDeckStorageSortFilterProxyModel::Includes;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue