diff options
Diffstat (limited to 'src/gui/windows')
-rw-r--r-- | src/gui/windows/serverdialog.cpp | 51 |
1 files changed, 50 insertions, 1 deletions
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; |