Add screenshots to online content browser

This commit is contained in:
rubenwardy 2018-05-20 00:25:17 +01:00 committed by GitHub
parent 8295f9f89b
commit 122eed7a34
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 74 additions and 4 deletions

@ -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++;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 971 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B