finally got theme deletion working + qr stuff

Theme deletion [SDMC] now works, although no button currently has it assigned. The QR reader now works properly with Unicode filenames.
This commit is contained in:
Helloman892
2017-09-07 22:36:44 +01:00
parent dc1cbda232
commit 6b5b391d7b
4 changed files with 24 additions and 20 deletions

View File

@@ -51,7 +51,7 @@ int theme_count;
void load_theme_preview(Theme_s *theme); void load_theme_preview(Theme_s *theme);
Result get_themes(Theme_s **themes_list, int *theme_count); Result get_themes(Theme_s **themes_list, int *theme_count);
void add_theme(Theme_s **themes_list, int *theme_count, char *path, char *filename); void del_theme(u16 *path);
Result single_install(Theme_s theme); Result single_install(Theme_s theme);
Result shuffle_install(Theme_s *themes_list, int theme_count); Result shuffle_install(Theme_s *themes_list, int theme_count);
Result bgm_install(Theme_s bgm_to_install); Result bgm_install(Theme_s bgm_to_install);

View File

@@ -221,7 +221,7 @@ Result http_get(char *url, char *path)
remake_file(path_to_file, ArchiveSD, size); remake_file(path_to_file, ArchiveSD, size);
buf_to_file(size, path_to_file, ArchiveSD, (char*)buf); buf_to_file(size, path_to_file, ArchiveSD, (char*)buf);
add_theme(&themes_list, &theme_count, path_to_file, filename); get_themes(&themes_list, &theme_count);
exit_qr(); exit_qr();

View File

@@ -194,6 +194,9 @@ int main(void)
draw_theme_install(SINGLE_INSTALL); draw_theme_install(SINGLE_INSTALL);
single_install(*current_theme); single_install(*current_theme);
} }
//these two are here just so I don't forget how to implement them - HM
//del_theme(current_theme->path);
//get_themes(&themes_list, &theme_count);
} }
else if (kDown & KEY_B) else if (kDown & KEY_B)

View File

@@ -158,7 +158,15 @@ Result get_themes(Theme_s **themes_list, int *theme_count)
if (R_FAILED(res)) if (R_FAILED(res))
return res; return res;
if (*themes_list != NULL) //used for QR reading and also for theme deletion
{
free(*themes_list);
*themes_list = NULL;
*theme_count = 0;
}
u32 entries_read = 1; u32 entries_read = 1;
while (entries_read) while (entries_read)
{ {
FS_DirectoryEntry entry = {0}; FS_DirectoryEntry entry = {0};
@@ -196,25 +204,18 @@ Result get_themes(Theme_s **themes_list, int *theme_count)
return res; return res;
} }
void add_theme(Theme_s **themes_list, int *theme_count, char *path, char *filename) void del_theme(u16 *path)
{ {
*theme_count += 1; Handle dir_handle;
*themes_list = realloc(*themes_list, (*theme_count) * sizeof(Theme_s)); Result res = FSUSER_OpenDirectory(&dir_handle, ArchiveSD, fsMakePath(PATH_UTF16, path));
if (R_SUCCEEDED(res))
Theme_s *current_theme = &(*themes_list)[*theme_count - 1]; {
memset(current_theme, 0, sizeof(Theme_s)); FSDIR_Close(dir_handle);
FSUSER_DeleteDirectoryRecursively(ArchiveSD, fsMakePath(PATH_UTF16, path));
u16 theme_path[0x106] = {0}; } else
utf8_to_utf16(theme_path, (u8*)path, 0x106); {
FSUSER_DeleteFile(ArchiveSD, fsMakePath(PATH_UTF16, path));
u16 ufilename[0x106] = {0}; }
utf8_to_utf16(ufilename, (u8*)filename, 0x106);
memcpy(current_theme->path, theme_path, 0x106 * sizeof(u16));
current_theme->is_zip = true;
ssize_t iconID = TEXTURE_PREVIEW + *theme_count;
parse_smdh(current_theme, iconID, ufilename);
} }
Result bgm_install(Theme_s bgm_to_install) Result bgm_install(Theme_s bgm_to_install)