summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/Makefile.am1
-rw-r--r--src/gui/windows/serverdialog.cpp51
-rw-r--r--src/net/serverinfo.h11
-rw-r--r--src/net/serverurlinfo.h49
5 files changed, 112 insertions, 1 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8baf3b537..e82b73366 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -581,6 +581,7 @@ SET(SRCS
net/sdltcpnet.h
net/serverfeatures.h
net/serverinfo.h
+ net/serverurlinfo.h
net/skillhandler.h
net/tradehandler.h
net/updatetypeoperators.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 0be6ca0cc..c16c71395 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1516,6 +1516,7 @@ SRC = ${BASE_SRC} \
net/recvpacketdefine.h \
net/serverfeatures.h \
net/serverinfo.h \
+ net/serverurlinfo.h \
net/skillhandler.h \
net/tradehandler.h \
net/updatetypeoperators.cpp \
diff --git a/src/gui/windows/serverdialog.cpp b/src/gui/windows/serverdialog.cpp
index 89a4774ee..6192f040d 100644
--- a/src/gui/windows/serverdialog.cpp
+++ b/src/gui/windows/serverdialog.cpp
@@ -244,6 +244,8 @@ void ServerDialog::connectToSelectedServer()
mServerInfo->updateMirrors = server.updateMirrors;
mServerInfo->packetVersion = server.packetVersion;
mServerInfo->updateHosts = server.updateHosts;
+ mServerInfo->freeSources = server.freeSources;
+ mServerInfo->nonFreeSources = server.nonFreeSources;
settings.persistentIp = mServerInfo->persistentIp;
settings.supportUrl = mServerInfo->supportUrl;
@@ -474,8 +476,11 @@ static void loadHostsGroup(XmlNodeConstPtr node,
_("Unknown"));
for_each_xml_child_node(hostNode, node)
{
- if (!xmlNameEqual(hostNode, "host"))
+ if (!xmlNameEqual(hostNode, "host") ||
+ !XmlHaveChildContent(hostNode))
+ {
continue;
+ }
const std::string host = XmlChildContent(hostNode);
if (host.empty())
continue;
@@ -491,6 +496,44 @@ static void loadHostsGroup(XmlNodeConstPtr node,
server.updateHosts.push_back(group);
}
+static void loadServerSourcesList(XmlNodeConstPtr node,
+ std::vector<ServerUrlInfo> &list)
+{
+ for_each_xml_child_node(urlNode, node)
+ {
+ if (!xmlNameEqual(urlNode, "url") ||
+ !XmlHaveChildContent(urlNode))
+ {
+ continue;
+ }
+ const std::string name = XML::langProperty(urlNode,
+ "name",
+ "");
+ if (name.empty())
+ continue;
+ const std::string url = XmlChildContent(urlNode);
+ if (url.empty())
+ continue;
+ list.push_back(ServerUrlInfo(name, url));
+ }
+}
+
+static void loadServerSources(XmlNodeConstPtr node,
+ ServerInfo &server)
+{
+ for_each_xml_child_node(subNode, node)
+ {
+ if (xmlNameEqual(subNode, "free"))
+ {
+ loadServerSourcesList(subNode, server.freeSources);
+ }
+ else if (xmlNameEqual(subNode, "nonfree"))
+ {
+ loadServerSourcesList(subNode, server.nonFreeSources);
+ }
+ }
+}
+
void ServerDialog::loadServers(const bool addNew)
{
XML::Document doc(pathJoin(mDir,
@@ -618,6 +661,10 @@ void ServerDialog::loadServers(const bool addNew)
// TRANSLATORS: default hosts group name
subNode, "name", _("default"));
}
+ else if (xmlNameEqual(subNode, "sources"))
+ {
+ loadServerSources(subNode, server);
+ }
}
server.version.first = font->getWidth(version);
@@ -646,6 +693,8 @@ void ServerDialog::loadServers(const bool addNew)
mServers[i].defaultHostName = server.defaultHostName;
mServers[i].updateHosts = server.updateHosts;
mServers[i].packetVersion = server.packetVersion;
+ mServers[i].freeSources = server.freeSources;
+ mServers[i].nonFreeSources = server.nonFreeSources;
mServersListModel->setVersionString(i, version);
found = true;
break;
diff --git a/src/net/serverinfo.h b/src/net/serverinfo.h
index e83e51b56..ab4a99081 100644
--- a/src/net/serverinfo.h
+++ b/src/net/serverinfo.h
@@ -27,6 +27,7 @@
#include "enums/net/servertype.h"
#include "net/hostsgroup.h"
+#include "net/serverurlinfo.h"
#include "utils/stringutils.h"
@@ -49,6 +50,8 @@ class ServerInfo final
std::string defaultHostName;
std::vector<std::string> updateMirrors;
std::vector<HostsGroup> updateHosts;
+ std::vector<ServerUrlInfo> freeSources;
+ std::vector<ServerUrlInfo> nonFreeSources;
uint16_t port;
VersionString version;
int packetVersion;
@@ -68,6 +71,8 @@ class ServerInfo final
defaultHostName(),
updateMirrors(),
updateHosts(),
+ freeSources(),
+ nonFreeSources(),
#ifdef TMWA_SUPPORT
port(6901),
#else // TMWA_SUPPORT
@@ -94,6 +99,8 @@ class ServerInfo final
defaultHostName(info.defaultHostName),
updateMirrors(info.updateMirrors),
updateHosts(info.updateHosts),
+ freeSources(info.freeSources),
+ nonFreeSources(info.nonFreeSources),
port(info.port),
version(),
packetVersion(info.packetVersion),
@@ -120,6 +127,8 @@ class ServerInfo final
defaultHostName = info.defaultHostName;
updateMirrors = info.updateMirrors;
updateHosts = info.updateHosts;
+ freeSources = info.freeSources;
+ nonFreeSources = info.nonFreeSources;
port = info.port;
save = info.save;
persistentIp = info.persistentIp;
@@ -150,6 +159,8 @@ class ServerInfo final
defaultHostName.clear();
updateMirrors.clear();
updateHosts.clear();
+ freeSources.clear();
+ nonFreeSources.clear();
version.first = 0;
version.second.clear();
packetVersion = 0;
diff --git a/src/net/serverurlinfo.h b/src/net/serverurlinfo.h
new file mode 100644
index 000000000..8ef5b4d7b
--- /dev/null
+++ b/src/net/serverurlinfo.h
@@ -0,0 +1,49 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2016-2017 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NET_SERVERURLINFO_H
+#define NET_SERVERURLINFO_H
+
+#include "localconsts.h"
+
+#include <string>
+
+struct ServerUrlInfo final
+{
+ ServerUrlInfo() :
+ name(),
+ url()
+ {
+ }
+
+ ServerUrlInfo(const std::string name0,
+ const std::string url0) :
+ name(name0),
+ url(url0)
+ {
+ }
+
+ A_DEFAULT_COPY(ServerUrlInfo)
+
+ std::string name;
+ std::string url;
+};
+
+#endif // NET_SERVERURLINFO_H