abort current query task if present when refreshing

This commit is contained in:
iTrooz 2024-11-29 00:39:43 +01:00
parent 3fb6764ea4
commit ae7d3379e4
No known key found for this signature in database
GPG key ID: 8B83F77667B1BC6A

View file

@ -450,12 +450,18 @@ class ServersModel : public QAbstractListModel {
void queryServersStatus() void queryServersStatus()
{ {
auto *job = new ConcurrentTask("Query servers status", APPLICATION->settings()->get("NumberOfConcurrentTasks").toInt()); // Abort the currently running task if present
if (currentQueryTask != nullptr) {
currentQueryTask->abort();
qDebug() << "Aborted previous server query task";
}
currentQueryTask = new ConcurrentTask("Query servers status", APPLICATION->settings()->get("NumberOfConcurrentTasks").toInt());
int row = 0; int row = 0;
for (Server &server : m_servers) { for (Server &server : m_servers) {
auto [domain, port] = server.splitAddress(); auto [domain, port] = server.splitAddress();
auto *task = new ServerPingTask(domain, port); auto *task = new ServerPingTask(domain, port);
job->addTask(Task::Ptr(task)); currentQueryTask->addTask(Task::Ptr(task));
connect(task, &Task::finished, this, [this, task, row, &server]() { connect(task, &Task::finished, this, [this, task, row, &server]() {
server.m_currentPlayers = task->m_outputOnlinePlayers; server.m_currentPlayers = task->m_outputOnlinePlayers;
emit dataChanged(index(row, 0), index(row, COLUMN_COUNT - 1)); emit dataChanged(index(row, 0), index(row, COLUMN_COUNT - 1));
@ -463,11 +469,18 @@ class ServersModel : public QAbstractListModel {
row++; row++;
} }
connect(job, &ConcurrentTask::finished, [job]() { // make task delete itself when done
job->deleteLater(); auto *c = currentQueryTask;
connect(currentQueryTask, &ConcurrentTask::finished, [c]() {
c->deleteLater();
}); });
job->start(); // Also delete it from the model, if the model itself hasn't been deleted
connect(currentQueryTask, &ConcurrentTask::finished, this, [this, c]() {
if (c == currentQueryTask) currentQueryTask = nullptr;
});
currentQueryTask->start();
} }
public slots: public slots:
@ -557,6 +570,7 @@ class ServersModel : public QAbstractListModel {
QList<Server> m_servers; QList<Server> m_servers;
QFileSystemWatcher* m_watcher = nullptr; QFileSystemWatcher* m_watcher = nullptr;
QTimer m_saveTimer; QTimer m_saveTimer;
ConcurrentTask *currentQueryTask = nullptr;
}; };
ServersPage::ServersPage(InstancePtr inst, QWidget* parent) : QMainWindow(parent), ui(new Ui::ServersPage) ServersPage::ServersPage(InstancePtr inst, QWidget* parent) : QMainWindow(parent), ui(new Ui::ServersPage)