diff options
author | Elijah Duffy <enduffy2014@outlook.com> | 2017-07-14 11:37:58 -0700 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2017-07-14 20:37:58 +0200 |
commit | dc3ca09e0e0e25f40cccae12c73830b0334ffb60 (patch) | |
tree | 25ce565ec4db341868754b004fe167c452950b50 | |
parent | 32b68de65a303f0e063cb0d61a79ff7b4837ad7f (diff) | |
download | minetest-dc3ca09e0e0e25f40cccae12c73830b0334ffb60.tar.gz minetest-dc3ca09e0e0e25f40cccae12c73830b0334ffb60.tar.bz2 minetest-dc3ca09e0e0e25f40cccae12c73830b0334ffb60.zip |
Remove remaining modstore code (#6120)
-rw-r--r-- | builtin/mainmenu/init.lua | 8 | ||||
-rw-r--r-- | builtin/mainmenu/store.lua | 614 | ||||
-rw-r--r-- | builtin/mainmenu/tab_mods.lua | 21 | ||||
-rw-r--r-- | builtin/settingtypes.txt | 6 | ||||
-rw-r--r-- | doc/menu_lua_api.txt | 20 | ||||
-rw-r--r-- | minetest.conf.example | 12 | ||||
-rw-r--r-- | src/convert_json.cpp | 321 | ||||
-rw-r--r-- | src/convert_json.h | 6 | ||||
-rw-r--r-- | src/defaultsettings.cpp | 3 | ||||
-rw-r--r-- | src/mods.cpp | 19 | ||||
-rw-r--r-- | src/mods.h | 60 | ||||
-rw-r--r-- | src/script/lua_api/l_mainmenu.cpp | 145 | ||||
-rw-r--r-- | src/script/lua_api/l_mainmenu.h | 4 | ||||
-rw-r--r-- | src/settings_translation_file.cpp | 3 |
14 files changed, 1 insertions, 1241 deletions
diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua index da4c3ccef..ea64bf03c 100644 --- a/builtin/mainmenu/init.lua +++ b/builtin/mainmenu/init.lua @@ -36,7 +36,6 @@ dofile(basepath .. "fstk" .. DIR_DELIM .. "ui.lua") dofile(menupath .. DIR_DELIM .. "common.lua") dofile(menupath .. DIR_DELIM .. "gamemgr.lua") dofile(menupath .. DIR_DELIM .. "modmgr.lua") -dofile(menupath .. DIR_DELIM .. "store.lua") dofile(menupath .. DIR_DELIM .. "textures.lua") dofile(menupath .. DIR_DELIM .. "dlg_config_world.lua") @@ -152,13 +151,6 @@ local function init_globals() ui.set_default("maintab") tv_main:show() - -- Create modstore ui - if PLATFORM == "Android" then - modstore.init({x = 12, y = 6}, 3, 2) - else - modstore.init({x = 12, y = 8}, 4, 3) - end - ui.update() core.sound_play("main_menu", true) diff --git a/builtin/mainmenu/store.lua b/builtin/mainmenu/store.lua deleted file mode 100644 index 59391f8bc..000000000 --- a/builtin/mainmenu/store.lua +++ /dev/null @@ -1,614 +0,0 @@ ---Minetest ---Copyright (C) 2013 sapier --- ---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 ---the Free Software Foundation; either version 2.1 of the License, or ---(at your option) any later version. --- ---This program is distributed in the hope that it will be useful, ---but WITHOUT ANY WARRANTY; without even the implied warranty of ---MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ---GNU Lesser General Public License for more details. --- ---You should have received a copy of the GNU Lesser General Public License along ---with this program; if not, write to the Free Software Foundation, Inc., ---51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - --------------------------------------------------------------------------------- - ---modstore implementation -modstore = {} - --------------------------------------------------------------------------------- --- @function [parent=#modstore] init -function modstore.init(size, unsortedmods, searchmods) - - modstore.mods_on_unsorted_page = unsortedmods - modstore.mods_on_search_page = searchmods - modstore.modsperpage = modstore.mods_on_unsorted_page - - modstore.basetexturedir = core.get_texturepath() .. DIR_DELIM .. "base" .. - DIR_DELIM .. "pack" .. DIR_DELIM - - modstore.lastmodtitle = "" - modstore.last_search = "" - - modstore.searchlist = filterlist.create( - function() - if modstore.modlist_unsorted ~= nil and - modstore.modlist_unsorted.data ~= nil then - return modstore.modlist_unsorted.data - end - return {} - end, - function(element,modid) - if element.id == modid then - return true - end - return false - end, --compare fct - nil, --uid match fct - function(element,substring) - if substring == nil or - substring == "" then - return false - end - substring = substring:upper() - - if element.title ~= nil and - element.title:upper():find(substring) ~= nil then - return true - end - - if element.details ~= nil and - element.details.author ~= nil and - element.details.author:upper():find(substring) ~= nil then - return true - end - - if element.details ~= nil and - element.details.description ~= nil and - element.details.description:upper():find(substring) ~= nil then - return true - end - return false - end --filter fct - ) - - modstore.current_list = nil - - modstore.tv_store = tabview_create("modstore",size,{x=0,y=0}) - - modstore.tv_store:set_global_event_handler(modstore.handle_events) - - modstore.tv_store:add( - { - name = "unsorted", - caption = fgettext("Unsorted"), - cbf_formspec = modstore.unsorted_tab, - cbf_button_handler = modstore.handle_buttons, - on_change = - function() modstore.modsperpage = modstore.mods_on_unsorted_page end - } - ) - - modstore.tv_store:add( - { - name = "search", - caption = fgettext("Search"), - cbf_formspec = modstore.getsearchpage, - cbf_button_handler = modstore.handle_buttons, - on_change = modstore.activate_search_tab - } - ) -end - --------------------------------------------------------------------------------- --- @function [parent=#modstore] nametoindex -function modstore.nametoindex(name) - - for i=1,#modstore.tabnames,1 do - if modstore.tabnames[i] == name then - return i - end - end - - return 1 -end - --------------------------------------------------------------------------------- --- @function [parent=#modstore] showdownloading -function modstore.showdownloading(title) - local new_dlg = dialog_create("store_downloading", - function(data) - return "size[6,2]label[0.25,0.75;" .. - fgettext("Downloading $1, please wait...", data.title) .. "]" - end, - function(this,fields) - if fields["btn_hidden_close_download"] ~= nil then - if fields["btn_hidden_close_download"].successfull then - modstore.lastmodentry = fields["btn_hidden_close_download"] - modstore.successfulldialog(this) - else - this.parent:show() - this:delete() - modstore.lastmodtitle = "" - end - - return true - end - - return false - end, - nil) - - new_dlg:set_parent(modstore.tv_store) - modstore.tv_store:hide() - new_dlg.data.title = title - new_dlg:show() -end - --------------------------------------------------------------------------------- --- @function [parent=#modstore] successfulldialog -function modstore.successfulldialog(downloading_dlg) - local new_dlg = dialog_create("store_downloading", - function(data) - local retval = "" - retval = retval .. "size[6,2,true]" - if modstore.lastmodentry ~= nil then - retval = retval .. "label[0,0.25;" .. fgettext("Successfully installed:") .. "]" - retval = retval .. "label[3,0.25;" .. modstore.lastmodentry.moddetails.title .. "]" - retval = retval .. "label[0,0.75;" .. fgettext("Shortname:") .. "]" - retval = retval .. "label[3,0.75;" .. core.formspec_escape(modstore.lastmodentry.moddetails.basename) .. "]" - end - retval = retval .. "button[2.2,1.5;1.5,0.5;btn_confirm_mod_successfull;" .. fgettext("Ok") .. "]" - return retval - end, - function(this,fields) - if fields["btn_confirm_mod_successfull"] ~= nil then - this.parent:show() - downloading_dlg:delete() - this:delete() - - return true - end - - return false - end, - nil) - - new_dlg:set_parent(modstore.tv_store) - modstore.tv_store:hide() - new_dlg:show() -end - --------------------------------------------------------------------------------- --- @function [parent=#modstore] handle_buttons -function modstore.handle_buttons(parent, fields, name, data) - - if fields["btn_modstore_page_up"] then - if modstore.current_list ~= nil and modstore.current_list.page > 0 then - modstore.current_list.page = modstore.current_list.page - 1 - end - return true - end - - if fields["btn_modstore_page_down"] then - if modstore.current_list ~= nil and - modstore.current_list.page <modstore.current_list.pagecount-1 then - modstore.current_list.page = modstore.current_list.page +1 - end - return true - end - - if fields["btn_modstore_search"] or - (fields["key_enter"] and fields["te_modstore_search"] ~= nil) then - modstore.last_search = fields["te_modstore_search"] - filterlist.set_filtercriteria(modstore.searchlist,fields["te_modstore_search"]) - filterlist.refresh(modstore.searchlist) - modstore.currentlist = { - page = 0, - pagecount = math.ceil(filterlist.size(modstore.searchlist) / modstore.modsperpage), - data = filterlist.get_list(modstore.searchlist), - } - return true - end - - if fields["btn_modstore_close"] then - local maintab = ui.find_by_name("maintab") - parent:hide() - maintab:show() - return true - end - - for key,value in pairs(fields) do - local foundat = key:find("btn_install_mod_") - if ( foundat == 1) then - local modid = tonumber(key:sub(17)) - for i=1,#modstore.modlist_unsorted.data,1 do - if modstore.modlist_unsorted.data[i].id == modid then - local moddetails = modstore.modlist_unsorted.data[i].details - modstore.lastmodtitle = moddetails.title - - if not core.handle_async( - function(param) - local fullurl = core.settings:get("modstore_download_url") .. - param.moddetails.download_url - - if param.version ~= nil then - local found = false - for i=1,#param.moddetails.versions, 1 do - if param.moddetails.versions[i].date:sub(1,10) == param.version then - fullurl = core.settings:get("modstore_download_url") .. - param.moddetails.versions[i].download_url - found = true - end - end - - if not found then - core.log("error","no download url found for version " .. dump(param.version)) - return { - moddetails = param.moddetails, - successfull = false - } - end - end - - if core.download_file(fullurl,param.filename) then - return { - texturename = param.texturename, - moddetails = param.moddetails, - filename = param.filename, - successfull = true - } - else - core.log("error","downloading " .. dump(fullurl) .. " failed") - return { - moddetails = param.moddetails, - successfull = false - } - end - end, - { - moddetails = moddetails, - version = fields["dd_version" .. modid], - filename = os.tempfolder() .. "_MODNAME_" .. moddetails.basename .. ".zip", - texturename = modstore.modlist_unsorted.data[i].texturename - }, - function(result) - --print("Result from async: " .. dump(result.successfull)) - if result.successfull then - modmgr.installmod(result.filename,result.moddetails.basename) - os.remove(result.filename) - else - gamedata.errormessage = "Failed to download " .. result.moddetails.title - end - - if gamedata.errormessage == nil then - core.button_handler({btn_hidden_close_download=result}) - else - core.button_handler({btn_hidden_close_download={successfull=false}}) - end - end - ) then - print("ERROR: async event failed") - gamedata.errormessage = "Failed to download " .. modstore.lastmodtitle - end - - modstore.showdownloading(modstore.lastmodtitle) - return true - end - end - return true - end - end - - return false -end - --------------------------------------------------------------------------------- --- @function [parent=#modstore] handle_events -function modstore.handle_events(this,event) - if (event == "MenuQuit") then - this:hide() - return true - end -end - --------------------------------------------------------------------------------- --- @function [parent=#modstore] update_modlist -function modstore.update_modlist() - modstore.modlist_unsorted = {} - modstore.modlist_unsorted.data = {} - modstore.modlist_unsorted.pagecount = 1 - modstore.modlist_unsorted.page = 0 - - core.handle_async( - function(param) - return core.get_modstore_list() - end, - nil, - function(result) - if result ~= nil then - modstore.modlist_unsorted = {} - modstore.modlist_unsorted.data = result - - if modstore.modlist_unsorted.data ~= nil then - modstore.modlist_unsorted.pagecount = - math.ceil((#modstore.modlist_unsorted.data / modstore.modsperpage)) - else - modstore.modlist_unsorted.data = {} - modstore.modlist_unsorted.pagecount = 1 - end - modstore.modlist_unsorted.page = 0 - modstore.fetchdetails() - core.event_handler("Refresh") - end - end - ) -end - --------------------------------------------------------------------------------- --- @function [parent=#modstore] fetchdetails -function modstore.fetchdetails() - - for i=1,#modstore.modlist_unsorted.data,1 do - core.handle_async( - function(param) - param.details = core.get_modstore_details(tostring(param.modid)) - return param - end, - { - modid=modstore.modlist_unsorted.data[i].id, - listindex=i - }, - function(result) - if result ~= nil and - modstore.modlist_unsorted ~= nil - and modstore.modlist_unsorted.data ~= nil and - modstore.modlist_unsorted.data[result.listindex] ~= nil and - modstore.modlist_unsorted.data[result.listindex].id ~= nil then - - modstore.modlist_unsorted.data[result.listindex].details = result.details - core.event_handler("Refresh") - end - end - ) - end -end - --------------------------------------------------------------------------------- --- @function [parent=#modstore] getscreenshot -function modstore.getscreenshot(ypos,listentry) - - if listentry.details ~= nil and - (listentry.details.screenshot_url == nil or - listentry.details.screenshot_url == "") then - - if listentry.texturename == nil then - listentry.texturename = defaulttexturedir .. "no_screenshot.png" - end - - return "image[0,".. ypos .. ";3,2;" .. - core.formspec_escape(listentry.texturename) .. "]" - end - - if listentry.details ~= nil and - listentry.texturename == nil then - --make sure we don't download multiple times - listentry.texturename = "in progress" - - --prepare url and filename - local fullurl = core.settings:get("modstore_download_url") .. - listentry.details.screenshot_url - local filename = os.tempfolder() .. "_MID_" .. listentry.id - - --trigger download - core.handle_async( - --first param is downloadfct - function(param) - param.successfull = core.download_file(param.fullurl,param.filename) - return param - end, - --second parameter is data passed to async job - { - fullurl = fullurl, - filename = filename, - modid = listentry.id - }, - --integrate result to raw list - function(result) - if result.successfull then - local found = false - for i=1,#modstore.modlist_unsorted.data,1 do - if modstore.modlist_unsorted.data[i].id == result.modid then - found = true - modstore.modlist_unsorted.data[i].texturename = result.filename - break - end - end - if found then - core.event_handler("Refresh") - else - core.log("error","got screenshot but didn't find matching mod: " .. result.modid) - end - end - end - ) - end - - if listentry.texturename ~= nil and - listentry.texturename ~= "in progress" then - return "image[0,".. ypos .. ";3,2;" .. - core.formspec_escape(listentry.texturename) .. "]" - end - - return "" -end - --------------------------------------------------------------------------------- ---@function [parent=#modstore] getshortmodinfo -function modstore.getshortmodinfo(ypos,listentry,details) - local retval = "" - - retval = retval .. "box[0," .. ypos .. ";11.4,1.75;#FFFFFF]" - - --screenshot - retval = retval .. modstore.getscreenshot(ypos,listentry) - - --title + author - retval = retval .."label[2.75," .. ypos .. ";" .. - core.formspec_escape(details.title) .. " (" .. details.author .. ")]" - - --description - local descriptiony = ypos + 0.5 - retval = retval .. "textarea[3," .. descriptiony .. ";6.5,1.55;;" .. - core.formspec_escape(details.description) .. ";]" - - --rating - local ratingy = ypos - retval = retval .."label[7," .. ratingy .. ";" .. - fgettext("Rating") .. ":]" - retval = retval .. "label[8.7," .. ratingy .. ";" .. details.rating .."]" - - --versions (IMPORTANT has to be defined AFTER rating) - if details.versions ~= nil and - #details.versions > 1 then - local versiony = ypos + 0.05 - retval = retval .. "dropdown[9.1," .. versiony .. ";2.48,0.25;dd_version" .. details.id .. ";" - local versions = "" - for i=1,#details.versions , 1 do - if versions ~= "" then - versions = versions .. "," - end - - versions = versions .. details.versions[i].date:sub(1,10) - end - retval = retval .. versions .. ";1]" - end - - if details.basename then - --install button - local buttony = ypos + 1.2 - retval = retval .."button[9.1," .. buttony .. ";2.5,0.5;btn_install_mod_" .. details.id .. ";" - - if modmgr.mod_exists(details.basename) then - retval = retval .. fgettext("re-Install") .."]" - else - retval = retval .. fgettext("Install") .."]" - end - end - - return retval -end - --------------------------------------------------------------------------------- ---@function [parent=#modstore] getmodlist -function modstore.getmodlist(list,yoffset) - modstore.current_list = list - - if yoffset == nil then - yoffset = 0 - end - - local sb_y_start = 0.2 + yoffset - local sb_y_end = (modstore.modsperpage * 1.75) + ((modstore.modsperpage-1) * 0.15) - local close_button = "button[4," .. (sb_y_end + 0.3 + yoffset) .. - ";4,0.5;btn_modstore_close;" .. fgettext("Close store") .. "]" - - if #list.data == 0 then - return close_button - end - - local scrollbar = "" - scrollbar = scrollbar .. "label[0.1,".. (sb_y_end + 0.25 + yoffset) ..";" - .. fgettext("Page $1 of $2", list.page+1, list.pagecount) .. "]" - scrollbar = scrollbar .. "box[11.6," .. sb_y_start .. ";0.28," .. sb_y_end .. ";#000000]" - local scrollbarpos = (sb_y_start + 0.5) + - ((sb_y_end -1.6)/(list.pagecount-1)) * list.page - scrollbar = scrollbar .. "box[11.6," ..scrollbarpos .. ";0.28,0.5;#32CD32]" - scrollbar = scrollbar .. "button[11.6," .. (sb_y_start) - .. ";0.5,0.5;btn_modstore_page_up;^]" - scrollbar = scrollbar .. "button[11.6," .. (sb_y_start + sb_y_end - 0.5) - .. ";0.5,0.5;btn_modstore_page_down;v]" - - local retval = "" - - local endmod = (list.page * modstore.modsperpage) + modstore.modsperpage - - if (endmod > #list.data) then - endmod = #list.data - end - - for i=(list.page * modstore.modsperpage) +1, endmod, 1 do - --getmoddetails - local details = list.data[i].details - - if details == nil then - details = {} - details.title = list.data[i].title - details.author = "" - details.rating = -1 - details.description = "" - end - - if details ~= nil then - local screenshot_ypos = - yoffset +(i-1 - (list.page * modstore.modsperpage))*1.9 +0.2 - - retval = retval .. modstore.getshortmodinfo(screenshot_ypos, - list.data[i], - details) - end - end - - return retval .. scrollbar .. close_button -end - --------------------------------------------------------------------------------- ---@function [parent=#modstore] getsearchpage -function modstore.getsearchpage(tabview, name, tabdata) - local retval = "" - local search = "" - - if modstore.last_search ~= nil then - search = modstore.last_search - end - - retval = retval .. - "button[9.5,0.2;2.5,0.5;btn_modstore_search;".. fgettext("Search") .. "]" .. - "field[0.5,0.5;9,0.5;te_modstore_search;;" .. search .. "]" - - retval = retval .. - modstore.getmodlist( - modstore.currentlist, - 1.75) - - return retval; -end - --------------------------------------------------------------------------------- ---@function [parent=#modstore] unsorted_tab -function modstore.unsorted_tab() - return modstore.getmodlist(modstore.modlist_unsorted) -end - --------------------------------------------------------------------------------- ---@function [parent=#modstore] activate_search_tab -function modstore.activate_search_tab(type, old_tab, new_tab) - - if old_tab == new_tab then - return - end - filterlist.set_filtercriteria(modstore.searchlist,modstore.last_search) - filterlist.refresh(modstore.searchlist) - modstore.modsperpage = modstore.mods_on_search_page - modstore.currentlist = { - page = 0, - pagecount = - math.ceil(filterlist.size(modstore.searchlist) / modstore.modsperpage), - data = filterlist.get_list(modstore.searchlist), - } -end - diff --git a/builtin/mainmenu/tab_mods.lua b/builtin/mainmenu/tab_mods.lua index 9510a9e18..d829c2cce 100644 --- a/builtin/mainmenu/tab_mods.lua +++ b/builtin/mainmenu/tab_mods.lua @@ -33,15 +33,6 @@ local function get_formspec(tabview, name, tabdata) modmgr.render_modlist(modmgr.global_mods) .. ";" .. tabdata.selected_mod .. "]" - retval = retval .. --- "label[0.8,4.2;" .. fgettext("Add mod:") .. "]" .. --- TODO Disabled due to upcoming release 0.4.8 and irrlicht messing up localization --- "button[0.75,4.85;1.8,0.5;btn_mod_mgr_install_local;".. fgettext("Local install") .. "]" .. - --- TODO Disabled due to service being offline, and not likely to come online again, in this form --- "button[0,4.85;5.25,0.5;btn_modstore;".. fgettext("Online mod repository") .. "]" - "" - local selected_mod = nil if filterlist.size(modmgr.global_mods) >= tabdata.selected_mod then @@ -138,18 +129,6 @@ local function handle_buttons(tabview, fields, tabname, tabdata) return true end - if fields["btn_modstore"] ~= nil then - local modstore_ui = ui.find_by_name("modstore") - if modstore_ui ~= nil then - tabview:hide() - modstore.update_modlist() - modstore_ui:show() - else - print("modstore ui element not found") - end - return true - end - if fields["btn_mod_mgr_rename_modpack"] ~= nil then local dlg_renamemp = create_rename_modpack_dlg(tabdata.selected_mod) dlg_renamemp:set_parent(tabview) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 87b33fa02..3f9163be9 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -1601,11 +1601,5 @@ main_menu_game_mgr (Main menu game manager) int 0 main_menu_mod_mgr (Main menu mod manager) int 1 -modstore_download_url (Modstore download URL) string https://forum.minetest.net/media/ - -modstore_listmods_url (Modstore mods list URL) string https://forum.minetest.net/mmdb/mods/ - -modstore_details_url (Modstore details URL) string https://forum.minetest.net/mmdb/mod/*/ - # Print the engine's profiling data in regular intervals (in seconds). 0 = disable. Useful for developers. profiler_print_interval (Engine profiling data print interval) int 0 diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt index a9392ff93..449b18b1c 100644 --- a/doc/menu_lua_api.txt +++ b/doc/menu_lua_api.txt @@ -37,26 +37,6 @@ core.get_modpath() (possible in async calls) ^ returns path to global modpath core.get_clientmodpath() (possible in async calls) ^ returns path to global client-side modpath -core.get_modstore_details(modid) (possible in async calls) -^ modid numeric id of mod in modstore -^ returns { - id = <numeric id of mod in modstore>, - title = <human readable title>, - basename = <basename for mod>, - description = <description of mod>, - author = <author of mod>, - download_url= <best match download url>, - license = <short description of license>, - rating = <float value of current rating> -} -core.get_modstore_list() (possible in async calls) -^ returns { - [1] = { - id = <numeric id of mod in modstore>, - title = <human readable title>, - basename = <basename for mod> - } -} core.get_gamepath() (possible in async calls) ^ returns path to global gamepath core.get_texturepath() (possible in async calls) diff --git a/minetest.conf.example b/minetest.conf.example index de5e0f566..d0dce0ed8 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -1499,7 +1499,7 @@ # Y of upper limit of large caves. # type: int # mgcarpathian_large_cave_depth = -33 - + # Y of upper limit of lava in large caves. # type: int # mgcarpathian_lava_depth = -256 @@ -1961,16 +1961,6 @@ # type: int # main_menu_mod_mgr = 1 -# type: string -# modstore_download_url = https://forum.minetest.net/media/ - -# type: string -# modstore_listmods_url = https://forum.minetest.net/mmdb/mods/ - -# type: string -# modstore_details_url = https://forum.minetest.net/mmdb/mod/*/ - # Print the engine's profiling data in regular intervals (in seconds). 0 = disable. Useful for developers. # type: int # profiler_print_interval = 0 - diff --git a/src/convert_json.cpp b/src/convert_json.cpp index e548c45f5..1343903b4 100644 --- a/src/convert_json.cpp +++ b/src/convert_json.cpp @@ -64,324 +64,3 @@ Json::Value fetchJsonValue(const std::string &url, return root; } - -std::vector<ModStoreMod> readModStoreList(Json::Value& modlist) { - std::vector<ModStoreMod> retval; - - if (modlist.isArray()) { - for (unsigned int i = 0; i < modlist.size(); i++) - { - ModStoreMod toadd; - toadd.valid = true; - - //id - if (modlist[i]["id"].asString().size()) { - std::string id_raw = modlist[i]["id"].asString(); - char* endptr = 0; - int numbervalue = strtol(id_raw.c_str(),&endptr,10); - - if ((id_raw != "") && (*endptr == 0)) { - toadd.id = numbervalue; - } - else { - errorstream << "readModStoreList: missing id" << std::endl; - toadd.valid = false; - } - } - else { - errorstream << "readModStoreList: missing id" << std::endl; - toadd.valid = false; - } - - //title - if (modlist[i]["title"].asString().size()) { - toadd.title = modlist[i]["title"].asString(); - } - else { - errorstream << "readModStoreList: missing title" << std::endl; - toadd.valid = false; - } - - //basename - if (modlist[i]["basename"].asString().size()) { - toadd.basename = modlist[i]["basename"].asString(); - } - else { - errorstream << "readModStoreList: missing basename" << std::endl; - toadd.valid = false; - } - - //author - - //rating - - //version - - if (toadd.valid) { - retval.push_back(toadd); - } - } - } - return retval; -} - -ModStoreModDetails readModStoreModDetails(Json::Value& details) { - - ModStoreModDetails retval; - - retval.valid = true; - - //version set - if (details["version_set"].isArray()) { - for (unsigned int i = 0; i < details["version_set"].size(); i++) - { - ModStoreVersionEntry toadd; - - if (details["version_set"][i]["id"].asString().size()) { - std::string id_raw = details["version_set"][i]["id"].asString(); - char* endptr = 0; - int numbervalue = strtol(id_raw.c_str(),&endptr,10); - - if ((id_raw != "") && (*endptr == 0)) { - toadd.id = numbervalue; - } - } - else { - errorstream << "readModStoreModDetails: missing version_set id" << std::endl; - retval.valid = false; - } - - //date - if (details["version_set"][i]["date"].asString().size()) { - toadd.date = details["version_set"][i]["date"].asString(); - } - - //file - if (details["version_set"][i]["file"].asString().size()) { - toadd.file = details["version_set"][i]["file"].asString(); - } - else { - errorstream << "readModStoreModDetails: missing version_set file" << std::endl; - retval.valid = false; - } - - //approved - - //mtversion - - if( retval.valid ) { - retval.versions.push_back(toadd); - } - else { - break; - } - } - } - - if (retval.versions.size() < 1) { - infostream << "readModStoreModDetails: not a single version specified!" << std::endl; - retval.valid = false; - } - - //categories - if (details["categories"].isObject()) { - for (unsigned int i = 0; i < details["categories"].size(); i++) { - ModStoreCategoryInfo toadd; - - if (details["categories"][i]["id"].asString().size()) { - - std::string id_raw = details["categories"][i]["id"].asString(); - char* endptr = 0; - int numbervalue = strtol(id_raw.c_str(),&endptr,10); - - if ((id_raw != "") && (*endptr == 0)) { - toadd.id = numbervalue; - } - } - else { - errorstream << "readModStoreModDetails: missing categories id" << std::endl; - retval.valid = false; - } - if (details["categories"][i]["title"].asString().size()) { - toadd.name = details["categories"][i]["title"].asString(); - } - else { - errorstream << "readModStoreModDetails: missing categories title" << std::endl; - retval.valid = false; - } - - if( retval.valid ) { - retval.categories.push_back(toadd); - } - else { - break; - } - } - } - - //author - if (details["author"].isObject()) { - if (details["author"]["id"].asString().size()) { - - std::string id_raw = details["author"]["id"].asString(); - char* endptr = 0; - int numbervalue = strtol(id_raw.c_str(),&endptr,10); - - if ((id_raw != "") && (*endptr == 0)) { - retval.author.id = numbervalue; - } - else { - errorstream << "readModStoreModDetails: missing author id (convert)" << std::endl; - retval.valid = false; - } - } - else { - errorstream << "readModStoreModDetails: missing author id" << std::endl; - retval.valid = false; - } - - if (details["author"]["username"].asString().size()) { - retval.author.username = details["author"]["username"].asString(); - } - else { - errorstream << "readModStoreModDetails: missing author username" << std::endl; - retval.valid = false; - } - } - else { - errorstream << "readModStoreModDetails: missing author" << std::endl; - retval.valid = false; - } - - //license - if (details["license"].isObject()) { - if (details["license"]["id"].asString().size()) { - - std::string id_raw = details["license"]["id"].asString(); - char* endptr = 0; - int numbervalue = strtol(id_raw.c_str(),&endptr,10); - - if ((id_raw != "") && (*endptr == 0)) { - retval.license.id = numbervalue; - } - } - else { - errorstream << "readModStoreModDetails: missing license id" << std::endl; - retval.valid = false; - } - - if (details["license"]["short"].asString().size()) { - retval.license.shortinfo = details["license"]["short"].asString(); - } - else { - errorstream << "readModStoreModDetails: missing license short" << std::endl; - retval.valid = false; - } - - if (details["license"]["link"].asString().size()) { - retval.license.url = details["license"]["link"].asString(); - } - - } - - //titlepic - if (details["titlepic"].isObject()) { - if (details["titlepic"]["id"].asString().size()) { - - std::string id_raw = details["titlepic"]["id"].asString(); - char* endptr = 0; - int numbervalue = strtol(id_raw.c_str(),&endptr,10); - - if ((id_raw != "") && (*endptr == 0)) { - retval.titlepic.id = numbervalue; - } - } - - if (details["titlepic"]["file"].asString().size()) { - retval.titlepic.file = details["titlepic"]["file"].asString(); - } - - if (details["titlepic"]["desc"].asString().size()) { - retval.titlepic.description = details["titlepic"]["desc"].asString(); - } - - if (details["titlepic"]["mod"].asString().size()) { - - std::string mod_raw = details["titlepic"]["mod"].asString(); - char* endptr = 0; - int numbervalue = strtol(mod_raw.c_str(),&endptr,10); - - if ((mod_raw != "") && (*endptr == 0)) { - retval.titlepic.mod = numbervalue; - } - } - } - - //id - if (details["id"].asString().size()) { - - std::string id_raw = details["id"].asString(); - char* endptr = 0; - int numbervalue = strtol(id_raw.c_str(),&endptr,10); - - if ((id_raw != "") && (*endptr == 0)) { - retval.id = numbervalue; - } - } - else { - errorstream << "readModStoreModDetails: missing id" << std::endl; - retval.valid = false; - } - - //title - if (details["title"].asString().size()) { - retval.title = details["title"].asString(); - } - else { - errorstream << "readModStoreModDetails: missing title" << std::endl; - retval.valid = false; - } - - //basename - if (details["basename"].asString().size()) { - retval.basename = details["basename"].asString(); - } - else { - errorstream << "readModStoreModDetails: missing basename" << std::endl; - retval.valid = false; - } - - //description - if (details["desc"].asString().size()) { - retval.description = details["desc"].asString(); - } - - //repository - if (details["replink"].asString().size()) { - retval.repository = details["replink"].asString(); - } - - //value - if (details["value"].isInt()) { - retval.rating = details["value"].asInt(); - } else { - retval.rating = 0; - } - - //depends - if (details["depends"].isArray()) { - //TODO - } - - //softdepends - if (details["softdep"].isArray()) { - //TODO - } - - //screenshot url - if (details["screenshot_url"].asString().size()) { - retval.screenshot_url = details["screenshot_url"].asString(); - } - - return retval; -} diff --git a/src/convert_json.h b/src/convert_json.h index 55321af5f..b5831884f 100644 --- a/src/convert_json.h +++ b/src/convert_json.h @@ -22,12 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include <json/json.h> -struct ModStoreMod; -struct ModStoreModDetails; - -std::vector<ModStoreMod> readModStoreList(Json::Value& modlist); -ModStoreModDetails readModStoreModDetails(Json::Value& details); - Json::Value fetchJsonValue(const std::string &url, std::vector<std::string> *extra_headers); diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index fe3a4d275..707f2c3aa 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -221,9 +221,6 @@ void set_default_settings(Settings *settings) settings->setDefault("main_menu_path", ""); settings->setDefault("main_menu_mod_mgr", "1"); settings->setDefault("main_menu_game_mgr", "0"); - settings->setDefault("modstore_download_url", "https://forum.minetest.net/media/"); - settings->setDefault("modstore_listmods_url", "https://forum.minetest.net/mmdb/mods/"); - settings->setDefault("modstore_details_url", "https://forum.minetest.net/mmdb/mod/*/"); settings->setDefault("serverlist_file", "favoriteservers.txt"); #if USE_FREETYPE diff --git a/src/mods.cpp b/src/mods.cpp index a555a5b13..7e2d83944 100644 --- a/src/mods.cpp +++ b/src/mods.cpp @@ -365,25 +365,6 @@ ClientModConfiguration::ClientModConfiguration(const std::string &path): } #endif -#if USE_CURL -Json::Value getModstoreUrl(const std::string &url) -{ - std::vector<std::string> extra_headers; - - bool special_http_header = true; - - try { - special_http_header = g_settings->getBool("modstore_disable_special_http_header"); - } catch (SettingNotFoundException) {} - - if (special_http_header) { - extra_headers.push_back("Accept: application/vnd.minetest.mmdb-v1+json"); - } - return fetchJsonValue(url, special_http_header ? &extra_headers : NULL); -} - -#endif - ModMetadata::ModMetadata(const std::string &mod_name): m_mod_name(mod_name) { diff --git a/src/mods.h b/src/mods.h index 1a5c32692..697fed38b 100644 --- a/src/mods.h +++ b/src/mods.h @@ -141,15 +141,6 @@ public: }; #endif -#if USE_CURL -Json::Value getModstoreUrl(const std::string &url); -#else -inline Json::Value getModstoreUrl(const std::string &url) -{ - return Json::Value(); -} -#endif - struct ModLicenseInfo { int id; std::string shortinfo; @@ -161,57 +152,6 @@ struct ModAuthorInfo { std::string username; }; -struct ModStoreMod { - int id; - std::string title; - std::string basename; - ModAuthorInfo author; - float rating; - bool valid; -}; - -struct ModStoreCategoryInfo { - int id; - std::string name; -}; - -struct ModStoreVersionEntry { - int id; - std::string date; - std::string file; - bool approved; - //ugly version number - int mtversion; -}; - -struct ModStoreTitlePic { - int id; - std::string file; - std::string description; - int mod; -}; - -struct ModStoreModDetails { - /* version_set?? */ - std::vector<ModStoreCategoryInfo> categories; - ModAuthorInfo author; - ModLicenseInfo license; - ModStoreTitlePic titlepic; - int id; - std::string title; - std::string basename; - std::string description; - std::string repository; - float rating; - std::vector<std::string> depends; - std::vector<std::string> softdeps; - - std::string download_url; - std::string screenshot_url; - std::vector<ModStoreVersionEntry> versions; - bool valid; -}; - class ModMetadata: public Metadata { public: diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 917fea134..b0ce6b740 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -311,147 +311,6 @@ int ModApiMainMenu::l_get_games(lua_State *L) return 1; } /******************************************************************************/ -int ModApiMainMenu::l_get_modstore_details(lua_State *L) -{ - const char *modid = luaL_checkstring(L, 1); - - if (modid != 0) { - Json::Value details; - std::string url = ""; - try{ - url = g_settings->get("modstore_details_url"); - } - catch(SettingNotFoundException &e) { - lua_pushnil(L); - return 1; - } - - size_t idpos = url.find("*"); - url.erase(idpos,1); - url.insert(idpos,modid); - - details = getModstoreUrl(url); - - ModStoreModDetails current_mod = readModStoreModDetails(details); - - if ( current_mod.valid) { - lua_newtable(L); - int top = lua_gettop(L); - - lua_pushstring(L,"id"); - lua_pushnumber(L,current_mod.id); - lua_settable(L, top); - - lua_pushstring(L,"title"); - lua_pushstring(L,current_mod.title.c_str()); - lua_settable(L, top); - - lua_pushstring(L,"basename"); - lua_pushstring(L,current_mod.basename.c_str()); - lua_settable(L, top); - - lua_pushstring(L,"description"); - lua_pushstring(L,current_mod.description.c_str()); - lua_settable(L, top); - - lua_pushstring(L,"author"); - lua_pushstring(L,current_mod.author.username.c_str()); - lua_settable(L, top); - - lua_pushstring(L,"download_url"); - lua_pushstring(L,current_mod.versions[0].file.c_str()); - lua_settable(L, top); - - lua_pushstring(L,"versions"); - lua_newtable(L); - int versionstop = lua_gettop(L); - for (unsigned int i=0;i < current_mod.versions.size(); i++) { - lua_pushnumber(L,i+1); - lua_newtable(L); - int current_element = lua_gettop(L); - - lua_pushstring(L,"date"); - lua_pushstring(L,current_mod.versions[i].date.c_str()); - lua_settable(L,current_element); - - lua_pushstring(L,"download_url"); - lua_pushstring(L,current_mod.versions[i].file.c_str()); - lua_settable(L,current_element); - - lua_settable(L,versionstop); - } - lua_settable(L, top); - - lua_pushstring(L,"screenshot_url"); - lua_pushstring(L,current_mod.titlepic.file.c_str()); - lua_settable(L, top); - - lua_pushstring(L,"license"); - lua_pushstring(L,current_mod.license.shortinfo.c_str()); - lua_settable(L, top); - - lua_pushstring(L,"rating"); - lua_pushnumber(L,current_mod.rating); - lua_settable(L, top); - - //TODO depends - - //TODO softdepends - return 1; - } - } - return 0; -} - -/******************************************************************************/ -int ModApiMainMenu::l_get_modstore_list(lua_State *L) -{ - Json::Value mods; - std::string url = ""; - try{ - url = g_settings->get("modstore_listmods_url"); - } - catch(SettingNotFoundException &e) { - lua_pushnil(L); - return 1; - } - - mods = getModstoreUrl(url); - - std::vector<ModStoreMod> moddata = readModStoreList(mods); - - lua_newtable(L); - int top = lua_gettop(L); - unsigned int index = 1; - - for (unsigned int i = 0; i < moddata.size(); i++) - { - if (moddata[i].valid) { - lua_pushnumber(L,index); - lua_newtable(L); - - int top_lvl2 = lua_gettop(L); - - lua_pushstring(L,"id"); - lua_pushnumber(L,moddata[i].id); - lua_settable(L, top_lvl2); - - lua_pushstring(L,"title"); - lua_pushstring(L,moddata[i].title.c_str()); - lua_settable(L, top_lvl2); - - lua_pushstring(L,"basename"); - lua_pushstring(L,moddata[i].basename.c_str()); - lua_settable(L, top_lvl2); - - lua_settable(L, top); - index++; - } - } - return 1; -} - -/******************************************************************************/ int ModApiMainMenu::l_get_favorites(lua_State *L) { std::string listtype = "local"; @@ -1137,8 +996,6 @@ void ModApiMainMenu::Initialize(lua_State *L, int top) API_FCT(get_mainmenu_path); API_FCT(show_path_select_dialog); API_FCT(download_file); - API_FCT(get_modstore_details); - API_FCT(get_modstore_list); API_FCT(gettext); API_FCT(get_video_drivers); API_FCT(get_video_modes); @@ -1166,7 +1023,5 @@ void ModApiMainMenu::InitializeAsync(lua_State *L, int top) API_FCT(copy_dir); //API_FCT(extract_zip); //TODO remove dependency to GuiEngine API_FCT(download_file); - API_FCT(get_modstore_details); - API_FCT(get_modstore_list); //API_FCT(gettext); (gettext lib isn't threadsafe) } diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h index 1d3e931e1..4be07576c 100644 --- a/src/script/lua_api/l_mainmenu.h +++ b/src/script/lua_api/l_mainmenu.h @@ -124,10 +124,6 @@ private: static int l_extract_zip(lua_State *L); - static int l_get_modstore_details(lua_State *L); - - static int l_get_modstore_list(lua_State *L); - static int l_download_file(lua_State *L); static int l_get_video_drivers(lua_State *L); diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp index 3cd0755a6..d472852b8 100644 --- a/src/settings_translation_file.cpp +++ b/src/settings_translation_file.cpp @@ -769,9 +769,6 @@ fake_function() { gettext("Replaces the default main menu with a custom one."); gettext("Main menu game manager"); gettext("Main menu mod manager"); - gettext("Modstore download URL"); - gettext("Modstore mods list URL"); - gettext("Modstore details URL"); gettext("Engine profiling data print interval"); gettext("Print the engine's profiling data in regular intervals (in seconds). 0 = disable. Useful for developers."); } |