mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-04-27 07:48:01 -07:00
* refactored cardzone.cpp, added doc and changed if to switch case * started moving every files into different folders * remove undercase to match with other files naming convention * refactored dialog files * ran format.sh * refactored client/tabs folder * refactored client/tabs folder * refactored client/tabs folder * refactored client folder * refactored carddbparser * refactored dialogs * Create sonar-project.properties temporary file for lint * Create build.yml temporary file for lint * removed all files from root directory * removed all files from root directory * added current branch to workflow * fixed most broken import * fixed issues while renaming files * fixed oracle importer * fixed dbconverter * updated translations * made sub-folders for client * removed linter * removed linter folder * fixed oracle import * revert card_zone documentation * renamed db parser files name and deck_view imports * fixed dlg file issue * ran format file and fixed test file * fixed carddb test files * moved player folder in game * updated translations and format files * fixed peglib import * format cmake files * removing vcpkg to try to add it back later * tried fixing vcpkg file * renamed filter to filters and moved database parser to cards folder * reverted translation files * reverted oracle translated * Update cockatrice/src/dialogs/dlg_register.cpp Co-authored-by: tooomm <tooomm@users.noreply.github.com> * Update cockatrice/src/client/ui/window_main.cpp Co-authored-by: tooomm <tooomm@users.noreply.github.com> * removed empty line at file start * removed useless include from tab_supervisor.cpp * refactored cardzone.cpp, added doc and changed if to switch case * started moving every files into different folders * remove undercase to match with other files naming convention * refactored dialog files * ran format.sh * refactored client/tabs folder * refactored client folder * refactored carddbparser * refactored dialogs * removed all files from root directory * Create sonar-project.properties temporary file for lint * Create build.yml temporary file for lint * added current branch to workflow * fixed most broken import * fixed issues while renaming files * fixed oracle importer * fixed dbconverter * updated translations * made sub-folders for client * removed linter * removed linter folder * fixed oracle import * revert card_zone documentation * renamed db parser files name and deck_view imports * fixed dlg file issue * ran format file and fixed test file * fixed carddb test files * moved player folder in game * updated translations and format files * fixed peglib import * reverted translation files * format cmake files * removing vcpkg to try to add it back later * tried fixing vcpkg file * pre-updating of cockatrice changes * removed empty line at file start * reverted oracle translated * Update cockatrice/src/dialogs/dlg_register.cpp Co-authored-by: tooomm <tooomm@users.noreply.github.com> * Update cockatrice/src/client/ui/window_main.cpp Co-authored-by: tooomm <tooomm@users.noreply.github.com> * removed useless include from tab_supervisor.cpp --------- Co-authored-by: tooomm <tooomm@users.noreply.github.com>
110 lines
3.8 KiB
C++
110 lines
3.8 KiB
C++
#include "handle_public_servers.h"
|
|
|
|
#include "../settings/cache_settings.h"
|
|
|
|
#include <QJsonDocument>
|
|
#include <QMessageBox>
|
|
#include <QNetworkAccessManager>
|
|
#include <QNetworkReply>
|
|
#include <QUrl>
|
|
|
|
#define PUBLIC_SERVERS_JSON "https://cockatrice.github.io/public-servers.json"
|
|
|
|
HandlePublicServers::HandlePublicServers(QObject *parent)
|
|
: QObject(parent), nam(new QNetworkAccessManager(this)), reply(nullptr)
|
|
{
|
|
}
|
|
|
|
void HandlePublicServers::downloadPublicServers()
|
|
{
|
|
QUrl url(QString(PUBLIC_SERVERS_JSON));
|
|
reply = nam->get(QNetworkRequest(url));
|
|
connect(reply, SIGNAL(finished()), this, SLOT(actFinishParsingDownloadedData()));
|
|
}
|
|
|
|
void HandlePublicServers::actFinishParsingDownloadedData()
|
|
{
|
|
reply = dynamic_cast<QNetworkReply *>(sender());
|
|
QNetworkReply::NetworkError errorCode = reply->error();
|
|
|
|
if (errorCode == QNetworkReply::NoError) {
|
|
// Get current saved hosts
|
|
UserConnection_Information uci;
|
|
savedHostList = uci.getServerInfo();
|
|
|
|
// Downloaded data from GitHub
|
|
QJsonParseError parseError{};
|
|
QJsonDocument jsonResponse = QJsonDocument::fromJson(reply->readAll(), &parseError);
|
|
if (parseError.error == QJsonParseError::NoError) {
|
|
QVariantMap jsonMap = jsonResponse.toVariant().toMap();
|
|
updateServerINISettings(jsonMap);
|
|
} else {
|
|
qDebug() << "[PUBLIC SERVER HANDLER]"
|
|
<< "JSON Parsing Error:" << parseError.errorString();
|
|
emit sigPublicServersDownloadedUnsuccessfully(errorCode);
|
|
}
|
|
} else {
|
|
qDebug() << "[PUBLIC SERVER HANDLER]"
|
|
<< "Error Downloading Public Servers" << errorCode;
|
|
emit sigPublicServersDownloadedUnsuccessfully(errorCode);
|
|
}
|
|
|
|
reply->deleteLater(); // After an emit() occurs, this object will be deleted
|
|
}
|
|
|
|
void HandlePublicServers::updateServerINISettings(QMap<QString, QVariant> jsonMap)
|
|
{
|
|
// Servers available
|
|
auto publicServersJSONList = jsonMap["servers"].toList();
|
|
|
|
for (const auto &server : publicServersJSONList) {
|
|
// Data inside one server at a time
|
|
// server: [{ ... }, ..., { ... }]
|
|
const auto serverMap = server.toMap();
|
|
|
|
QString serverAddress = serverMap["host"].toString();
|
|
|
|
if (serverMap["isInactive"].toBool()) {
|
|
publicServersToRemove.append(serverAddress);
|
|
continue;
|
|
}
|
|
|
|
QString serverName = serverMap["name"].toString();
|
|
QString serverPort = serverMap["port"].toString();
|
|
QString serverSite = serverMap["site"].toString();
|
|
|
|
if (serverMap.contains("websocketPort")) {
|
|
serverPort = serverMap["websocketPort"].toString();
|
|
}
|
|
|
|
bool serverFound = false;
|
|
for (const auto &iter : savedHostList) {
|
|
// If the URL/IP matches
|
|
if (iter.second.getServer() == serverAddress) {
|
|
serverFound = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (serverFound) {
|
|
SettingsCache::instance().servers().updateExistingServerWithoutLoss(serverName, serverAddress, serverPort,
|
|
serverSite);
|
|
} else {
|
|
SettingsCache::instance().servers().addNewServer(serverName, serverAddress, serverPort, "", "", false,
|
|
serverSite);
|
|
}
|
|
}
|
|
|
|
// If a server was removed from the public list,
|
|
// we will delete it from the local system.
|
|
// Will not delete "unofficial" servers
|
|
for (const auto &pair : savedHostList) {
|
|
QString serverAddr = pair.first;
|
|
|
|
if (publicServersToRemove.indexOf(serverAddr) != -1) {
|
|
SettingsCache::instance().servers().removeServer(serverAddr);
|
|
}
|
|
}
|
|
|
|
emit sigPublicServersDownloadedSuccessfully();
|
|
}
|