1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-07-22 17:18:39 +00:00

Add HTTP API to main menu (#9998)

This commit is contained in:
rubenwardy 2020-06-06 17:17:08 +01:00 committed by GitHub
parent 7ec0e3df35
commit 60bab8b2d7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 289 additions and 112 deletions

View file

@ -83,6 +83,24 @@ void ModApiHttp::push_http_fetch_result(lua_State *L, HTTPFetchResult &res, bool
setstringfield(L, -1, "data", res.data);
}
// http_api.fetch_sync(HTTPRequest definition)
int ModApiHttp::l_http_fetch_sync(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
HTTPFetchRequest req;
read_http_fetch_request(L, req);
infostream << "Mod performs HTTP request with URL " << req.url << std::endl;
HTTPFetchResult res;
httpfetch_sync(req, res);
push_http_fetch_result(L, res, true);
return 1;
}
// http_api.fetch_async(HTTPRequest definition)
int ModApiHttp::l_http_fetch_async(lua_State *L)
{
@ -180,11 +198,35 @@ int ModApiHttp::l_request_http_api(lua_State *L)
return 1;
}
int ModApiHttp::l_get_http_api(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
lua_newtable(L);
HTTP_API(fetch_async);
HTTP_API(fetch_async_get);
HTTP_API(fetch_sync);
return 1;
}
#endif
void ModApiHttp::Initialize(lua_State *L, int top)
{
#if USE_CURL
API_FCT(request_http_api);
bool isMainmenu = false;
#ifndef SERVER
isMainmenu = ModApiBase::getGuiEngine(L) != nullptr;
#endif
if (isMainmenu) {
API_FCT(get_http_api);
} else {
API_FCT(request_http_api);
}
#endif
}

View file

@ -32,6 +32,9 @@ private:
static void read_http_fetch_request(lua_State *L, HTTPFetchRequest &req);
static void push_http_fetch_result(lua_State *L, HTTPFetchResult &res, bool completed = true);
// http_fetch_sync({url=, timeout=, post_data=})
static int l_http_fetch_sync(lua_State *L);
// http_fetch_async({url=, timeout=, post_data=})
static int l_http_fetch_async(lua_State *L);
@ -40,6 +43,9 @@ private:
// request_http_api()
static int l_request_http_api(lua_State *L);
// get_http_api()
static int l_get_http_api(lua_State *L);
#endif
public:

View file

@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "content/mods.h"
#include "cpp_api/s_internal.h"
#include "lua_api/l_base.h"
#include "lua_api/l_http.h"
#include "lua_api/l_mainmenu.h"
#include "lua_api/l_sound.h"
#include "lua_api/l_util.h"
@ -67,6 +68,7 @@ void MainMenuScripting::initializeModApi(lua_State *L, int top)
ModApiMainMenu::Initialize(L, top);
ModApiUtil::Initialize(L, top);
ModApiSound::Initialize(L, top);
ModApiHttp::Initialize(L, top);
asyncEngine.registerStateInitializer(registerLuaClasses);
asyncEngine.registerStateInitializer(ModApiMainMenu::InitializeAsync);