aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/mainmenu/dlg_contentstore.lua34
-rw-r--r--doc/menu_lua_api.txt11
-rw-r--r--src/script/lua_api/l_mainmenu.cpp64
-rw-r--r--src/script/lua_api/l_mainmenu.h3
4 files changed, 31 insertions, 81 deletions
diff --git a/builtin/mainmenu/dlg_contentstore.lua b/builtin/mainmenu/dlg_contentstore.lua
index 9abc76f3b..48856f228 100644
--- a/builtin/mainmenu/dlg_contentstore.lua
+++ b/builtin/mainmenu/dlg_contentstore.lua
@@ -268,9 +268,37 @@ function package_dialog.create(package)
end
function store.load()
- store.packages_full = core.get_package_list()
- store.packages = store.packages_full
- store.loaded = true
+ local tmpdir = os.tempfolder()
+ local target = tmpdir .. DIR_DELIM .. "packages.json"
+
+ assert(core.create_dir(tmpdir))
+
+ local base_url = core.settings:get("contentdb_url")
+ local show_nonfree = core.settings:get_bool("show_nonfree_packages")
+ local url = base_url ..
+ "/api/packages/?type=mod&type=game&type=txp&protocol_version=" ..
+ core.get_max_supp_proto() ..
+ "&nonfree=" ..
+ (show_nonfree and "true" or "false")
+
+ core.download_file(url, target)
+
+ local file = io.open(target, "r")
+ if file then
+ store.packages_full = core.parse_json(file:read("*all"))
+ file:close()
+
+ for _, package in pairs(store.packages_full) do
+ package.url = base_url .. "/packages/" ..
+ package.author .. "/" .. package.name ..
+ "/releases/" .. package.release .. "/download/"
+ end
+
+ store.packages = store.packages_full
+ store.loaded = true
+ end
+
+ core.delete_dir(tmpdir)
end
function store.update_paths()
diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt
index 03fe5c74d..c7a215c4f 100644
--- a/doc/menu_lua_api.txt
+++ b/doc/menu_lua_api.txt
@@ -146,17 +146,6 @@ Package - content which is downloadable from the content db, may or may not be i
optional_depends = {"mod", "names"}, -- mods only
}
-* core.get_package_list() -> downloads package list from content db
- * returns a list of:
-
- {
- name = "basename",
- title = "human readable title",
- author = "username",
- type = "", -- mod, game, txp
- short_description = "description",
- url = "",
- }
Favorites:
core.get_favorites(location) -> list of favorites (possible in async calls)
diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp
index 39a3f3a62..f0f56098f 100644
--- a/src/script/lua_api/l_mainmenu.cpp
+++ b/src/script/lua_api/l_mainmenu.cpp
@@ -991,68 +991,6 @@ int ModApiMainMenu::l_get_screen_info(lua_State *L)
return 1;
}
-int ModApiMainMenu::l_get_package_list(lua_State *L)
-{
- std::string url = g_settings->get("contentdb_url");
- bool show_nonfree = g_settings->getBool("show_nonfree_packages");
- std::vector<Package> packages = getPackagesFromURL(url +
- "/api/packages/?type=mod&type=game&type=txp&protocol_version="
- LATEST_PROTOCOL_VERSION_STRING "&nonfree=" +
- (show_nonfree ? "true" : "false"));
-
- // Make table
- lua_newtable(L);
- int top = lua_gettop(L);
- unsigned int index = 1;
-
- // Fill table
- for (const auto &package : packages) {
- lua_pushnumber(L, index);
- lua_newtable(L);
-
- int top_lvl2 = lua_gettop(L);
-
- lua_pushstring(L, "author");
- lua_pushstring(L, package.author.c_str());
- lua_settable (L, top_lvl2);
-
- lua_pushstring(L, "name");
- lua_pushstring(L, package.name.c_str());
- lua_settable (L, top_lvl2);
-
- lua_pushstring(L, "title");
- lua_pushstring(L, package.title.c_str());
- lua_settable (L, top_lvl2);
-
- lua_pushstring(L, "type");
- lua_pushstring(L, package.type.c_str());
- lua_settable (L, top_lvl2);
-
- lua_pushstring(L, "short_description");
- lua_pushstring(L, package.shortDesc.c_str());
- lua_settable (L, top_lvl2);
-
- lua_pushstring (L, "release");
- lua_pushinteger(L, package.release);
- lua_settable (L, top_lvl2);
-
- if (package.thumbnail != "") {
- lua_pushstring(L, "thumbnail");
- lua_pushstring(L, package.thumbnail.c_str());
- lua_settable (L, top_lvl2);
- }
-
- lua_pushstring(L, "url");
- lua_pushstring(L, package.getDownloadURL(url).c_str());
- lua_settable (L, top_lvl2);
-
- lua_settable(L, top);
- index++;
- }
-
- return 1;
-}
-
/******************************************************************************/
int ModApiMainMenu::l_get_min_supp_proto(lua_State *L)
{
@@ -1123,7 +1061,6 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(get_video_drivers);
API_FCT(get_video_modes);
API_FCT(get_screen_info);
- API_FCT(get_package_list);
API_FCT(get_min_supp_proto);
API_FCT(get_max_supp_proto);
API_FCT(do_async_callback);
@@ -1147,5 +1084,4 @@ void ModApiMainMenu::InitializeAsync(lua_State *L, int top)
//API_FCT(extract_zip); //TODO remove dependency to GuiEngine
API_FCT(download_file);
//API_FCT(gettext); (gettext lib isn't threadsafe)
- API_FCT(get_package_list);
}
diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h
index b08a5bc01..ae68edccf 100644
--- a/src/script/lua_api/l_mainmenu.h
+++ b/src/script/lua_api/l_mainmenu.h
@@ -133,9 +133,6 @@ private:
static int l_get_video_modes(lua_State *L);
- //content store
- static int l_get_package_list(lua_State *L);
-
//version compatibility
static int l_get_min_supp_proto(lua_State *L);