diff options
author | rubenwardy <rw@rubenwardy.com> | 2018-05-20 00:25:17 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-20 00:25:17 +0100 |
commit | 122eed7a3449eead6f87f45f2eb55c11c3cf171e (patch) | |
tree | 52b222a10b5489626c64417105f0ebb39e7e6d84 /builtin | |
parent | 8295f9f89b7e800fe39c2bc9b5638b1fed2c30d8 (diff) | |
download | minetest-122eed7a3449eead6f87f45f2eb55c11c3cf171e.tar.gz minetest-122eed7a3449eead6f87f45f2eb55c11c3cf171e.tar.bz2 minetest-122eed7a3449eead6f87f45f2eb55c11c3cf171e.zip |
Add screenshots to online content browser
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/mainmenu/dlg_contentstore.lua | 62 |
1 files changed, 60 insertions, 2 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 |