mirror of
https://gitlab.com/Theopse/fbi-i18n-zh.git
synced 2025-04-06 03:58:02 +08:00
Use filters when retrieving file information in actions.
This commit is contained in:
parent
b87332ff68
commit
9ec05c8860
@ -342,4 +342,22 @@ u16 util_get_tmd_content_count(u8* tmd) {
|
||||
|
||||
u8* util_get_tmd_content_chunk(u8* tmd, u32 index) {
|
||||
return &tmd[sigSizes[tmd[0x03]] + 0x9C4 + (index * 0x30)];
|
||||
}
|
||||
|
||||
bool util_filter_cias(void* data, const char* name, u32 attributes) {
|
||||
if((attributes & FS_ATTRIBUTE_DIRECTORY) != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t len = strlen(name);
|
||||
return len >= 4 && strncasecmp(name + len - 4, ".cia", 4) == 0;
|
||||
}
|
||||
|
||||
bool util_filter_tickets(void* data, const char* name, u32 attributes) {
|
||||
if((attributes & FS_ATTRIBUTE_DIRECTORY) != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t len = strlen(name);
|
||||
return len >= 4 && strncasecmp(name + len - 4, ".tik", 4) == 0;
|
||||
}
|
@ -57,4 +57,7 @@ u64 util_get_cia_title_id(u8* cia);
|
||||
u64 util_get_ticket_title_id(u8* ticket);
|
||||
u64 util_get_tmd_title_id(u8* tmd);
|
||||
u16 util_get_tmd_content_count(u8* tmd);
|
||||
u8* util_get_tmd_content_chunk(u8* tmd, u32 index);
|
||||
u8* util_get_tmd_content_chunk(u8* tmd, u32 index);
|
||||
|
||||
bool util_filter_cias(void* data, const char* name, u32 attributes);
|
||||
bool util_filter_tickets(void* data, const char* name, u32 attributes);
|
@ -176,6 +176,8 @@ static void action_delete_contents_internal(linked_list* items, list_item* selec
|
||||
popData.recursive = recursive;
|
||||
popData.includeBase = includeBase;
|
||||
popData.dirsFirst = false;
|
||||
popData.filter = ciasOnly ? util_filter_cias : ticketsOnly ? util_filter_tickets : NULL;
|
||||
popData.filterData = NULL;
|
||||
|
||||
Result listRes = task_populate_files(&popData);
|
||||
if(R_FAILED(listRes)) {
|
||||
@ -196,17 +198,6 @@ static void action_delete_contents_internal(linked_list* items, list_item* selec
|
||||
return;
|
||||
}
|
||||
|
||||
linked_list_iter iter;
|
||||
linked_list_iterate(&data->contents, &iter);
|
||||
|
||||
while(linked_list_iter_has_next(&iter)) {
|
||||
file_info* info = (file_info*) ((list_item*) linked_list_iter_next(&iter))->data;
|
||||
|
||||
if((ciasOnly && (info->isDirectory || !info->isCia)) || (ticketsOnly && (info->isDirectory || !info->isTicket))) {
|
||||
linked_list_iter_remove(&iter);
|
||||
}
|
||||
}
|
||||
|
||||
data->deleteInfo.total = linked_list_size(&data->contents);
|
||||
data->deleteInfo.processed = data->deleteInfo.total;
|
||||
|
||||
|
@ -283,6 +283,8 @@ static void action_install_cias_internal(linked_list* items, list_item* selected
|
||||
popData.recursive = false;
|
||||
popData.includeBase = !data->target->isDirectory;
|
||||
popData.dirsFirst = false;
|
||||
popData.filter = util_filter_cias;
|
||||
popData.filterData = NULL;
|
||||
|
||||
Result listRes = task_populate_files(&popData);
|
||||
if(R_FAILED(listRes)) {
|
||||
@ -303,17 +305,6 @@ static void action_install_cias_internal(linked_list* items, list_item* selected
|
||||
return;
|
||||
}
|
||||
|
||||
linked_list_iter iter;
|
||||
linked_list_iterate(&data->contents, &iter);
|
||||
|
||||
while(linked_list_iter_has_next(&iter)) {
|
||||
file_info* info = (file_info*) ((list_item*) linked_list_iter_next(&iter))->data;
|
||||
|
||||
if(!info->isCia) {
|
||||
linked_list_iter_remove(&iter);
|
||||
}
|
||||
}
|
||||
|
||||
data->installInfo.total = linked_list_size(&data->contents);
|
||||
data->installInfo.processed = data->installInfo.total;
|
||||
|
||||
|
@ -262,6 +262,8 @@ static void action_install_tickets_internal(linked_list* items, list_item* selec
|
||||
popData.recursive = false;
|
||||
popData.includeBase = !data->target->isDirectory;
|
||||
popData.dirsFirst = false;
|
||||
popData.filter = util_filter_tickets;
|
||||
popData.filterData = NULL;
|
||||
|
||||
Result listRes = task_populate_files(&popData);
|
||||
if(R_FAILED(listRes)) {
|
||||
@ -282,17 +284,6 @@ static void action_install_tickets_internal(linked_list* items, list_item* selec
|
||||
return;
|
||||
}
|
||||
|
||||
linked_list_iter iter;
|
||||
linked_list_iterate(&data->contents, &iter);
|
||||
|
||||
while(linked_list_iter_has_next(&iter)) {
|
||||
file_info* info = (file_info*) ((list_item*) linked_list_iter_next(&iter))->data;
|
||||
|
||||
if(!info->isTicket) {
|
||||
linked_list_iter_remove(&iter);
|
||||
}
|
||||
}
|
||||
|
||||
data->installInfo.total = linked_list_size(&data->contents);
|
||||
data->installInfo.processed = data->installInfo.total;
|
||||
|
||||
|
@ -314,6 +314,8 @@ void action_paste_contents(linked_list* items, list_item* selected) {
|
||||
popData.recursive = true;
|
||||
popData.includeBase = !clipboard_is_contents_only() || !util_is_dir(clipboard_get_archive(), clipboard_get_path());
|
||||
popData.dirsFirst = true;
|
||||
popData.filter = NULL;
|
||||
popData.filterData = NULL;
|
||||
|
||||
Result listRes = task_populate_files(&popData);
|
||||
if(R_FAILED(listRes)) {
|
||||
|
@ -342,9 +342,9 @@ static bool files_filter(void* data, const char* name, u32 attributes) {
|
||||
size_t len = strlen(name);
|
||||
if(len >= 4) {
|
||||
const char* extension = name + len - 4;
|
||||
if(strncmp(extension, ".cia", 4) == 0) {
|
||||
if(strncasecmp(extension, ".cia", 4) == 0) {
|
||||
return listData->showCias;
|
||||
} else if(strncmp(extension, ".tik", 4) == 0) {
|
||||
} else if(strncasecmp(extension, ".tik", 4) == 0) {
|
||||
return listData->showTickets;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user