Add updating to online content browser

This commit is contained in:
rubenwardy
2018-05-16 21:52:12 +01:00
committed by GitHub
parent 45e48295d2
commit 3eb363f813
11 changed files with 196 additions and 107 deletions

View File

@@ -15,6 +15,30 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local store = {}
local package_dialog = {}
local search_string = ""
local cur_page = 1
local num_per_page = 5
local filter_type = 1
local filter_types_titles = {
fgettext("All packages"),
fgettext("Games"),
fgettext("Mods"),
fgettext("Texture packs"),
}
local filter_types_type = {
nil,
"game",
"mod",
"txp",
}
local function download_package(param)
if core.download_file(param.package.url, param.filename) then
return {
@@ -39,7 +63,9 @@ local function start_install(calling_dialog, package)
local function callback(result)
if result.successful then
local path, msg = pkgmgr.install(result.package.type, result.filename, result.package.name)
local path, msg = pkgmgr.install(result.package.type,
result.filename, result.package.name,
result.package.path)
if not path then
gamedata.errormessage = msg
else
@@ -69,6 +95,7 @@ local function start_install(calling_dialog, package)
end
set_def("description", result.package.short_description)
set_def("author", result.package.author)
conf:set("release", result.package.release)
conf:write()
end
end
@@ -85,7 +112,7 @@ local function start_install(calling_dialog, package)
end
if not core.handle_async(download_package, params, callback) then
minetest.log("error", "ERROR: async event failed")
core.log("error", "ERROR: async event failed")
gamedata.errormessage = fgettext("Failed to download $1", package.name)
end
@@ -111,19 +138,35 @@ local function start_install(calling_dialog, package)
end
local package_dialog = {}
function package_dialog.get_formspec()
local package = package_dialog.package
store.update_paths()
local formspec = {
"size[8,4;true]",
"size[9,4;true]",
"label[2.5,0.2;", core.formspec_escape(package.title), "]",
"textarea[0.2,1;8,3;;;", core.formspec_escape(package.short_description), "]",
"textarea[0.2,1;9,3;;;", core.formspec_escape(package.short_description), "]",
"button[0,0;2,1;back;", fgettext("Back"), "]",
"button[6,0;2,1;install;", fgettext("Install"), "]",
}
if not package.path then
formspec[#formspec + 1] = "button[7,0;2,1;install;"
formspec[#formspec + 1] = fgettext("Install")
formspec[#formspec + 1] = "]"
elseif package.installed_release < package.release then
formspec[#formspec + 1] = "button[7,0;2,1;install;"
formspec[#formspec + 1] = fgettext("Update")
formspec[#formspec + 1] = "]"
formspec[#formspec + 1] = "button[7,1;2,1;uninstall;"
formspec[#formspec + 1] = fgettext("Uninstall")
formspec[#formspec + 1] = "]"
else
formspec[#formspec + 1] = "button[7,0;2,1;uninstall;"
formspec[#formspec + 1] = fgettext("Uninstall")
formspec[#formspec + 1] = "]"
end
-- TODO: screenshots
return table.concat(formspec, "")
@@ -136,7 +179,15 @@ function package_dialog.handle_submit(this, fields, tabname, tabdata)
end
if fields.install then
start_install(package_dialog.package)
start_install(this, package_dialog.package)
return true
end
if fields.uninstall then
local dlg_delmod = create_delete_content_dlg(package_dialog.package)
dlg_delmod:set_parent(this)
this:hide()
dlg_delmod:show()
return true
end
@@ -151,28 +202,6 @@ function package_dialog.create(package)
nil)
end
local store = {}
local search_string = ""
local cur_page = 1
local num_per_page = 5
local filter_type = 1
local filter_types_titles = {
fgettext("All packages"),
fgettext("Games"),
fgettext("Mods"),
fgettext("Texture packs"),
}
local filter_types_type = {
nil,
"game",
"mod",
"txp",
}
function store.load()
store.packages_full = core.get_package_list()
store.packages = store.packages_full
@@ -209,6 +238,7 @@ function store.update_paths()
if content and content.author == package.author then
package.path = content.path
package.installed_release = content.release
else
package.path = nil
end
@@ -301,18 +331,24 @@ function store.get_formspec()
formspec[#formspec + 1] = "]"
-- buttons
if package.path then
formspec[#formspec + 1] = "button[6,0;1.5,1;uninstall_"
formspec[#formspec + 1] = tostring(i)
formspec[#formspec + 1] = ";"
formspec[#formspec + 1] = fgettext("Uninstall")
formspec[#formspec + 1] = "]"
else
if not package.path then
formspec[#formspec + 1] = "button[6,0;1.5,1;install_"
formspec[#formspec + 1] = tostring(i)
formspec[#formspec + 1] = ";"
formspec[#formspec + 1] = fgettext("Install")
formspec[#formspec + 1] = "]"
elseif package.installed_release < package.release then
formspec[#formspec + 1] = "button[6,0;1.5,1;install_"
formspec[#formspec + 1] = tostring(i)
formspec[#formspec + 1] = ";"
formspec[#formspec + 1] = fgettext("Update")
formspec[#formspec + 1] = "]"
else
formspec[#formspec + 1] = "button[6,0;1.5,1;uninstall_"
formspec[#formspec + 1] = tostring(i)
formspec[#formspec + 1] = ";"
formspec[#formspec + 1] = fgettext("Uninstall")
formspec[#formspec + 1] = "]"
end
formspec[#formspec + 1] = "button[7.5,0;1.5,1;view_"
formspec[#formspec + 1] = tostring(i)