summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/mainmenu/dlg_contentstore.lua62
-rw-r--r--src/script/lua_api/l_mainmenu.cpp16
-rw-r--r--textures/base/pack/error_screenshot.pngbin0 -> 971 bytes
-rw-r--r--textures/base/pack/loading_screenshot.pngbin0 -> 580 bytes
4 files changed, 74 insertions, 4 deletions
diff --git a/builtin/mainmenu/dlg_contentstore.lua b/builtin/mainmenu/dlg_contentstore.lua
index 2c9e80e15..59c2480c1 100644
--- a/builtin/mainmenu/dlg_contentstore.lua
+++ b/builtin/mainmenu/dlg_contentstore.lua
@@ -18,6 +18,13 @@
local store = {}
local package_dialog = {}
+-- Screenshot
+local screenshot_dir = os.tempfolder()
+assert(core.create_dir(screenshot_dir))
+local screenshot_downloading = {}
+local screenshot_downloaded = {}
+
+-- Filter
local search_string = ""
local cur_page = 1
local num_per_page = 5
@@ -137,6 +144,58 @@ local function start_install(calling_dialog, package)
new_dlg:show()
end
+local function get_screenshot(package)
+ if #package.screenshots == 0 then
+ return defaulttexturedir .. "no_screenshot.png"
+ elseif screenshot_downloading[package.screenshots[1]] then
+ return defaulttexturedir .. "loading_screenshot.png"
+ end
+
+ -- Get tmp screenshot path
+ local filepath = screenshot_dir .. DIR_DELIM ..
+ package.type .. "-" .. package.author .. "-" .. package.name .. ".png"
+
+ -- Return if already downloaded
+ local file = io.open(filepath, "r")
+ if file then
+ file:close()
+ return filepath
+ end
+
+ -- Show error if we've failed to download before
+ if screenshot_downloaded[package.screenshots[1]] then
+ return defaulttexturedir .. "error_screenshot.png"
+ end
+
+ -- Download
+
+ local function download_screenshot(params)
+ return core.download_file(params.url, params.dest)
+ end
+ local function callback(success)
+ screenshot_downloading[package.screenshots[1]] = nil
+ screenshot_downloaded[package.screenshots[1]] = true
+ if not success then
+ core.log("warning", "Screenshot download failed for some reason")
+ end
+
+ local ele = ui.childlist.store
+ if ele and not ele.hidden then
+ core.update_formspec(ele:formspec())
+ end
+ end
+ if core.handle_async(download_screenshot,
+ { dest = filepath, url = package.screenshots[1] }, callback) then
+ screenshot_downloading[package.screenshots[1]] = true
+ else
+ core.log("error", "ERROR: async event failed")
+ return defaulttexturedir .. "error_screenshot.png"
+ end
+
+ return defaulttexturedir .. "loading_screenshot.png"
+end
+
+
function package_dialog.get_formspec()
local package = package_dialog.package
@@ -315,8 +374,7 @@ function store.get_formspec()
-- image
formspec[#formspec + 1] = "image[-0.4,0;1.5,1;"
- formspec[#formspec + 1] = defaulttexturedir
- formspec[#formspec + 1] = "no_screenshot.png"
+ formspec[#formspec + 1] = get_screenshot(package)
formspec[#formspec + 1] = "]"
-- title
diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp
index 812fdffe7..1f49fc211 100644
--- a/src/script/lua_api/l_mainmenu.cpp
+++ b/src/script/lua_api/l_mainmenu.cpp
@@ -1043,9 +1043,21 @@ int ModApiMainMenu::l_get_package_list(lua_State *L)
lua_pushstring(L, package.url.c_str());
lua_settable (L, top_lvl2);
- lua_pushstring(L, "release");
+ lua_pushstring (L, "release");
lua_pushinteger(L, package.release);
- lua_settable (L, top_lvl2);
+ lua_settable (L, top_lvl2);
+
+ lua_pushstring(L, "screenshots");
+ lua_newtable(L);
+ {
+ int top_screenshots = lua_gettop(L);
+ for (size_t i = 0; i < package.screenshots.size(); ++i) {
+ lua_pushnumber(L, i + 1);
+ lua_pushstring(L, package.screenshots[i].c_str());
+ lua_settable(L, top_screenshots);
+ }
+ }
+ lua_settable(L, top_lvl2);
lua_settable(L, top);
index++;
diff --git a/textures/base/pack/error_screenshot.png b/textures/base/pack/error_screenshot.png
new file mode 100644
index 000000000..e35a0a38a
--- /dev/null
+++ b/textures/base/pack/error_screenshot.png
Binary files differ
diff --git a/textures/base/pack/loading_screenshot.png b/textures/base/pack/loading_screenshot.png
new file mode 100644
index 000000000..4d65a5d8d
--- /dev/null
+++ b/textures/base/pack/loading_screenshot.png
Binary files differ