mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-04-26 20:11:42 +00:00
Allow themes to be imported
This commit is contained in:
parent
dd4e3eb030
commit
9e12283d90
2 changed files with 83 additions and 6 deletions
|
|
@ -18,6 +18,7 @@ DEBUG_FLY = "@ entered debug free-fly mode"
|
|||
IMPORT_MOD_SUCCESS = "\\#a0ffa0\\Imported mod\n\\#dcdcdc\\'@'"
|
||||
IMPORT_DYNOS_SUCCESS = "\\#a0ffa0\\Imported DynOS pack\n\\#dcdcdc\\'@'"
|
||||
IMPORT_PALETTE_SUCCESS = "\\#a0ffa0\\Imported palette preset\n\\#dcdcdc\\'@'"
|
||||
IMPORT_THEME_SUCCESS = "\\#a0ffa0\\Imported theme\n\\#dcdcdc\\'@'"
|
||||
IMPORT_FAIL = "\\#ffa0a0\\Failed to import\n\\#dcdcdc\\'@'"
|
||||
IMPORT_FAIL_INGAME = "\\#ffa0a0\\Can not import while in-game"
|
||||
COOPNET_CONNECTION_FAILED = "\\#ffa0a0\\Could not connect to CoopNet!"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include "PR/ultratypes.h"
|
||||
#include "types.h"
|
||||
#include "pc/ini.h"
|
||||
#include "pc/platform.h"
|
||||
#include "pc/utils/miniz/miniz.h"
|
||||
#include "pc/debuglog.h"
|
||||
|
|
@ -102,6 +103,86 @@ static bool mod_import_palette(char* src) {
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool mod_import_theme(char* src) {
|
||||
const char* themesDirectory = fs_get_write_path(THEMES_DIRECTORY);
|
||||
fs_sys_mkdir(themesDirectory);
|
||||
|
||||
char dst[SYS_MAX_PATH] = { 0 };
|
||||
if (!concat_path(dst, (char*)themesDirectory, path_basename(src))) {
|
||||
LOG_ERROR("Failed to concat path for theme ini import");
|
||||
return false;
|
||||
}
|
||||
|
||||
FILE* fin = fopen(src, "rb");
|
||||
if (fin == NULL) {
|
||||
LOG_ERROR("Failed to open src path for theme ini import");
|
||||
return false;
|
||||
}
|
||||
|
||||
FILE* fout = fopen(dst, "wb");
|
||||
if (fout == NULL) {
|
||||
LOG_ERROR("Failed to open dst path for theme ini import");
|
||||
fclose(fin);
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t rbytes;
|
||||
size_t wbytes;
|
||||
unsigned char buff[8192];
|
||||
do {
|
||||
rbytes = fread(buff, 1, sizeof(buff), fin);
|
||||
if (rbytes > 0) {
|
||||
wbytes = fwrite(buff, 1, rbytes, fout);
|
||||
} else {
|
||||
wbytes = 0;
|
||||
}
|
||||
} while ((rbytes > 0) && (rbytes == wbytes));
|
||||
|
||||
fclose(fout);
|
||||
fclose(fin);
|
||||
|
||||
if (wbytes) {
|
||||
LOG_ERROR("Write error on theme ini import");
|
||||
return false;
|
||||
}
|
||||
|
||||
LOG_INFO("Imported theme ini: '%s' -> '%s'", src, dst);
|
||||
// nuke current themes and load them back
|
||||
for (int i = DJUI_THEME_COUNT; i < MAX_DJUI_THEMES; i++) {
|
||||
free(gDjuiThemes[i]);
|
||||
gDjuiThemes[i] = NULL;
|
||||
}
|
||||
djui_themes_load();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool mod_import_ini(char* src) {
|
||||
struct ini_t* importIni = ini_load(src);
|
||||
bool ret = false;
|
||||
|
||||
char msg[SYS_MAX_PATH] = { 0 };
|
||||
char* basename = path_basename(src);
|
||||
|
||||
// bit hacky, but works
|
||||
if (ini_get(importIni, "PALETTE", "PANTS_R") != NULL) {
|
||||
ret = mod_import_palette(src);
|
||||
if (ret) {
|
||||
djui_language_replace(DLANG(NOTIF, IMPORT_PALETTE_SUCCESS), msg, SYS_MAX_PATH, '@', basename);
|
||||
djui_popup_create(msg, 2);
|
||||
}
|
||||
} else if (ini_get(importIni, "THEME", "theme_header_font") != NULL) {
|
||||
ret = mod_import_theme(src);
|
||||
if (ret) {
|
||||
djui_language_replace(DLANG(NOTIF, IMPORT_THEME_SUCCESS), msg, SYS_MAX_PATH, '@', basename);
|
||||
djui_popup_create(msg, 2);
|
||||
}
|
||||
}
|
||||
|
||||
ini_free(importIni);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static bool mod_import_zip(char* path, bool* isLua, bool* isDynos) {
|
||||
LOG_INFO("Importing zip mod: %s", path);
|
||||
|
||||
|
|
@ -255,7 +336,6 @@ static bool mod_import_zip(char* path, bool* isLua, bool* isDynos) {
|
|||
bool mod_import_file(char* path) {
|
||||
bool isLua = false;
|
||||
bool isDynos = false;
|
||||
bool isPalette = false;
|
||||
bool ret = false;
|
||||
|
||||
if (gNetworkType != NT_NONE && !path_ends_with(path, ".ini")) {
|
||||
|
|
@ -267,8 +347,7 @@ bool mod_import_file(char* path) {
|
|||
isLua = true;
|
||||
ret = mod_import_lua(path);
|
||||
} else if (path_ends_with(path, ".ini")) {
|
||||
isPalette = true;
|
||||
ret = mod_import_palette(path);
|
||||
ret = mod_import_ini(path);
|
||||
} else if (path_ends_with(path, ".zip")) {
|
||||
ret = mod_import_zip(path, &isLua, &isDynos);
|
||||
}
|
||||
|
|
@ -285,9 +364,6 @@ bool mod_import_file(char* path) {
|
|||
dynos_gfx_init();
|
||||
djui_language_replace(DLANG(NOTIF, IMPORT_DYNOS_SUCCESS), msg, SYS_MAX_PATH, '@', basename);
|
||||
djui_popup_create(msg, 2);
|
||||
} else if (isPalette) {
|
||||
djui_language_replace(DLANG(NOTIF, IMPORT_PALETTE_SUCCESS), msg, SYS_MAX_PATH, '@', basename);
|
||||
djui_popup_create(msg, 2);
|
||||
}
|
||||
} else {
|
||||
djui_language_replace(DLANG(NOTIF, IMPORT_FAIL), msg, SYS_MAX_PATH, '@', basename);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue