abort current query task if present when refreshing
This commit is contained in:
parent
3fb6764ea4
commit
ae7d3379e4
1 changed files with 19 additions and 5 deletions
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue