diff --git a/source/ui/section/files.c b/source/ui/section/files.c index a155931..cdd4cea 100644 --- a/source/ui/section/files.c +++ b/source/ui/section/files.c @@ -10,6 +10,7 @@ #include "section.h" #include "../error.h" #include "../../util.h" +#include "task.h" typedef struct { bool setup; @@ -38,10 +39,20 @@ static list_item cia_files_action_items[CIA_FILES_ACTION_COUNT] = { {"Paste", 0xFF000000, action_paste_contents}, }; -#define DIRECTORIES_ACTION_COUNT 7 +#define DIRECTORIES_ACTION_COUNT 4 static u32 directories_action_count = DIRECTORIES_ACTION_COUNT; static list_item directories_action_items[DIRECTORIES_ACTION_COUNT] = { + {"Delete all contents", 0xFF000000, action_delete_dir_contents}, + {"Delete", 0xFF000000, action_delete_contents}, + {"Copy", 0xFF000000, action_copy_contents}, + {"Paste", 0xFF000000, action_paste_contents}, +}; + +#define CIA_DIRECTORIES_ACTION_COUNT 7 + +static u32 cia_directories_action_count = CIA_DIRECTORIES_ACTION_COUNT; +static list_item cia_directories_action_items[CIA_DIRECTORIES_ACTION_COUNT] = { {"Install all CIAs to SD", 0xFF000000, action_install_cias_sd}, {"Install all CIAs to NAND", 0xFF000000, action_install_cias_nand}, {"Delete all CIAs", 0xFF000000, action_delete_dir_cias}, @@ -75,19 +86,28 @@ static void files_action_update(ui_view* view, void* data, list_item** items, u3 } if(fileInfo->isDirectory) { - if(*itemCount != &directories_action_count || *items != directories_action_items) { - *itemCount = &directories_action_count; - *items = directories_action_items; - } - } else if(fileInfo->isCia) { - if(*itemCount != &cia_files_action_count || *items != cia_files_action_items) { - *itemCount = &cia_files_action_count; - *items = cia_files_action_items; + if(fileInfo->containsCias) { + if(*itemCount != &cia_directories_action_count || *items != cia_directories_action_items) { + *itemCount = &cia_directories_action_count; + *items = cia_directories_action_items; + } + } else { + if(*itemCount != &directories_action_count || *items != directories_action_items) { + *itemCount = &directories_action_count; + *items = directories_action_items; + } } } else { - if(*itemCount != &files_action_count || *items != files_action_items) { - *itemCount = &files_action_count; - *items = files_action_items; + if(fileInfo->isCia) { + if(*itemCount != &cia_files_action_count || *items != cia_files_action_items) { + *itemCount = &cia_files_action_count; + *items = cia_files_action_items; + } + } else { + if(*itemCount != &files_action_count || *items != files_action_items) { + *itemCount = &files_action_count; + *items = files_action_items; + } } } } diff --git a/source/ui/section/task.c b/source/ui/section/task.c index 87621f3..801675a 100644 --- a/source/ui/section/task.c +++ b/source/ui/section/task.c @@ -150,6 +150,7 @@ static Result task_load_files() { strncpy(dotFileInfo->path, files_path, PATH_MAX); util_get_path_file(dotFileInfo->name, dotFileInfo->path, NAME_MAX); dotFileInfo->isDirectory = true; + dotFileInfo->containsCias = false; dotFileInfo->size = 0; dotFileInfo->isCia = false; @@ -167,6 +168,7 @@ static Result task_load_files() { util_get_parent_path(dotDotFileInfo->path, files_path, PATH_MAX); util_get_path_file(dotDotFileInfo->name, dotDotFileInfo->path, NAME_MAX); dotDotFileInfo->isDirectory = true; + dotDotFileInfo->containsCias = false; dotDotFileInfo->size = 0; dotDotFileInfo->isCia = false; @@ -217,6 +219,7 @@ static Result task_load_files() { snprintf(fileInfo->path, PATH_MAX, "%s%s/", files_path, entryName); fileInfo->isDirectory = true; + fileInfo->containsCias = false; fileInfo->size = 0; fileInfo->isCia = false; } else { @@ -224,6 +227,7 @@ static Result task_load_files() { snprintf(fileInfo->path, PATH_MAX, "%s%s", files_path, entryName); fileInfo->isDirectory = false; + fileInfo->containsCias = false; fileInfo->size = 0; fileInfo->isCia = false; @@ -233,6 +237,8 @@ static Result task_load_files() { AM_TitleEntry titleEntry; if(R_SUCCEEDED(AM_GetCiaFileInfo(MEDIATYPE_SD, &titleEntry, fileHandle))) { + dotFileInfo->containsCias = true; + fileInfo->isCia = true; fileInfo->ciaInfo.titleId = titleEntry.titleID; fileInfo->ciaInfo.version = titleEntry.version; diff --git a/source/ui/section/task.h b/source/ui/section/task.h index adcd91b..a8aa148 100644 --- a/source/ui/section/task.h +++ b/source/ui/section/task.h @@ -29,6 +29,7 @@ typedef struct { char name[NAME_MAX]; char path[PATH_MAX]; bool isDirectory; + bool containsCias; u64 size; bool isCia; cia_info ciaInfo;