From 87051fca268944248af8aa5edd027a9acd800bcf Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 17 Oct 2022 13:56:28 +0200 Subject: Take geographic distance into account for server list ordering (#12790) --- src/script/lua_api/l_mainmenu.cpp | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/script/lua_api/l_mainmenu.cpp') diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 789096d23..9c828430c 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -39,6 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/renderingengine.h" #include "network/networkprotocol.h" #include "content/mod_configuration.h" +#include "threading/mutex_auto_lock.h" /******************************************************************************/ std::string ModApiMainMenu::getTextData(lua_State *L, std::string name) @@ -1007,6 +1008,44 @@ int ModApiMainMenu::l_do_async_callback(lua_State *L) return 1; } +/******************************************************************************/ +// this is intentionally a global and not part of MainMenuScripting or such +namespace { + std::unordered_map once_values; + std::mutex once_mutex; +} + +int ModApiMainMenu::l_set_once(lua_State *L) +{ + std::string key = readParam(L, 1); + if (lua_isnil(L, 2)) + return 0; + std::string value = readParam(L, 2); + + { + MutexAutoLock lock(once_mutex); + once_values[key] = value; + } + + return 0; +} + +int ModApiMainMenu::l_get_once(lua_State *L) +{ + std::string key = readParam(L, 1); + + { + MutexAutoLock lock(once_mutex); + auto it = once_values.find(key); + if (it == once_values.end()) + lua_pushnil(L); + else + lua_pushstring(L, it->second.c_str()); + } + + return 1; +} + /******************************************************************************/ void ModApiMainMenu::Initialize(lua_State *L, int top) { @@ -1054,6 +1093,8 @@ void ModApiMainMenu::Initialize(lua_State *L, int top) API_FCT(open_dir); API_FCT(share_file); API_FCT(do_async_callback); + API_FCT(set_once); + API_FCT(get_once); } /******************************************************************************/ -- cgit v1.2.3