Dual serverlist

master
stujones11 2019-05-13 21:28:30 +01:00
parent c9d0b5a9c3
commit 272314875d
4 changed files with 17 additions and 5 deletions

View File

@ -36,6 +36,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("name", "");
settings->setDefault("bind_address", "");
settings->setDefault("serverlist_url", "servers.minetest.net");
settings->setDefault("serverlist_url_2", "");
// Client
settings->setDefault("address", "");

View File

@ -463,7 +463,12 @@ int ModApiMainMenu::l_get_favorites(lua_State *L)
std::vector<ServerListSpec> servers;
if(listtype == "online") {
servers = ServerList::getOnline();
servers = ServerList::getOnline(g_settings->get("serverlist_url"));
std::string aux_list = g_settings->get("serverlist_url_2");
if (!aux_list.empty()) {
std::vector<ServerListSpec> aux = ServerList::getOnline(aux_list);
servers.insert(servers.end(), aux.begin(), aux.end());
}
} else {
servers = ServerList::getLocal();
}
@ -474,6 +479,12 @@ int ModApiMainMenu::l_get_favorites(lua_State *L)
for (unsigned int i = 0; i < servers.size(); i++)
{
// only list compatible servers
if (!servers[i]["proto_min"].asString().size() ||
!servers[i]["proto_max"].asString().size() ||
servers[i]["proto_min"].asInt() > CLIENT_PROTOCOL_VERSION_MAX ||
servers[i]["proto_max"].asInt() < CLIENT_PROTOCOL_VERSION_MIN)
continue;
lua_pushnumber(L,index);
@ -606,7 +617,7 @@ int ModApiMainMenu::l_delete_favorite(lua_State *L)
if(listtype == "online") {
servers = ServerList::getOnline();
servers = ServerList::getOnline(g_settings->get("serverlist_url"));
} else {
servers = ServerList::getLocal();
}

View File

@ -66,14 +66,14 @@ std::vector<ServerListSpec> getLocal()
}
std::vector<ServerListSpec> getOnline()
std::vector<ServerListSpec> getOnline(const std::string &url)
{
std::ostringstream geturl;
u16 proto_version_min = g_settings->getFlag("send_pre_v25_init") ?
CLIENT_PROTOCOL_VERSION_MIN_LEGACY : CLIENT_PROTOCOL_VERSION_MIN;
geturl << g_settings->get("serverlist_url") <<
geturl << url <<
"/list?proto_version_min=" << proto_version_min <<
"&proto_version_max=" << CLIENT_PROTOCOL_VERSION_MAX;
Json::Value root = fetchJsonValue(geturl.str(), NULL);

View File

@ -30,7 +30,7 @@ typedef Json::Value ServerListSpec;
namespace ServerList
{
std::vector<ServerListSpec> getLocal();
std::vector<ServerListSpec> getOnline();
std::vector<ServerListSpec> getOnline(const std::string &url);
bool deleteEntry(const ServerListSpec &server);
bool insert(const ServerListSpec &server);