Skip to content
Permalink
Browse files
Fix server favorites not saving when client/serverlist/ doesn't exist…
… already (#11152)
  • Loading branch information
sfan5 committed Apr 9, 2021
1 parent a0e7a4a commit 0abc1e98edb87b2e23eecccfd6b1393ac7fb4f56
Showing with 18 additions and 13 deletions.
  1. +6 −4 builtin/mainmenu/serverlistmgr.lua
  2. +11 −8 src/script/lua_api/l_mainmenu.cpp
  3. +1 −1 src/script/lua_api/l_mainmenu.h
@@ -90,8 +90,11 @@ function serverlistmgr.sync()
end

--------------------------------------------------------------------------------
local function get_favorites_path()
local function get_favorites_path(folder)
local base = core.get_user_path() .. DIR_DELIM .. "client" .. DIR_DELIM .. "serverlist" .. DIR_DELIM
if folder then
return base
end
return base .. core.settings:get("serverlist_file")
end

@@ -103,9 +106,8 @@ local function save_favorites(favorites)
core.settings:set("serverlist_file", filename:sub(1, #filename - 4) .. ".json")
end

local path = get_favorites_path()
core.create_dir(path)
core.safe_file_write(path, core.write_json(favorites))
assert(core.create_dir(get_favorites_path(true)))
core.safe_file_write(get_favorites_path(), core.write_json(favorites))
end

--------------------------------------------------------------------------------
@@ -716,21 +716,24 @@ int ModApiMainMenu::l_get_mainmenu_path(lua_State *L)
}

/******************************************************************************/
bool ModApiMainMenu::mayModifyPath(const std::string &path)
bool ModApiMainMenu::mayModifyPath(std::string path)
{
path = fs::RemoveRelativePathComponents(path);

if (fs::PathStartsWith(path, fs::TempPath()))
return true;

if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM "games")))
return true;
std::string path_user = fs::RemoveRelativePathComponents(porting::path_user);

if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM "mods")))
if (fs::PathStartsWith(path, path_user + DIR_DELIM "client"))
return true;

if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM "textures")))
if (fs::PathStartsWith(path, path_user + DIR_DELIM "games"))
return true;

if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM "worlds")))
if (fs::PathStartsWith(path, path_user + DIR_DELIM "mods"))
return true;
if (fs::PathStartsWith(path, path_user + DIR_DELIM "textures"))
return true;
if (fs::PathStartsWith(path, path_user + DIR_DELIM "worlds"))
return true;

if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_cache)))
@@ -58,7 +58,7 @@ class ModApiMainMenu: public ModApiBase
* @param path path to check
* @return true if the path may be modified
*/
static bool mayModifyPath(const std::string &path);
static bool mayModifyPath(std::string path);

//api calls

0 comments on commit 0abc1e9

Please sign in to comment.