mirror of
https://github.com/minetest/minetest.git
synced 2024-11-30 03:23:45 +01:00
Add screenshots to online content browser
This commit is contained in:
parent
8295f9f89b
commit
122eed7a34
@ -18,6 +18,13 @@
|
|||||||
local store = {}
|
local store = {}
|
||||||
local package_dialog = {}
|
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 search_string = ""
|
||||||
local cur_page = 1
|
local cur_page = 1
|
||||||
local num_per_page = 5
|
local num_per_page = 5
|
||||||
@ -137,6 +144,58 @@ local function start_install(calling_dialog, package)
|
|||||||
new_dlg:show()
|
new_dlg:show()
|
||||||
end
|
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()
|
function package_dialog.get_formspec()
|
||||||
local package = package_dialog.package
|
local package = package_dialog.package
|
||||||
@ -315,8 +374,7 @@ function store.get_formspec()
|
|||||||
|
|
||||||
-- image
|
-- image
|
||||||
formspec[#formspec + 1] = "image[-0.4,0;1.5,1;"
|
formspec[#formspec + 1] = "image[-0.4,0;1.5,1;"
|
||||||
formspec[#formspec + 1] = defaulttexturedir
|
formspec[#formspec + 1] = get_screenshot(package)
|
||||||
formspec[#formspec + 1] = "no_screenshot.png"
|
|
||||||
formspec[#formspec + 1] = "]"
|
formspec[#formspec + 1] = "]"
|
||||||
|
|
||||||
-- title
|
-- title
|
||||||
|
@ -1043,10 +1043,22 @@ int ModApiMainMenu::l_get_package_list(lua_State *L)
|
|||||||
lua_pushstring(L, package.url.c_str());
|
lua_pushstring(L, package.url.c_str());
|
||||||
lua_settable (L, top_lvl2);
|
lua_settable (L, top_lvl2);
|
||||||
|
|
||||||
lua_pushstring(L, "release");
|
lua_pushstring (L, "release");
|
||||||
lua_pushinteger(L, package.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);
|
lua_settable(L, top);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
BIN
textures/base/pack/error_screenshot.png
Normal file
BIN
textures/base/pack/error_screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 971 B |
BIN
textures/base/pack/loading_screenshot.png
Normal file
BIN
textures/base/pack/loading_screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 580 B |
Loading…
Reference in New Issue
Block a user