no message

This commit is contained in:
BADIM-PC\Vadim 2018-02-14 14:31:10 +03:00
parent f06ae65114
commit 376763c56a
7 changed files with 222 additions and 222 deletions

View File

@ -23,7 +23,6 @@
#include "console.h" #include "console.h"
#include "fs.h" #include "fs.h"
#include "config.h" #include "config.h"
#include "net.h"
#include "ext/gif.h" #include "ext/gif.h"
#include "ext/file_dialog.h" #include "ext/file_dialog.h"
@ -32,6 +31,10 @@
#include <string.h> #include <string.h>
#include <stddef.h> #include <stddef.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#define CONSOLE_CURSOR_COLOR ((tic_color_red)) #define CONSOLE_CURSOR_COLOR ((tic_color_red))
#define CONSOLE_BACK_TEXT_COLOR ((tic_color_dark_gray)) #define CONSOLE_BACK_TEXT_COLOR ((tic_color_dark_gray))
#define CONSOLE_FRONT_TEXT_COLOR ((tic_color_white)) #define CONSOLE_FRONT_TEXT_COLOR ((tic_color_white))
@ -2535,23 +2538,80 @@ static void processGesture(Console* console)
else console->scroll.active = false; 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) 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); char msg[FILENAME_MAX] = {0};
free(net); 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));
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));
}
} }
} }

134
src/fs.c
View File

@ -22,13 +22,16 @@
#include "studio.h" #include "studio.h"
#include "fs.h" #include "fs.h"
#include "net.h"
#include "ext/file_dialog.h" #include "ext/file_dialog.h"
#include <dirent.h> #include <dirent.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#if defined(__WINRT__) || defined(__TIC_WINDOWS__) #if defined(__WINRT__) || defined(__TIC_WINDOWS__)
#include <direct.h> #include <direct.h>
#include <windows.h> #include <windows.h>
@ -49,8 +52,6 @@ struct FileSystem
{ {
char dir[FILENAME_MAX]; char dir[FILENAME_MAX];
char work[FILENAME_MAX]; char work[FILENAME_MAX];
Net* net;
}; };
static const char* getFilePath(FileSystem* fs, const char* name) static const char* getFilePath(FileSystem* fs, const char* name)
@ -164,6 +165,127 @@ int _wremove(const wchar_t *);
#endif #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) void fsEnumFiles(FileSystem* fs, ListCallback callback, void* data)
{ {
#if !defined(__EMSCRIPTEN__) #if !defined(__EMSCRIPTEN__)
@ -172,7 +294,7 @@ void fsEnumFiles(FileSystem* fs, ListCallback callback, void* data)
if(isPublic(fs)) if(isPublic(fs))
{ {
netDirRequest(fs->net, fs->work + sizeof(TIC_HOST), callback, data); netDirRequest(fs->work + sizeof(TIC_HOST), callback, data);
return; return;
} }
@ -721,7 +843,7 @@ void* fsLoadFile(FileSystem* fs, const char* name, s32* size)
char path[FILENAME_MAX] = {0}; char path[FILENAME_MAX] = {0};
sprintf(path, "/cart/%s/cart.tic", loadPublicCartData.hash); sprintf(path, "/cart/%s/cart.tic", loadPublicCartData.hash);
void* data = _netGetRequest(fs->net, path, size); void* data = getUrlRequest(path, size);
if(data) if(data)
fsSaveRootFile(fs, cachePath, data, *size, false); fsSaveRootFile(fs, cachePath, data, *size, false);
@ -786,8 +908,6 @@ FileSystem* createFileSystem(const char* path)
FileSystem* fs = (FileSystem*)malloc(sizeof(FileSystem)); FileSystem* fs = (FileSystem*)malloc(sizeof(FileSystem));
memset(fs, 0, sizeof(FileSystem)); memset(fs, 0, sizeof(FileSystem));
fs->net = _createNet();
strcpy(fs->dir, path); strcpy(fs->dir, path);
return fs; return fs;

View File

@ -54,6 +54,8 @@ static struct
const u8* src; const u8* src;
} mouse; } mouse;
Net* net;
bool missedFrame; bool missedFrame;
bool fullscreen; bool fullscreen;
} platform; } platform;
@ -957,6 +959,11 @@ void _openSystemPath(const char* path) {}
#endif #endif
static void* _getUrlRequest(const char* url, s32* size)
{
return netGetRequest(platform.net, url, size);
}
static System sysHandlers = static System sysHandlers =
{ {
.setClipboardText = _setClipboardText, .setClipboardText = _setClipboardText,
@ -965,9 +972,7 @@ static System sysHandlers =
.getPerformanceCounter = _getPerformanceCounter, .getPerformanceCounter = _getPerformanceCounter,
.getPerformanceFrequency = _getPerformanceFrequency, .getPerformanceFrequency = _getPerformanceFrequency,
.netGetRequest = netGetRequest, .getUrlRequest = _getUrlRequest,
.createNet = createNet,
.closeNet = closeNet,
.file_dialog_load = file_dialog_load, .file_dialog_load = file_dialog_load,
.file_dialog_save = file_dialog_save, .file_dialog_save = file_dialog_save,
@ -1063,6 +1068,8 @@ static s32 start(s32 argc, char **argv, const char* folder)
initSound(); initSound();
platform.net = createNet();
platform.window = SDL_CreateWindow( TIC_TITLE, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, platform.window = SDL_CreateWindow( TIC_TITLE, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
(TIC80_FULLWIDTH) * STUDIO_UI_SCALE, (TIC80_FULLWIDTH) * STUDIO_UI_SCALE,
(TIC80_FULLHEIGHT) * STUDIO_UI_SCALE, (TIC80_FULLHEIGHT) * STUDIO_UI_SCALE,
@ -1123,6 +1130,8 @@ static s32 start(s32 argc, char **argv, const char* folder)
studioClose(); studioClose();
closeNet(platform.net);
if(platform.audio.cvt.buf) if(platform.audio.cvt.buf)
SDL_free(platform.audio.cvt.buf); SDL_free(platform.audio.cvt.buf);

View File

@ -39,7 +39,6 @@
#include "fs.h" #include "fs.h"
#include "net.h"
#include "ext/gif.h" #include "ext/gif.h"
#include "ext/md5.h" #include "ext/md5.h"
@ -1912,8 +1911,6 @@ void studioTick(void* pixels)
void studioClose() void studioClose()
{ {
_closeNet(studioImpl.surf->net);
{ {
for(s32 i = 0; i < TIC_EDITOR_BANKS; i++) for(s32 i = 0; i < TIC_EDITOR_BANKS; i++)
{ {
@ -1963,21 +1960,6 @@ u64 getPerformanceFrequency()
return studioImpl.system->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) void _file_dialog_load(file_dialog_load_callback callback, void* data)
{ {
studioImpl.system->file_dialog_load(callback, 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); 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) void showMessageBox(const char* title, const char* message)
{ {
studioImpl.system->showMessageBox(title, message); studioImpl.system->showMessageBox(title, message);
@ -2154,4 +1978,9 @@ void showMessageBox(const char* title, const char* message)
void openSystemPath(const char* path) void openSystemPath(const char* path)
{ {
studioImpl.system->openSystemPath(path); studioImpl.system->openSystemPath(path);
}
void* getUrlRequest(const char* url, s32* size)
{
return studioImpl.system->getUrlRequest(url, size);
} }

View File

@ -37,7 +37,6 @@
#include "ticapi.h" #include "ticapi.h"
#include "defines.h" #include "defines.h"
#include "tools.h" #include "tools.h"
#include "net.h"
#include "ext/file_dialog.h" #include "ext/file_dialog.h"
#define TIC_LOCAL ".local/" #define TIC_LOCAL ".local/"
@ -227,9 +226,7 @@ typedef struct
u64 (*getPerformanceCounter)(); u64 (*getPerformanceCounter)();
u64 (*getPerformanceFrequency)(); u64 (*getPerformanceFrequency)();
void* (*netGetRequest)(Net* net, const char* path, s32* size); void* (*getUrlRequest)(const char* url, s32* size);
Net* (*createNet)();
void (*closeNet)(Net* net);
void (*file_dialog_load)(file_dialog_load_callback callback, void* data); 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); 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 getPerformanceCounter();
u64 getPerformanceFrequency(); 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_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); 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); void showMessageBox(const char* title, const char* message);
TIC80_API void updateStudioProject(); TIC80_API void updateStudioProject();
void openSystemPath(const char* path); void openSystemPath(const char* path);
void* getUrlRequest(const char* url, s32* size);

View File

@ -22,7 +22,6 @@
#include "surf.h" #include "surf.h"
#include "fs.h" #include "fs.h"
#include "net.h"
#include "console.h" #include "console.h"
#include "ext/gif.h" #include "ext/gif.h"
@ -478,7 +477,7 @@ static void* requestCover(Surf* surf, const char* hash, s32* size)
char path[FILENAME_MAX] = {0}; char path[FILENAME_MAX] = {0};
sprintf(path, "/cart/%s/cover.gif", hash); sprintf(path, "/cart/%s/cover.gif", hash);
void* data = _netGetRequest(surf->net, path, size); void* data = getUrlRequest(path, size);
if(data) if(data)
{ {
@ -861,7 +860,6 @@ void initSurf(Surf* surf, tic_mem* tic, struct Console* console)
.items = NULL, .items = NULL,
.count = 0, .count = 0,
}, },
.net = _createNet(),
}; };
fsMakeDir(surf->fs, TIC_CACHE); fsMakeDir(surf->fs, TIC_CACHE);

View File

@ -31,7 +31,6 @@ struct Surf
tic_mem* tic; tic_mem* tic;
struct FileSystem* fs; struct FileSystem* fs;
struct Console* console; struct Console* console;
struct Net* net;
struct Movie* state; struct Movie* state;
bool init; bool init;