diff --git a/builtin/mainmenu/modmgr.lua b/builtin/mainmenu/modmgr.lua index f6b9b4814..89292ed52 100644 --- a/builtin/mainmenu/modmgr.lua +++ b/builtin/mainmenu/modmgr.lua @@ -17,7 +17,7 @@ -------------------------------------------------------------------------------- function get_mods(path,retval,modpack) - local mods = core.get_dirlist(path, true) + local mods = core.get_dir_list(path, true) for i=1, #mods, 1 do if mods[i]:sub(1,1) ~= "." then @@ -94,7 +94,7 @@ function modmgr.getbasefolder(temppath) } end - local subdirs = core.get_dirlist(temppath,true) + local subdirs = core.get_dir_list(temppath, true) --only single mod or modpack allowed if #subdirs ~= 1 then diff --git a/builtin/mainmenu/tab_texturepacks.lua b/builtin/mainmenu/tab_texturepacks.lua index d32c073ab..9417b94e0 100644 --- a/builtin/mainmenu/tab_texturepacks.lua +++ b/builtin/mainmenu/tab_texturepacks.lua @@ -50,7 +50,7 @@ local function get_formspec(tabview, name, tabdata) "textlist[4,0.25;7.5,5.0;TPs;" local current_texture_path = core.setting_get("texture_path") - local list = filter_texture_pack_list(core.get_dirlist(core.get_texturepath(), true)) + local list = filter_texture_pack_list(core.get_dir_list(core.get_texturepath(), true)) local index = tonumber(core.setting_get("mainmenu_last_selected_TP")) if index == nil then index = 1 end @@ -94,7 +94,7 @@ local function main_button_handler(tabview, fields, name, tabdata) local index = core.get_textlist_index("TPs") core.setting_set("mainmenu_last_selected_TP", index) - local list = filter_texture_pack_list(core.get_dirlist(core.get_texturepath(), true)) + local list = filter_texture_pack_list(core.get_dir_list(core.get_texturepath(), true)) local current_index = core.get_textlist_index("TPs") if current_index ~= nil and #list >= current_index then local new_path = core.get_texturepath()..DIR_DELIM..list[current_index] diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 0e1dc487f..e1ee42b94 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1704,6 +1704,11 @@ Helper functions * `minetest.mkdir(path)`: returns success. * Creates a directory specified by `path`, creating parent directories if they don't exist. +* `minetest.get_dir_list(path, [is_dir])`: returns list of entry names + * is_dir is one of: + * nil: return all entries, + * true: return only subdirectory names, or + * false: return only file names. ### Logging * `minetest.debug(line)` diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt index e5ba46d4c..76c329de6 100644 --- a/doc/menu_lua_api.txt +++ b/doc/menu_lua_api.txt @@ -31,8 +31,8 @@ core.start() core.close() Filesystem: -core.get_scriptdir() -^ returns directory of script +core.get_builtin_path() +^ returns path to builtin root core.get_modpath() (possible in async calls) ^ returns path to global modpath core.get_modstore_details(modid) (possible in async calls) @@ -59,10 +59,6 @@ core.get_gamepath() (possible in async calls) ^ returns path to global gamepath core.get_texturepath() (possible in async calls) ^ returns path to default textures -core.get_dirlist(path,onlydirs) (possible in async calls) -^ path to get subdirs from -^ onlydirs should result contain only dirs? -^ returns list of folders within path core.create_dir(absolute_path) (possible in async calls) ^ absolute_path to directory to create (needs to be absolute) ^ returns true/false diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index b068040db..52410f74f 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -753,30 +753,6 @@ int ModApiMainMenu::l_get_texturepath_share(lua_State *L) return 1; } -/******************************************************************************/ -int ModApiMainMenu::l_get_dirlist(lua_State *L) -{ - const char *path = luaL_checkstring(L, 1); - bool dironly = lua_toboolean(L, 2); - - std::vector dirlist = fs::GetDirListing(path); - - unsigned int index = 1; - lua_newtable(L); - int table = lua_gettop(L); - - for (unsigned int i=0;i< dirlist.size(); i++) { - if ((dirlist[i].dir) || (dironly == false)) { - lua_pushnumber(L,index); - lua_pushstring(L,dirlist[i].name.c_str()); - lua_settable(L, table); - index++; - } - } - - return 1; -} - /******************************************************************************/ int ModApiMainMenu::l_create_dir(lua_State *L) { const char *path = luaL_checkstring(L, 1); @@ -1170,7 +1146,6 @@ void ModApiMainMenu::Initialize(lua_State *L, int top) API_FCT(get_gamepath); API_FCT(get_texturepath); API_FCT(get_texturepath_share); - API_FCT(get_dirlist); API_FCT(create_dir); API_FCT(delete_dir); API_FCT(copy_dir); @@ -1204,7 +1179,6 @@ void ModApiMainMenu::InitializeAsync(AsyncEngine& engine) ASYNC_API_FCT(get_gamepath); ASYNC_API_FCT(get_texturepath); ASYNC_API_FCT(get_texturepath_share); - ASYNC_API_FCT(get_dirlist); ASYNC_API_FCT(create_dir); ASYNC_API_FCT(delete_dir); ASYNC_API_FCT(copy_dir); diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 2bcc114e2..d97db2367 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -339,6 +339,29 @@ int ModApiUtil::l_mkdir(lua_State *L) return 1; } +// get_dir_list(path, is_dir) +int ModApiUtil::l_get_dir_list(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + const char *path = luaL_checkstring(L, 1); + short is_dir = lua_isboolean(L, 2) ? lua_toboolean(L, 2) : -1; + + CHECK_SECURE_PATH_OPTIONAL(L, path); + + std::vector list = fs::GetDirListing(path); + + int index = 0; + lua_newtable(L); + + for (size_t i = 0; i < list.size(); i++) { + if (is_dir == -1 || is_dir == list[i].dir) { + lua_pushstring(L, list[i].name.c_str()); + lua_rawseti(L, -2, ++index); + } + } + + return 1; +} int ModApiUtil::l_request_insecure_environment(lua_State *L) { @@ -391,6 +414,7 @@ void ModApiUtil::Initialize(lua_State *L, int top) API_FCT(decompress); API_FCT(mkdir); + API_FCT(get_dir_list); API_FCT(request_insecure_environment); } @@ -417,5 +441,6 @@ void ModApiUtil::InitializeAsync(AsyncEngine& engine) ASYNC_API_FCT(decompress); ASYNC_API_FCT(mkdir); + ASYNC_API_FCT(get_dir_list); } diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h index 336173664..e75aa28cb 100644 --- a/src/script/lua_api/l_util.h +++ b/src/script/lua_api/l_util.h @@ -90,6 +90,9 @@ private: // mkdir(path) static int l_mkdir(lua_State *L); + // get_dir_list(path, is_dir) + static int l_get_dir_list(lua_State *L); + // request_insecure_environment() static int l_request_insecure_environment(lua_State *L);