From 6b5b391d7b05cc26d521496105b76be69a58fc45 Mon Sep 17 00:00:00 2001 From: Helloman892 <1565516+Helloman892@users.noreply.github.com> Date: Thu, 7 Sep 2017 22:36:44 +0100 Subject: [PATCH] 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. --- include/themes.h | 2 +- source/camera.c | 2 +- source/main.c | 3 +++ source/themes.c | 37 +++++++++++++++++++------------------ 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/include/themes.h b/include/themes.h index 2f75126..a7c58ea 100644 --- a/include/themes.h +++ b/include/themes.h @@ -51,7 +51,7 @@ int theme_count; void load_theme_preview(Theme_s *theme); 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 shuffle_install(Theme_s *themes_list, int theme_count); Result bgm_install(Theme_s bgm_to_install); diff --git a/source/camera.c b/source/camera.c index d10235e..0a32d9a 100644 --- a/source/camera.c +++ b/source/camera.c @@ -221,7 +221,7 @@ Result http_get(char *url, char *path) remake_file(path_to_file, ArchiveSD, size); 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(); diff --git a/source/main.c b/source/main.c index c992461..4c03e1f 100644 --- a/source/main.c +++ b/source/main.c @@ -194,6 +194,9 @@ int main(void) draw_theme_install(SINGLE_INSTALL); 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) diff --git a/source/themes.c b/source/themes.c index 3d78b7d..38c2ab9 100644 --- a/source/themes.c +++ b/source/themes.c @@ -158,7 +158,15 @@ Result get_themes(Theme_s **themes_list, int *theme_count) if (R_FAILED(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; + while (entries_read) { FS_DirectoryEntry entry = {0}; @@ -196,25 +204,18 @@ Result get_themes(Theme_s **themes_list, int *theme_count) return res; } -void add_theme(Theme_s **themes_list, int *theme_count, char *path, char *filename) +void del_theme(u16 *path) { - *theme_count += 1; - *themes_list = realloc(*themes_list, (*theme_count) * sizeof(Theme_s)); - - Theme_s *current_theme = &(*themes_list)[*theme_count - 1]; - memset(current_theme, 0, sizeof(Theme_s)); - - u16 theme_path[0x106] = {0}; - utf8_to_utf16(theme_path, (u8*)path, 0x106); - - 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); + Handle dir_handle; + Result res = FSUSER_OpenDirectory(&dir_handle, ArchiveSD, fsMakePath(PATH_UTF16, path)); + if (R_SUCCEEDED(res)) + { + FSDIR_Close(dir_handle); + FSUSER_DeleteDirectoryRecursively(ArchiveSD, fsMakePath(PATH_UTF16, path)); + } else + { + FSUSER_DeleteFile(ArchiveSD, fsMakePath(PATH_UTF16, path)); + } } Result bgm_install(Theme_s bgm_to_install)