Add HTTP API to main menu (#9998)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
--Minetest
|
||||
--Copyright (C) 2018 rubenwardy
|
||||
--Copyright (C) 2018-20 rubenwardy
|
||||
--
|
||||
--This program is free software; you can redistribute it and/or modify
|
||||
--it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -15,8 +15,18 @@
|
||||
--with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
if not minetest.get_http_api then
|
||||
function create_store_dlg()
|
||||
return messagebox("store",
|
||||
fgettext("ContentDB is not available when Minetest was compiled without cURL"))
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
local store = { packages = {}, packages_full = {} }
|
||||
|
||||
local http = minetest.get_http_api()
|
||||
|
||||
-- Screenshot
|
||||
local screenshot_dir = core.get_cache_path() .. DIR_DELIM .. "cdb"
|
||||
assert(core.create_dir(screenshot_dir))
|
||||
@@ -171,11 +181,6 @@ local function get_screenshot(package)
|
||||
end
|
||||
|
||||
function store.load()
|
||||
local tmpdir = os.tempfolder()
|
||||
local target = tmpdir .. DIR_DELIM .. "packages.json"
|
||||
|
||||
assert(core.create_dir(tmpdir))
|
||||
|
||||
local version = core.get_version()
|
||||
local base_url = core.settings:get("contentdb_url")
|
||||
local url = base_url ..
|
||||
@@ -189,31 +194,29 @@ function store.load()
|
||||
end
|
||||
end
|
||||
|
||||
core.download_file(url, target)
|
||||
local timeout = tonumber(minetest.settings:get("curl_file_download_timeout"))
|
||||
local response = http.fetch_sync({ url = url, timeout = timeout })
|
||||
if not response.succeeded then
|
||||
return
|
||||
end
|
||||
|
||||
local file = io.open(target, "r")
|
||||
if file then
|
||||
store.packages_full = core.parse_json(file:read("*all")) or {}
|
||||
file:close()
|
||||
store.packages_full = core.parse_json(response.data) or {}
|
||||
|
||||
for _, package in pairs(store.packages_full) do
|
||||
package.url = base_url .. "/packages/" ..
|
||||
for _, package in pairs(store.packages_full) do
|
||||
package.url = base_url .. "/packages/" ..
|
||||
package.author .. "/" .. package.name ..
|
||||
"/releases/" .. package.release .. "/download/"
|
||||
|
||||
local name_len = #package.name
|
||||
if package.type == "game" and name_len > 5 and package.name:sub(name_len - 4) == "_game" then
|
||||
package.id = package.author:lower() .. "/" .. package.name:sub(1, name_len - 5)
|
||||
else
|
||||
package.id = package.author:lower() .. "/" .. package.name
|
||||
end
|
||||
local name_len = #package.name
|
||||
if package.type == "game" and name_len > 5 and package.name:sub(name_len - 4) == "_game" then
|
||||
package.id = package.author:lower() .. "/" .. package.name:sub(1, name_len - 5)
|
||||
else
|
||||
package.id = package.author:lower() .. "/" .. package.name
|
||||
end
|
||||
|
||||
store.packages = store.packages_full
|
||||
store.loaded = true
|
||||
end
|
||||
|
||||
core.delete_dir(tmpdir)
|
||||
store.packages = store.packages_full
|
||||
store.loaded = true
|
||||
end
|
||||
|
||||
function store.update_paths()
|
||||
|
Reference in New Issue
Block a user