Add paths to config file
This commit is contained in:
@@ -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];
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
30
source/fs.c
30
source/fs.c
@@ -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);
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user