From 8f2ef83be1b14dcc34a2290c5ac414365ee673e8 Mon Sep 17 00:00:00 2001 From: Koncord Date: Sat, 27 May 2017 13:08:52 +0800 Subject: [PATCH] [Browser] Fix QT warnings --- apps/browser/QueryHelper.cpp | 76 ++++++++++++++++++++---------------- apps/browser/QueryHelper.hpp | 10 ++++- 2 files changed, 50 insertions(+), 36 deletions(-) diff --git a/apps/browser/QueryHelper.cpp b/apps/browser/QueryHelper.cpp index 2155fea6d..ebaee99c2 100644 --- a/apps/browser/QueryHelper.cpp +++ b/apps/browser/QueryHelper.cpp @@ -9,14 +9,18 @@ QueryUpdate *queryUpdate; + QueryHelper::QueryHelper(QAbstractItemModel *model) { + qRegisterMetaType("QueryData"); queryThread = new QThread; queryUpdate = new QueryUpdate; - queryUpdate->_model = model; + _model = model; connect(queryThread, SIGNAL(started()), queryUpdate, SLOT(process())); connect(queryUpdate, SIGNAL(finished()), queryThread, SLOT(quit())); connect(queryUpdate, &QueryUpdate::finished, [this](){emit finished();}); + connect(queryUpdate, SIGNAL(updateModel(QString, unsigned short, QueryData)), + this, SLOT(update(QString, unsigned short, QueryData))); queryUpdate->moveToThread(queryThread); } @@ -31,44 +35,48 @@ void QueryHelper::terminate() queryThread->terminate(); } +void QueryHelper::update(QString addr, unsigned short port, QueryData data) +{ + ServerModel *model = ((ServerModel*)_model); + model->insertRow(model->rowCount()); + int row = model->rowCount() - 1; + + QModelIndex mi = model->index(row, ServerData::ADDR); + model->setData(mi, addr + ":" + QString::number(port)); + + mi = model->index(row, ServerData::PLAYERS); + model->setData(mi, (int)data.players.size()); + + mi = model->index(row, ServerData::MAX_PLAYERS); + model->setData(mi, data.GetMaxPlayers()); + + mi = model->index(row, ServerData::HOSTNAME); + model->setData(mi, data.GetName()); + + mi = model->index(row, ServerData::MODNAME); + model->setData(mi, data.GetGameMode()); + + mi = model->index(row, ServerData::VERSION); + model->setData(mi, data.GetVersion()); + + mi = model->index(row, ServerData::PASSW); + model->setData(mi, data.GetPassword() == 1); + + mi = model->index(row, ServerData::PING); + model->setData(mi, PING_UNREACHABLE); + PingHelper::Get().Add(row, {addr, port}); +} + void QueryUpdate::process() { auto data = QueryClient::Get().Query(); if(QueryClient::Get().Status() != ID_MASTER_QUERY) - return; - - ServerModel *model = ((ServerModel*)_model); - model->removeRows(0, model->rowCount()); - for(auto server : data) { - model->insertRow(model->rowCount()); - int row = model->rowCount() - 1; - - QModelIndex mi = model->index(row, ServerData::ADDR); - model->setData(mi, server.first.ToString(true, ':')); - - mi = model->index(row, ServerData::PLAYERS); - model->setData(mi, (int)server.second.players.size()); - - mi = model->index(row, ServerData::MAX_PLAYERS); - model->setData(mi, server.second.GetMaxPlayers()); - - mi = model->index(row, ServerData::HOSTNAME); - model->setData(mi, server.second.GetName()); - - mi = model->index(row, ServerData::MODNAME); - model->setData(mi, server.second.GetGameMode()); - - mi = model->index(row, ServerData::VERSION); - model->setData(mi, server.second.GetVersion()); - - mi = model->index(row, ServerData::PASSW); - model->setData(mi, server.second.GetPassword() == 1); - - mi = model->index(row, ServerData::PING); - model->setData(mi, PING_UNREACHABLE); - - PingHelper::Get().Add(row, {server.first.ToString(false), server.first.GetPort()}); + emit finished(); + return; } + + for(auto server : data) + emit updateModel(server.first.ToString(false), server.first.GetPort(), server.second); emit finished(); } diff --git a/apps/browser/QueryHelper.hpp b/apps/browser/QueryHelper.hpp index b7ac16cda..6932670cd 100644 --- a/apps/browser/QueryHelper.hpp +++ b/apps/browser/QueryHelper.hpp @@ -8,7 +8,11 @@ #include +#include #include +#include + +Q_DECLARE_METATYPE(QueryData) class QueryHelper : public QObject { @@ -18,11 +22,14 @@ public: public slots: void refresh(); void terminate(); +private slots: + void update(QString addr, unsigned short port, QueryData data); signals: void finished(); void started(); private: QThread *queryThread; + QAbstractItemModel *_model; }; class QueryUpdate : public QObject @@ -31,10 +38,9 @@ class QueryUpdate : public QObject Q_OBJECT signals: void finished(); + void updateModel(QString addr, unsigned short port, QueryData data); public slots: void process(); -private: - QAbstractItemModel *_model; }; #endif //OPENMW_QUERYHELPER_HPP \ No newline at end of file