Add paths to config file

This commit is contained in:
2024-06-19 01:14:34 -04:00
parent 3ef2092dc2
commit 79afaca01d
6 changed files with 82 additions and 20 deletions

View File

@@ -79,7 +79,7 @@ typedef enum {
REMOTE_MODE_AMOUNT, REMOTE_MODE_AMOUNT,
} RemoteMode; } RemoteMode;
extern const char * main_paths[MODE_AMOUNT]; extern const char * main_paths[REMOTE_MODE_AMOUNT];
extern const int entries_per_screen_v[MODE_AMOUNT]; extern const int entries_per_screen_v[MODE_AMOUNT];
extern const int entries_per_screen_h[MODE_AMOUNT]; extern const int entries_per_screen_h[MODE_AMOUNT];
extern const int entry_size[MODE_AMOUNT]; extern const int entry_size[MODE_AMOUNT];

View File

@@ -215,7 +215,7 @@ int install_badge_dir(FS_DirectoryEntry set_dir, int *badge_count, int set_id)
u16 path[512] = {0}; u16 path[512] = {0};
u16 set_icon[17] = {0}; u16 set_icon[17] = {0};
utf8_to_utf16(set_icon, (u8 *) "_seticon.png", 16); utf8_to_utf16(set_icon, (u8 *) "_seticon.png", 16);
struacat(path, "/Badges/"); struacat(path, main_paths[REMOTE_MODE_BADGES]);
strucat(path, set_dir.name); strucat(path, set_dir.name);
res = FSUSER_OpenDirectory(&folder, ArchiveSD, fsMakePath(PATH_UTF16, path)); res = FSUSER_OpenDirectory(&folder, ArchiveSD, fsMakePath(PATH_UTF16, path));
if (R_FAILED(res)) if (R_FAILED(res))
@@ -231,7 +231,7 @@ int install_badge_dir(FS_DirectoryEntry set_dir, int *badge_count, int set_id)
if (!strcmp(badge_files[i].shortExt, "PNG")) if (!strcmp(badge_files[i].shortExt, "PNG"))
{ {
memset(path, 0, 512 * sizeof(u16)); memset(path, 0, 512 * sizeof(u16));
struacat(path, "/Badges/"); struacat(path, main_paths[REMOTE_MODE_BADGES]);
strucat(path, set_dir.name); strucat(path, set_dir.name);
struacat(path, "/"); struacat(path, "/");
strucat(path, badge_files[i].name); strucat(path, badge_files[i].name);
@@ -245,7 +245,7 @@ int install_badge_dir(FS_DirectoryEntry set_dir, int *badge_count, int set_id)
} else if (!strcmp(badge_files[i].shortExt, "ZIP")) } else if (!strcmp(badge_files[i].shortExt, "ZIP"))
{ {
memset(path, 0, 512 * sizeof(u16)); memset(path, 0, 512 * sizeof(u16));
struacat(path, "/Badges/"); struacat(path, main_paths[REMOTE_MODE_BADGES]);
strucat(path, set_dir.name); strucat(path, set_dir.name);
struacat(path, "/"); struacat(path, "/");
strucat(path, badge_files[i].name); strucat(path, badge_files[i].name);
@@ -599,7 +599,7 @@ Result install_badges(void)
DEBUG("Opening badge directory\n"); DEBUG("Opening badge directory\n");
FS_DirectoryEntry *badge_files = calloc(1024, sizeof(FS_DirectoryEntry)); FS_DirectoryEntry *badge_files = calloc(1024, sizeof(FS_DirectoryEntry));
res = FSUSER_OpenDirectory(&folder, ArchiveSD, fsMakePath(PATH_ASCII, "/Badges/")); res = FSUSER_OpenDirectory(&folder, ArchiveSD, fsMakePath(PATH_ASCII, main_paths[REMOTE_MODE_BADGES]));
if (R_FAILED(res)) if (R_FAILED(res))
{ {
DEBUG("Failed to open folder: %lx\n", res); DEBUG("Failed to open folder: %lx\n", res);
@@ -678,7 +678,7 @@ Result install_badges(void)
default_idx = badge_count; default_idx = badge_count;
} }
u16 path[0x512] = {0}; u16 path[0x512] = {0};
struacat(path, "/Badges/"); struacat(path, main_paths[REMOTE_MODE_BADGES]);
strucat(path, badge_files[i].name); strucat(path, badge_files[i].name);
default_set_count += install_badge_png(fsMakePath(PATH_UTF16, path), badge_files[i], &badge_count, default_set); default_set_count += install_badge_png(fsMakePath(PATH_UTF16, path), badge_files[i], &badge_count, default_set);
} else if (!strcmp(badge_files[i].shortExt, "ZIP")) } else if (!strcmp(badge_files[i].shortExt, "ZIP"))
@@ -689,7 +689,7 @@ Result install_badges(void)
default_set = set_count; default_set = set_count;
} }
u16 path[0x512] = {0}; u16 path[0x512] = {0};
struacat(path, "/Badges/"); struacat(path, main_paths[REMOTE_MODE_BADGES]);
strucat(path, badge_files[i].name); strucat(path, badge_files[i].name);
default_set_count += install_badge_zip(path, &badge_count, default_set); default_set_count += install_badge_zip(path, &badge_count, default_set);

View File

@@ -30,6 +30,8 @@ Config_s config;
void load_config(void) void load_config(void)
{ {
Handle test_handle;
Result res;
memset(&config, 0, sizeof(Config_s)); memset(&config, 0, sizeof(Config_s));
char *json_buf = NULL; char *json_buf = NULL;
u32 json_len = file_to_buf(fsMakePath(PATH_ASCII, "/3ds/" APP_TITLE "/config.json"), ArchiveSD, &json_buf); u32 json_len = file_to_buf(fsMakePath(PATH_ASCII, "/3ds/" APP_TITLE "/config.json"), ArchiveSD, &json_buf);
@@ -95,6 +97,54 @@ void load_config(void)
config.yellow_color = C2D_Color32(r, g, b, a); config.yellow_color = C2D_Color32(r, g, b, a);
} }
} }
else if (json_is_string(value) && !strcmp(key, "Themes Path"))
{
bool need_slash = json_string_value(value)[strlen(json_string_value(value)) - 1] != '/';
char *theme_path = calloc(1, strlen(json_string_value(value)) + 1 + (need_slash ? 1 : 0));
memcpy(theme_path, json_string_value(value), strlen(json_string_value(value)));
if (need_slash) theme_path[strlen(json_string_value(value))] = '/';
if (R_SUCCEEDED(res = FSUSER_OpenDirectory(&test_handle, ArchiveSD, fsMakePath(PATH_ASCII, theme_path))))
{
main_paths[REMOTE_MODE_THEMES] = theme_path;
FSDIR_Close(test_handle);
} else
{
DEBUG("Failed test - reverting to default. Err 0x%08lx\n", res);
free(theme_path);
}
}
else if (json_is_string(value) && !strcmp(key, "Splashes Path"))
{
bool need_slash = json_string_value(value)[strlen(json_string_value(value)) - 1] != '/';
char *splash_path = calloc(1, strlen(json_string_value(value)) + 1 + (need_slash ? 1 : 0));
memcpy(splash_path, json_string_value(value), strlen(json_string_value(value)));
if (need_slash) splash_path[strlen(json_string_value(value))] = '/';
if (R_SUCCEEDED(res = FSUSER_OpenDirectory(&test_handle, ArchiveSD, fsMakePath(PATH_ASCII, splash_path))))
{
main_paths[REMOTE_MODE_SPLASHES] = splash_path;
FSDIR_Close(test_handle);
} else
{
DEBUG("Failed test - reverting to default. Err 0x%08lx\n", res);
free(splash_path);
}
}
else if (json_is_string(value) && !strcmp(key, "Badges Path"))
{
bool need_slash = json_string_value(value)[strlen(json_string_value(value)) - 1] != '/';
char *badge_path = calloc(1, strlen(json_string_value(value)) + 1 + (need_slash ? 1 : 0));
memcpy(badge_path, json_string_value(value), strlen(json_string_value(value)));
if (need_slash) badge_path[strlen(json_string_value(value))] = '/';
if (R_SUCCEEDED(res = FSUSER_OpenDirectory(&test_handle, ArchiveSD, fsMakePath(PATH_ASCII, badge_path))))
{
main_paths[REMOTE_MODE_BADGES] = badge_path;
FSDIR_Close(test_handle);
} else
{
DEBUG("Failed test - reverting to default. Err 0x%08lx\n", res);
free(badge_path);
}
}
} }
} else } else
{ {

View File

@@ -117,10 +117,9 @@ Result open_archives(void)
archive2 = 0x00; archive2 = 0x00;
} }
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/Themes"), FS_ATTRIBUTE_DIRECTORY); FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, main_paths[REMOTE_MODE_THEMES]), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/Splashes"), FS_ATTRIBUTE_DIRECTORY); FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, main_paths[REMOTE_MODE_SPLASHES]), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/Badges"), FS_ATTRIBUTE_DIRECTORY); FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, main_paths[REMOTE_MODE_BADGES]), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/Badges/ThemePlaza Badges"), FS_ATTRIBUTE_DIRECTORY);
u32 homeMenuPath[3] = {MEDIATYPE_SD, archive2, 0}; u32 homeMenuPath[3] = {MEDIATYPE_SD, archive2, 0};
home.type = PATH_BINARY; home.type = PATH_BINARY;
@@ -189,7 +188,12 @@ Result open_badge_extdata()
} }
FSFILE_Close(test_handle); FSFILE_Close(test_handle);
if(R_FAILED(res = FSUSER_OpenFile(&test_handle, ArchiveSD, fsMakePath(PATH_ASCII, "/Badges/ThemePlaza Badges/_seticon.png"), FS_OPEN_READ, 0))) char tp_path[0x106] = {0};
sprintf(tp_path, "%sThemePlaza Badges", main_paths[REMOTE_MODE_BADGES]);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, tp_path), FS_ATTRIBUTE_DIRECTORY);
strcat(tp_path, "/_seticon.png");
if(R_FAILED(res = FSUSER_OpenFile(&test_handle, ArchiveSD, fsMakePath(PATH_ASCII, tp_path), FS_OPEN_READ, 0)))
{ {
FILE *fp = fopen("romfs:/tp_set.png", "rb"); FILE *fp = fopen("romfs:/tp_set.png", "rb");
fseek(fp, 0L, SEEK_END); fseek(fp, 0L, SEEK_END);
@@ -198,8 +202,8 @@ Result open_badge_extdata()
fseek(fp, 0L, SEEK_SET); fseek(fp, 0L, SEEK_SET);
fread(icon_buf, 1, size, fp); fread(icon_buf, 1, size, fp);
fclose(fp); fclose(fp);
remake_file(fsMakePath(PATH_ASCII, "/Badges/ThemePlaza Badges/_seticon.png"), ArchiveSD, size); remake_file(fsMakePath(PATH_ASCII, tp_path), ArchiveSD, size);
buf_to_file(size, fsMakePath(PATH_ASCII, "/Badges/ThemePlaza Badges/_seticon.png"), ArchiveSD, icon_buf); buf_to_file(size, fsMakePath(PATH_ASCII, tp_path), ArchiveSD, icon_buf);
DEBUG("res: 0x%08lx\n", res); DEBUG("res: 0x%08lx\n", res);
free(icon_buf); free(icon_buf);
} }
@@ -271,6 +275,9 @@ s16 for_each_file_zip(u16 *zip_path, u32 (*zip_iter_callback)(char *filebuf, u64
if(r != ARCHIVE_OK) if(r != ARCHIVE_OK)
{ {
DEBUG("Invalid zip being opened\n"); DEBUG("Invalid zip being opened\n");
char path[0x128] = {0};
utf16_to_utf8((u8 *) path, zip_path, 0x128);
DEBUG("%s\n", path);
return -1; return -1;
} }
@@ -346,6 +353,9 @@ u32 zip_file_to_buf(const char * file_name, const u16 * zip_path, char ** buf)
if(r != ARCHIVE_OK) if(r != ARCHIVE_OK)
{ {
DEBUG("Invalid zip being opened\n"); DEBUG("Invalid zip being opened\n");
char path[0x128] = {0};
utf16_to_utf8((u8 *) path, zip_path, 0x128);
DEBUG("%s\n", path);
return 0; return 0;
} }
@@ -566,9 +576,9 @@ renamed:
char * curr_filename; char * curr_filename;
if (mode == REMOTE_MODE_BADGES) if (mode == REMOTE_MODE_BADGES)
{ {
DEBUG("Remote mode badges! Saving to /Badges/ThemePlaza Badges/\n"); sprintf(path_to_file, "%sThemePlaza Badges/%s", main_paths[REMOTE_MODE_BADGES], filename);
sprintf(path_to_file, "%s%s", "/Badges/ThemePlaza Badges/", filename); DEBUG("Remote mode badges! Saving to %s/\n", path_to_file);
curr_filename = path_to_file + strlen("/Badges/ThemePlaza Badges/"); curr_filename = path_to_file + strlen(main_paths[REMOTE_MODE_BADGES]) + strlen("ThemePlaza Badges/");
} else } else
{ {
sprintf(path_to_file, "%s%s", main_paths[mode], filename); sprintf(path_to_file, "%s%s", main_paths[mode], filename);

View File

@@ -61,10 +61,12 @@ Result archive_result;
Result badge_archive_result; Result badge_archive_result;
u32 old_time_limit; u32 old_time_limit;
const char * main_paths[MODE_AMOUNT] = { const char * main_paths[REMOTE_MODE_AMOUNT] = {
"/Themes/", "/Themes/",
"/Splashes/", "/Splashes/",
"/Badges/"
}; };
const int entries_per_screen_v[MODE_AMOUNT] = { const int entries_per_screen_v[MODE_AMOUNT] = {
4, 4,
4, 4,

View File

@@ -378,7 +378,7 @@ Result dump_current_theme(void)
} }
u16 path[0x107] = { 0 }; u16 path[0x107] = { 0 };
struacat(path, "/themes/"); struacat(path, main_paths[REMOTE_MODE_THEMES]);
struacat(path, output_dir); struacat(path, output_dir);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_UTF16, path), FS_ATTRIBUTE_DIRECTORY); FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_UTF16, path), FS_ATTRIBUTE_DIRECTORY);
@@ -614,7 +614,7 @@ Result dump_all_themes(void)
} }
char path[0x107] = { 0 }; char path[0x107] = { 0 };
sprintf(path, "/Themes/Dump-%02lx-%ld-%s", dlc_index, extra_index, themename); sprintf(path, "%sDump-%02lx-%ld-%s", main_paths[REMOTE_MODE_THEMES], dlc_index, extra_index, themename);
DEBUG("theme folder to create: %s\n", path); DEBUG("theme folder to create: %s\n", path);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, path), FS_ATTRIBUTE_DIRECTORY); FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, path), FS_ATTRIBUTE_DIRECTORY);