no message
This commit is contained in:
		@@ -23,7 +23,6 @@
 | 
			
		||||
#include "console.h"
 | 
			
		||||
#include "fs.h"
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#include "net.h"
 | 
			
		||||
#include "ext/gif.h"
 | 
			
		||||
#include "ext/file_dialog.h"
 | 
			
		||||
 | 
			
		||||
@@ -32,6 +31,10 @@
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
#include <lua.h>
 | 
			
		||||
#include <lauxlib.h>
 | 
			
		||||
#include <lualib.h>
 | 
			
		||||
 | 
			
		||||
#define CONSOLE_CURSOR_COLOR ((tic_color_red))
 | 
			
		||||
#define CONSOLE_BACK_TEXT_COLOR ((tic_color_dark_gray))
 | 
			
		||||
#define CONSOLE_FRONT_TEXT_COLOR ((tic_color_white))
 | 
			
		||||
@@ -2535,23 +2538,80 @@ static void processGesture(Console* console)
 | 
			
		||||
	else console->scroll.active = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	s32 major;
 | 
			
		||||
	s32 minor;
 | 
			
		||||
	s32 patch;
 | 
			
		||||
} NetVersion;
 | 
			
		||||
 | 
			
		||||
static lua_State* netLuaInit(u8* buffer, s32 size)
 | 
			
		||||
{
 | 
			
		||||
	if (buffer && size)
 | 
			
		||||
	{
 | 
			
		||||
		lua_State* lua = luaL_newstate();
 | 
			
		||||
 | 
			
		||||
		if(lua)
 | 
			
		||||
		{
 | 
			
		||||
			if(luaL_loadstring(lua, (char*)buffer) == LUA_OK && lua_pcall(lua, 0, LUA_MULTRET, 0) == LUA_OK)
 | 
			
		||||
				return lua;
 | 
			
		||||
 | 
			
		||||
			else lua_close(lua);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static NetVersion netVersionRequest()
 | 
			
		||||
{
 | 
			
		||||
	NetVersion version = 
 | 
			
		||||
	{
 | 
			
		||||
		.major = TIC_VERSION_MAJOR,
 | 
			
		||||
		.minor = TIC_VERSION_MINOR,
 | 
			
		||||
		.patch = TIC_VERSION_PATCH,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	s32 size = 0;
 | 
			
		||||
	void* buffer = getUrlRequest("/api?fn=version", &size);
 | 
			
		||||
 | 
			
		||||
	if(buffer && size)
 | 
			
		||||
	{
 | 
			
		||||
		lua_State* lua = netLuaInit(buffer, size);
 | 
			
		||||
 | 
			
		||||
		if(lua)
 | 
			
		||||
		{
 | 
			
		||||
			static const char* Fields[] = {"major", "minor", "patch"};
 | 
			
		||||
 | 
			
		||||
			for(s32 i = 0; i < COUNT_OF(Fields); i++)
 | 
			
		||||
			{
 | 
			
		||||
				lua_getglobal(lua, Fields[i]);
 | 
			
		||||
 | 
			
		||||
				if(lua_isinteger(lua, -1))
 | 
			
		||||
					((s32*)&version)[i] = (s32)lua_tointeger(lua, -1);
 | 
			
		||||
 | 
			
		||||
				lua_pop(lua, 1);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			lua_close(lua);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return version;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void checkNewVersion(Console* console)
 | 
			
		||||
{
 | 
			
		||||
	Net* net = _createNet();
 | 
			
		||||
 | 
			
		||||
	if(net)
 | 
			
		||||
	NetVersion version = netVersionRequest();
 | 
			
		||||
 | 
			
		||||
	if((version.major > TIC_VERSION_MAJOR) ||
 | 
			
		||||
		(version.major == TIC_VERSION_MAJOR && version.minor > TIC_VERSION_MINOR) ||
 | 
			
		||||
		(version.major == TIC_VERSION_MAJOR && version.minor == TIC_VERSION_MINOR && version.patch > TIC_VERSION_PATCH))
 | 
			
		||||
	{
 | 
			
		||||
		NetVersion version = netVersionRequest(net);
 | 
			
		||||
		free(net);
 | 
			
		||||
 | 
			
		||||
		if((version.major > TIC_VERSION_MAJOR) ||
 | 
			
		||||
			(version.major == TIC_VERSION_MAJOR && version.minor > TIC_VERSION_MINOR) ||
 | 
			
		||||
			(version.major == TIC_VERSION_MAJOR && version.minor == TIC_VERSION_MINOR && version.patch > TIC_VERSION_PATCH))
 | 
			
		||||
		{
 | 
			
		||||
			char msg[FILENAME_MAX] = {0};
 | 
			
		||||
			sprintf(msg, "\n A new version %i.%i.%i is available.\n", version.major, version.minor, version.patch);
 | 
			
		||||
			consolePrint(console, msg, (tic_color_light_green));
 | 
			
		||||
		}
 | 
			
		||||
		char msg[FILENAME_MAX] = {0};
 | 
			
		||||
		sprintf(msg, "\n A new version %i.%i.%i is available.\n", version.major, version.minor, version.patch);
 | 
			
		||||
		consolePrint(console, msg, (tic_color_light_green));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										134
									
								
								src/fs.c
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								src/fs.c
									
									
									
									
									
								
							@@ -22,13 +22,16 @@
 | 
			
		||||
 | 
			
		||||
#include "studio.h"
 | 
			
		||||
#include "fs.h"
 | 
			
		||||
#include "net.h"
 | 
			
		||||
#include "ext/file_dialog.h"
 | 
			
		||||
 | 
			
		||||
#include <dirent.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
#include <lua.h>
 | 
			
		||||
#include <lauxlib.h>
 | 
			
		||||
#include <lualib.h>
 | 
			
		||||
 | 
			
		||||
#if defined(__WINRT__) || defined(__TIC_WINDOWS__)
 | 
			
		||||
#include <direct.h>
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
@@ -49,8 +52,6 @@ struct FileSystem
 | 
			
		||||
{
 | 
			
		||||
	char dir[FILENAME_MAX];
 | 
			
		||||
	char work[FILENAME_MAX];
 | 
			
		||||
 | 
			
		||||
	Net* net;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char* getFilePath(FileSystem* fs, const char* name)
 | 
			
		||||
@@ -164,6 +165,127 @@ int _wremove(const wchar_t *);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	ListCallback callback;
 | 
			
		||||
	void* data;
 | 
			
		||||
} NetDirData;
 | 
			
		||||
 | 
			
		||||
static lua_State* netLuaInit(u8* buffer, s32 size)
 | 
			
		||||
{
 | 
			
		||||
    if (buffer && size)
 | 
			
		||||
    {
 | 
			
		||||
        lua_State* lua = luaL_newstate();
 | 
			
		||||
 | 
			
		||||
        if(lua)
 | 
			
		||||
        {
 | 
			
		||||
            if(luaL_loadstring(lua, (char*)buffer) == LUA_OK && lua_pcall(lua, 0, LUA_MULTRET, 0) == LUA_OK)
 | 
			
		||||
                return lua;
 | 
			
		||||
 | 
			
		||||
            else lua_close(lua);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void onDirResponse(u8* buffer, s32 size, void* data)
 | 
			
		||||
{
 | 
			
		||||
	NetDirData* netDirData = (NetDirData*)data;
 | 
			
		||||
 | 
			
		||||
	lua_State* lua = netLuaInit(buffer, size);
 | 
			
		||||
 | 
			
		||||
	if(lua)
 | 
			
		||||
	{
 | 
			
		||||
		{
 | 
			
		||||
			lua_getglobal(lua, "folders");
 | 
			
		||||
 | 
			
		||||
			if(lua_type(lua, -1) == LUA_TTABLE)
 | 
			
		||||
			{
 | 
			
		||||
				s32 count = (s32)lua_rawlen(lua, -1);
 | 
			
		||||
 | 
			
		||||
				for(s32 i = 1; i <= count; i++)
 | 
			
		||||
				{
 | 
			
		||||
					lua_geti(lua, -1, i);
 | 
			
		||||
 | 
			
		||||
					{
 | 
			
		||||
						lua_getfield(lua, -1, "name");
 | 
			
		||||
						if(lua_isstring(lua, -1))
 | 
			
		||||
							netDirData->callback(lua_tostring(lua, -1), NULL, 0, netDirData->data, true);
 | 
			
		||||
 | 
			
		||||
						lua_pop(lua, 1);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					lua_pop(lua, 1);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			lua_pop(lua, 1);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		{
 | 
			
		||||
			lua_getglobal(lua, "files");
 | 
			
		||||
 | 
			
		||||
			if(lua_type(lua, -1) == LUA_TTABLE)
 | 
			
		||||
			{
 | 
			
		||||
				s32 count = (s32)lua_rawlen(lua, -1);
 | 
			
		||||
 | 
			
		||||
				for(s32 i = 1; i <= count; i++)
 | 
			
		||||
				{
 | 
			
		||||
					lua_geti(lua, -1, i);
 | 
			
		||||
 | 
			
		||||
					char hash[FILENAME_MAX] = {0};
 | 
			
		||||
					char name[FILENAME_MAX] = {0};
 | 
			
		||||
 | 
			
		||||
					{
 | 
			
		||||
						lua_getfield(lua, -1, "hash");
 | 
			
		||||
						if(lua_isstring(lua, -1))
 | 
			
		||||
							strcpy(hash, lua_tostring(lua, -1));
 | 
			
		||||
 | 
			
		||||
						lua_pop(lua, 1);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					{
 | 
			
		||||
						lua_getfield(lua, -1, "name");
 | 
			
		||||
 | 
			
		||||
						if(lua_isstring(lua, -1))
 | 
			
		||||
							strcpy(name, lua_tostring(lua, -1));
 | 
			
		||||
 | 
			
		||||
						lua_pop(lua, 1);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					{
 | 
			
		||||
						lua_getfield(lua, -1, "id");
 | 
			
		||||
 | 
			
		||||
						if(lua_isinteger(lua, -1))
 | 
			
		||||
							netDirData->callback(name, hash, lua_tointeger(lua, -1), netDirData->data, false);
 | 
			
		||||
 | 
			
		||||
						lua_pop(lua, 1);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					lua_pop(lua, 1);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			lua_pop(lua, 1);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		lua_close(lua);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void netDirRequest(const char* path, ListCallback callback, void* data)
 | 
			
		||||
{
 | 
			
		||||
	char request[FILENAME_MAX] = {'\0'};
 | 
			
		||||
	sprintf(request, "/api?fn=dir&path=%s", path);
 | 
			
		||||
 | 
			
		||||
	s32 size = 0;
 | 
			
		||||
	void* buffer = getUrlRequest(request, &size);
 | 
			
		||||
 | 
			
		||||
	NetDirData netDirData = {callback, data};
 | 
			
		||||
	onDirResponse(buffer, size, &netDirData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void fsEnumFiles(FileSystem* fs, ListCallback callback, void* data)
 | 
			
		||||
{
 | 
			
		||||
#if !defined(__EMSCRIPTEN__)
 | 
			
		||||
@@ -172,7 +294,7 @@ void fsEnumFiles(FileSystem* fs, ListCallback callback, void* data)
 | 
			
		||||
 | 
			
		||||
	if(isPublic(fs))
 | 
			
		||||
	{
 | 
			
		||||
		netDirRequest(fs->net, fs->work + sizeof(TIC_HOST), callback, data);
 | 
			
		||||
		netDirRequest(fs->work + sizeof(TIC_HOST), callback, data);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -721,7 +843,7 @@ void* fsLoadFile(FileSystem* fs, const char* name, s32* size)
 | 
			
		||||
 | 
			
		||||
			char path[FILENAME_MAX] = {0};
 | 
			
		||||
			sprintf(path, "/cart/%s/cart.tic", loadPublicCartData.hash);
 | 
			
		||||
			void* data = _netGetRequest(fs->net, path, size);
 | 
			
		||||
			void* data = getUrlRequest(path, size);
 | 
			
		||||
 | 
			
		||||
			if(data)
 | 
			
		||||
				fsSaveRootFile(fs, cachePath, data, *size, false);
 | 
			
		||||
@@ -786,8 +908,6 @@ FileSystem* createFileSystem(const char* path)
 | 
			
		||||
	FileSystem* fs = (FileSystem*)malloc(sizeof(FileSystem));
 | 
			
		||||
	memset(fs, 0, sizeof(FileSystem));
 | 
			
		||||
 | 
			
		||||
	fs->net = _createNet();
 | 
			
		||||
 | 
			
		||||
	strcpy(fs->dir, path);
 | 
			
		||||
 | 
			
		||||
	return fs;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/main.c
									
									
									
									
									
								
							@@ -54,6 +54,8 @@ static struct
 | 
			
		||||
		const u8* src;
 | 
			
		||||
	} mouse;
 | 
			
		||||
 | 
			
		||||
	Net* net;
 | 
			
		||||
 | 
			
		||||
	bool missedFrame;
 | 
			
		||||
	bool fullscreen;
 | 
			
		||||
} platform;
 | 
			
		||||
@@ -957,6 +959,11 @@ void _openSystemPath(const char* path) {}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void* _getUrlRequest(const char* url, s32* size)
 | 
			
		||||
{
 | 
			
		||||
	return netGetRequest(platform.net, url, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static System sysHandlers = 
 | 
			
		||||
{
 | 
			
		||||
	.setClipboardText = _setClipboardText,
 | 
			
		||||
@@ -965,9 +972,7 @@ static System sysHandlers =
 | 
			
		||||
	.getPerformanceCounter = _getPerformanceCounter,
 | 
			
		||||
	.getPerformanceFrequency = _getPerformanceFrequency,
 | 
			
		||||
 | 
			
		||||
	.netGetRequest = netGetRequest,
 | 
			
		||||
	.createNet = createNet,
 | 
			
		||||
	.closeNet = closeNet,
 | 
			
		||||
	.getUrlRequest = _getUrlRequest,
 | 
			
		||||
 | 
			
		||||
	.file_dialog_load = file_dialog_load,
 | 
			
		||||
	.file_dialog_save = file_dialog_save,
 | 
			
		||||
@@ -1063,6 +1068,8 @@ static s32 start(s32 argc, char **argv, const char* folder)
 | 
			
		||||
 | 
			
		||||
	initSound();
 | 
			
		||||
 | 
			
		||||
	platform.net = createNet();
 | 
			
		||||
 | 
			
		||||
	platform.window = SDL_CreateWindow( TIC_TITLE, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
 | 
			
		||||
		(TIC80_FULLWIDTH) * STUDIO_UI_SCALE,
 | 
			
		||||
		(TIC80_FULLHEIGHT) * STUDIO_UI_SCALE,
 | 
			
		||||
@@ -1123,6 +1130,8 @@ static s32 start(s32 argc, char **argv, const char* folder)
 | 
			
		||||
 | 
			
		||||
	studioClose();
 | 
			
		||||
 | 
			
		||||
	closeNet(platform.net);
 | 
			
		||||
 | 
			
		||||
	if(platform.audio.cvt.buf)
 | 
			
		||||
		SDL_free(platform.audio.cvt.buf);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										181
									
								
								src/studio.c
									
									
									
									
									
								
							
							
						
						
									
										181
									
								
								src/studio.c
									
									
									
									
									
								
							@@ -39,7 +39,6 @@
 | 
			
		||||
 | 
			
		||||
#include "fs.h"
 | 
			
		||||
 | 
			
		||||
#include "net.h"
 | 
			
		||||
#include "ext/gif.h"
 | 
			
		||||
#include "ext/md5.h"
 | 
			
		||||
 | 
			
		||||
@@ -1912,8 +1911,6 @@ void studioTick(void* pixels)
 | 
			
		||||
 | 
			
		||||
void studioClose()
 | 
			
		||||
{
 | 
			
		||||
	_closeNet(studioImpl.surf->net);
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		for(s32 i = 0; i < TIC_EDITOR_BANKS; i++)
 | 
			
		||||
		{
 | 
			
		||||
@@ -1963,21 +1960,6 @@ u64 getPerformanceFrequency()
 | 
			
		||||
	return studioImpl.system->getPerformanceFrequency();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* _netGetRequest(Net* net, const char* path, s32* size)
 | 
			
		||||
{
 | 
			
		||||
	return studioImpl.system->netGetRequest(net, path, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Net* _createNet()
 | 
			
		||||
{
 | 
			
		||||
	return studioImpl.system->createNet();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void _closeNet(Net* net)
 | 
			
		||||
{
 | 
			
		||||
	return studioImpl.system->closeNet(net);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void _file_dialog_load(file_dialog_load_callback callback, void* data)
 | 
			
		||||
{
 | 
			
		||||
	studioImpl.system->file_dialog_load(callback, data);
 | 
			
		||||
@@ -1988,164 +1970,6 @@ void _file_dialog_save(file_dialog_save_callback callback, const char* name, con
 | 
			
		||||
	studioImpl.system->file_dialog_save(callback, name, buffer, size, data, mode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static lua_State* netLuaInit(u8* buffer, s32 size)
 | 
			
		||||
{
 | 
			
		||||
    if (buffer && size)
 | 
			
		||||
    {
 | 
			
		||||
        lua_State* lua = luaL_newstate();
 | 
			
		||||
 | 
			
		||||
        if(lua)
 | 
			
		||||
        {
 | 
			
		||||
            if(luaL_loadstring(lua, (char*)buffer) == LUA_OK && lua_pcall(lua, 0, LUA_MULTRET, 0) == LUA_OK)
 | 
			
		||||
                return lua;
 | 
			
		||||
 | 
			
		||||
            else lua_close(lua);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NetVersion netVersionRequest(Net* net)
 | 
			
		||||
{
 | 
			
		||||
	NetVersion version = 
 | 
			
		||||
	{
 | 
			
		||||
		.major = TIC_VERSION_MAJOR,
 | 
			
		||||
		.minor = TIC_VERSION_MINOR,
 | 
			
		||||
		.patch = TIC_VERSION_PATCH,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	s32 size = 0;
 | 
			
		||||
	void* buffer = _netGetRequest(net, "/api?fn=version", &size);
 | 
			
		||||
 | 
			
		||||
	if(buffer && size)
 | 
			
		||||
	{
 | 
			
		||||
		lua_State* lua = netLuaInit(buffer, size);
 | 
			
		||||
 | 
			
		||||
		if(lua)
 | 
			
		||||
		{
 | 
			
		||||
			static const char* Fields[] = {"major", "minor", "patch"};
 | 
			
		||||
 | 
			
		||||
			for(s32 i = 0; i < COUNT_OF(Fields); i++)
 | 
			
		||||
			{
 | 
			
		||||
				lua_getglobal(lua, Fields[i]);
 | 
			
		||||
 | 
			
		||||
				if(lua_isinteger(lua, -1))
 | 
			
		||||
					((s32*)&version)[i] = (s32)lua_tointeger(lua, -1);
 | 
			
		||||
 | 
			
		||||
				lua_pop(lua, 1);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			lua_close(lua);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return version;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	ListCallback callback;
 | 
			
		||||
	void* data;
 | 
			
		||||
} NetDirData;
 | 
			
		||||
 | 
			
		||||
static void onDirResponse(u8* buffer, s32 size, void* data)
 | 
			
		||||
{
 | 
			
		||||
	NetDirData* netDirData = (NetDirData*)data;
 | 
			
		||||
 | 
			
		||||
	lua_State* lua = netLuaInit(buffer, size);
 | 
			
		||||
 | 
			
		||||
	if(lua)
 | 
			
		||||
	{
 | 
			
		||||
		{
 | 
			
		||||
			lua_getglobal(lua, "folders");
 | 
			
		||||
 | 
			
		||||
			if(lua_type(lua, -1) == LUA_TTABLE)
 | 
			
		||||
			{
 | 
			
		||||
				s32 count = (s32)lua_rawlen(lua, -1);
 | 
			
		||||
 | 
			
		||||
				for(s32 i = 1; i <= count; i++)
 | 
			
		||||
				{
 | 
			
		||||
					lua_geti(lua, -1, i);
 | 
			
		||||
 | 
			
		||||
					{
 | 
			
		||||
						lua_getfield(lua, -1, "name");
 | 
			
		||||
						if(lua_isstring(lua, -1))
 | 
			
		||||
							netDirData->callback(lua_tostring(lua, -1), NULL, 0, netDirData->data, true);
 | 
			
		||||
 | 
			
		||||
						lua_pop(lua, 1);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					lua_pop(lua, 1);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			lua_pop(lua, 1);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		{
 | 
			
		||||
			lua_getglobal(lua, "files");
 | 
			
		||||
 | 
			
		||||
			if(lua_type(lua, -1) == LUA_TTABLE)
 | 
			
		||||
			{
 | 
			
		||||
				s32 count = (s32)lua_rawlen(lua, -1);
 | 
			
		||||
 | 
			
		||||
				for(s32 i = 1; i <= count; i++)
 | 
			
		||||
				{
 | 
			
		||||
					lua_geti(lua, -1, i);
 | 
			
		||||
 | 
			
		||||
					char hash[FILENAME_MAX] = {0};
 | 
			
		||||
					char name[FILENAME_MAX] = {0};
 | 
			
		||||
 | 
			
		||||
					{
 | 
			
		||||
						lua_getfield(lua, -1, "hash");
 | 
			
		||||
						if(lua_isstring(lua, -1))
 | 
			
		||||
							strcpy(hash, lua_tostring(lua, -1));
 | 
			
		||||
 | 
			
		||||
						lua_pop(lua, 1);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					{
 | 
			
		||||
						lua_getfield(lua, -1, "name");
 | 
			
		||||
 | 
			
		||||
						if(lua_isstring(lua, -1))
 | 
			
		||||
							strcpy(name, lua_tostring(lua, -1));
 | 
			
		||||
 | 
			
		||||
						lua_pop(lua, 1);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					{
 | 
			
		||||
						lua_getfield(lua, -1, "id");
 | 
			
		||||
 | 
			
		||||
						if(lua_isinteger(lua, -1))
 | 
			
		||||
							netDirData->callback(name, hash, lua_tointeger(lua, -1), netDirData->data, false);
 | 
			
		||||
 | 
			
		||||
						lua_pop(lua, 1);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					lua_pop(lua, 1);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			lua_pop(lua, 1);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		lua_close(lua);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void netDirRequest(Net* net, const char* path, ListCallback callback, void* data)
 | 
			
		||||
{
 | 
			
		||||
	char request[FILENAME_MAX] = {'\0'};
 | 
			
		||||
	sprintf(request, "/api?fn=dir&path=%s", path);
 | 
			
		||||
 | 
			
		||||
	s32 size = 0;
 | 
			
		||||
	void* buffer = _netGetRequest(net, request, &size);
 | 
			
		||||
 | 
			
		||||
	NetDirData netDirData = {callback, data};
 | 
			
		||||
	onDirResponse(buffer, size, &netDirData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void showMessageBox(const char* title, const char* message)
 | 
			
		||||
{
 | 
			
		||||
	studioImpl.system->showMessageBox(title, message);
 | 
			
		||||
@@ -2154,4 +1978,9 @@ void showMessageBox(const char* title, const char* message)
 | 
			
		||||
void openSystemPath(const char* path)
 | 
			
		||||
{
 | 
			
		||||
	studioImpl.system->openSystemPath(path);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* getUrlRequest(const char* url, s32* size)
 | 
			
		||||
{
 | 
			
		||||
	return studioImpl.system->getUrlRequest(url, size);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								src/studio.h
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								src/studio.h
									
									
									
									
									
								
							@@ -37,7 +37,6 @@
 | 
			
		||||
#include "ticapi.h"
 | 
			
		||||
#include "defines.h"
 | 
			
		||||
#include "tools.h"
 | 
			
		||||
#include "net.h"
 | 
			
		||||
#include "ext/file_dialog.h"
 | 
			
		||||
 | 
			
		||||
#define TIC_LOCAL ".local/"
 | 
			
		||||
@@ -227,9 +226,7 @@ typedef struct
 | 
			
		||||
	u64 	(*getPerformanceCounter)();
 | 
			
		||||
	u64 	(*getPerformanceFrequency)();
 | 
			
		||||
 | 
			
		||||
	void* 		(*netGetRequest)(Net* net, const char* path, s32* size);
 | 
			
		||||
	Net* 		(*createNet)();
 | 
			
		||||
	void 		(*closeNet)(Net* net);
 | 
			
		||||
	void* (*getUrlRequest)(const char* url, s32* size);
 | 
			
		||||
 | 
			
		||||
	void (*file_dialog_load)(file_dialog_load_callback callback, void* data);
 | 
			
		||||
	void (*file_dialog_save)(file_dialog_save_callback callback, const char* name, const u8* buffer, size_t size, void* data, u32 mode);
 | 
			
		||||
@@ -257,23 +254,11 @@ char* getClipboardText();
 | 
			
		||||
u64 getPerformanceCounter();
 | 
			
		||||
u64 getPerformanceFrequency();
 | 
			
		||||
 | 
			
		||||
void* _netGetRequest(Net* net, const char* path, s32* size);
 | 
			
		||||
Net* _createNet();
 | 
			
		||||
void _closeNet(Net* net);
 | 
			
		||||
 | 
			
		||||
void _file_dialog_load(file_dialog_load_callback callback, void* data);
 | 
			
		||||
void _file_dialog_save(file_dialog_save_callback callback, const char* name, const u8* buffer, size_t size, void* data, u32 mode);
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
	s32 major;
 | 
			
		||||
	s32 minor;
 | 
			
		||||
	s32 patch;
 | 
			
		||||
} NetVersion;
 | 
			
		||||
 | 
			
		||||
NetVersion netVersionRequest(Net* net);
 | 
			
		||||
void netDirRequest(Net* net, const char* path, ListCallback callback, void* data);
 | 
			
		||||
void showMessageBox(const char* title, const char* message);
 | 
			
		||||
TIC80_API void updateStudioProject();
 | 
			
		||||
 | 
			
		||||
void openSystemPath(const char* path);
 | 
			
		||||
void openSystemPath(const char* path);
 | 
			
		||||
void* getUrlRequest(const char* url, s32* size);
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,6 @@
 | 
			
		||||
 | 
			
		||||
#include "surf.h"
 | 
			
		||||
#include "fs.h"
 | 
			
		||||
#include "net.h"
 | 
			
		||||
#include "console.h"
 | 
			
		||||
 | 
			
		||||
#include "ext/gif.h"
 | 
			
		||||
@@ -478,7 +477,7 @@ static void* requestCover(Surf* surf, const char* hash, s32* size)
 | 
			
		||||
 | 
			
		||||
	char path[FILENAME_MAX] = {0};
 | 
			
		||||
	sprintf(path, "/cart/%s/cover.gif", hash);
 | 
			
		||||
	void* data = _netGetRequest(surf->net, path, size);
 | 
			
		||||
	void* data = getUrlRequest(path, size);
 | 
			
		||||
 | 
			
		||||
	if(data)
 | 
			
		||||
	{
 | 
			
		||||
@@ -861,7 +860,6 @@ void initSurf(Surf* surf, tic_mem* tic, struct Console* console)
 | 
			
		||||
			.items = NULL,
 | 
			
		||||
			.count = 0,
 | 
			
		||||
		},
 | 
			
		||||
		.net = _createNet(),
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	fsMakeDir(surf->fs, TIC_CACHE);
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,6 @@ struct Surf
 | 
			
		||||
	tic_mem* tic;
 | 
			
		||||
	struct FileSystem* fs;
 | 
			
		||||
	struct Console* console;
 | 
			
		||||
	struct Net* net;
 | 
			
		||||
	struct Movie* state;
 | 
			
		||||
 | 
			
		||||
	bool init;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user