Content store: Fix storage leak by storing screenshots in cache (#8137)
authorrubenwardy <rw@rubenwardy.com>
Thu, 31 Jan 2019 16:35:55 +0000 (16:35 +0000)
committerParamat <paramat@users.noreply.github.com>
Thu, 31 Jan 2019 16:35:55 +0000 (16:35 +0000)
builtin/mainmenu/dlg_contentstore.lua
doc/menu_lua_api.txt
src/script/lua_api/l_mainmenu.cpp
src/script/lua_api/l_mainmenu.h

index 0b3cababcddde400eb28cd674f7b9c2296cf0ddb..a9164091afdb388ab87dc2a0a3840cbeb9ac5a26 100644 (file)
@@ -19,7 +19,7 @@ local store = {}
 local package_dialog = {}
 
 -- Screenshot
-local screenshot_dir = os.tempfolder()
+local screenshot_dir = core.get_cache_path() .. DIR_DELIM .. "cdb"
 assert(core.create_dir(screenshot_dir))
 local screenshot_downloading = {}
 local screenshot_downloaded = {}
index c7a215c4fe712b762102627282a54653f738f863..419bc2f8a97d620f33bc4d179f837cbfb9da1571 100644 (file)
@@ -65,6 +65,7 @@ core.get_video_drivers()
 ^ first element of returned list is guaranteed to be the NULL driver
 core.get_mapgen_names([include_hidden=false]) -> table of map generator algorithms
     registered in the core (possible in async calls)
+core.get_cache_path() -> path of cache
 
 Formspec:
 core.update_formspec(formspec)
index 9b9211593f98136be28b988eb40181600aebabeb..9a64bd0ab190b50f913f7aeda8558612e6b9b867 100644 (file)
@@ -683,6 +683,12 @@ int ModApiMainMenu::l_get_texturepath_share(lua_State *L)
        return 1;
 }
 
+int ModApiMainMenu::l_get_cache_path(lua_State *L)
+{
+       lua_pushstring(L, fs::RemoveRelativePathComponents(porting::path_cache).c_str());
+       return 1;
+}
+
 /******************************************************************************/
 int ModApiMainMenu::l_create_dir(lua_State *L) {
        const char *path = luaL_checkstring(L, 1);
@@ -855,6 +861,9 @@ bool ModApiMainMenu::mayModifyPath(const std::string &path)
        if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM "worlds")))
                return true;
 
+       if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_cache)))
+               return true;
+
        return false;
 }
 
@@ -1043,6 +1052,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
        API_FCT(get_gamepath);
        API_FCT(get_texturepath);
        API_FCT(get_texturepath_share);
+       API_FCT(get_cache_path);
        API_FCT(create_dir);
        API_FCT(delete_dir);
        API_FCT(copy_dir);
@@ -1071,6 +1081,7 @@ void ModApiMainMenu::InitializeAsync(lua_State *L, int top)
        API_FCT(get_gamepath);
        API_FCT(get_texturepath);
        API_FCT(get_texturepath_share);
+       API_FCT(get_cache_path);
        API_FCT(create_dir);
        API_FCT(delete_dir);
        API_FCT(copy_dir);
index 9e77921974068ed57f9c38aaf53d28e0f602ac2e..4a664359a9d46a55ab67537fb7318380749f787e 100644 (file)
@@ -120,6 +120,8 @@ private:
 
        static int l_get_texturepath_share(lua_State *L);
 
+       static int l_get_cache_path(lua_State *L);
+
        static int l_create_dir(lua_State *L);
 
        static int l_delete_dir(lua_State *L);