diff options
-rw-r--r-- | src/network/network.cpp | 5 | ||||
-rw-r--r-- | src/network/network_gamelist.h | 2 | ||||
-rw-r--r-- | src/network/network_gui.cpp | 4 | ||||
-rw-r--r-- | src/network/network_query.cpp | 4 |
4 files changed, 13 insertions, 2 deletions
diff --git a/src/network/network.cpp b/src/network/network.cpp index 09b748fc5..109a2cce7 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -635,6 +635,7 @@ public: { NetworkGameList *item = NetworkGameListAddItem(connection_string); item->status = NGLS_OFFLINE; + item->refreshing = false; UpdateNetworkGameWindow(); } @@ -653,6 +654,10 @@ void NetworkQueryServer(const std::string &connection_string) { if (!_network_available) return; + /* Mark the entry as refreshing, so the GUI can show the refresh is pending. */ + NetworkGameList *item = NetworkGameListAddItem(connection_string); + item->refreshing = true; + new TCPQueryConnecter(connection_string); } diff --git a/src/network/network_gamelist.h b/src/network/network_gamelist.h index 24ce41bc8..1c4a68e5c 100644 --- a/src/network/network_gamelist.h +++ b/src/network/network_gamelist.h @@ -31,7 +31,7 @@ struct NetworkGameList { std::string connection_string; ///< Address of the server. NetworkGameListStatus status = NGLS_OFFLINE; ///< Stats of the server. bool manually = false; ///< True if the server was added manually. - uint8 retries = 0; ///< Number of retries (to stop requerying). + bool refreshing = false; ///< Whether this server is being queried. int version = 0; ///< Used to see which servers are no longer available on the Game Coordinator and can be removed. NetworkGameList *next = nullptr; ///< Next pointer to make a linked game list. }; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 03fd0ce5c..6bca0c756 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -613,6 +613,8 @@ public: sel->info.clients_on >= sel->info.clients_max || // Server full !sel->info.compatible); // Revision mismatch + this->SetWidgetLoweredState(WID_NG_REFRESH, sel != nullptr && sel->refreshing); + /* 'NewGRF Settings' button invisible if no NewGRF is used */ this->GetWidget<NWidgetStacked>(WID_NG_NEWGRF_SEL)->SetDisplayedPlane(sel == nullptr || sel->status != NGLS_ONLINE || sel->info.grfconfig == nullptr); this->GetWidget<NWidgetStacked>(WID_NG_NEWGRF_MISSING_SEL)->SetDisplayedPlane(sel == nullptr || sel->status != NGLS_ONLINE || sel->info.grfconfig == nullptr || !sel->info.version_compatible || sel->info.compatible); @@ -790,7 +792,7 @@ public: break; case WID_NG_REFRESH: // Refresh - if (this->server != nullptr) NetworkQueryServer(this->server->connection_string); + if (this->server != nullptr && !this->server->refreshing) NetworkQueryServer(this->server->connection_string); break; case WID_NG_NEWGRF: // NewGRF Settings diff --git a/src/network/network_query.cpp b/src/network/network_query.cpp index 033c32e7c..139daafe4 100644 --- a/src/network/network_query.cpp +++ b/src/network/network_query.cpp @@ -79,6 +79,7 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *p) { NetworkGameList *item = NetworkGameListAddItem(this->connection_string); item->status = NGLS_FULL; + item->refreshing = false; UpdateNetworkGameWindow(); @@ -89,6 +90,7 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet *p { NetworkGameList *item = NetworkGameListAddItem(this->connection_string); item->status = NGLS_BANNED; + item->refreshing = false; UpdateNetworkGameWindow(); @@ -107,6 +109,7 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet CheckGameCompatibility(item->info); /* Ensure we consider the server online. */ item->status = NGLS_ONLINE; + item->refreshing = false; UpdateNetworkGameWindow(); @@ -128,6 +131,7 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p) } else { item->status = NGLS_OFFLINE; } + item->refreshing = false; UpdateNetworkGameWindow(); |