From c4bd7f89b3a64d2d55b40346b54de806d6065873 Mon Sep 17 00:00:00 2001 From: Steven Smith Date: Fri, 8 Apr 2016 20:50:45 -0700 Subject: [PATCH] Add BOSS ext data support, always free action prompts. --- buildtools | 2 +- source/ui/section/action/action.h | 4 +++- source/ui/section/action/browsebossextsavedata.c | 10 ++++++++++ source/ui/section/action/browseextsavedata.c | 2 +- source/ui/section/action/deleteallpendingtitles.c | 4 ++-- source/ui/section/action/deletecontents.c | 6 ++++-- source/ui/section/action/deletependingtitle.c | 4 ++-- source/ui/section/action/deleteticket.c | 4 ++-- source/ui/section/action/deletetitle.c | 4 ++-- source/ui/section/action/exportsecurevalue.c | 12 ++++++------ source/ui/section/action/importsecurevalue.c | 8 ++++---- source/ui/section/action/installcias.c | 6 ++++-- source/ui/section/action/launchtitle.c | 4 ++-- source/ui/section/action/pastefiles.c | 6 ++++-- source/ui/section/extsavedata.c | 5 +++-- 15 files changed, 50 insertions(+), 31 deletions(-) create mode 100644 source/ui/section/action/browsebossextsavedata.c diff --git a/buildtools b/buildtools index cbda9a6..3547b54 160000 --- a/buildtools +++ b/buildtools @@ -1 +1 @@ -Subproject commit cbda9a6b87292341f33f56099ac34894a58fe133 +Subproject commit 3547b54340ed59f670dfe6e97abc19f2c66fc999 diff --git a/source/ui/section/action/action.h b/source/ui/section/action/action.h index 3a156c2..94b1fea 100644 --- a/source/ui/section/action/action.h +++ b/source/ui/section/action/action.h @@ -2,7 +2,9 @@ #include "../task/task.h" -void action_browse_ext_save_data(ext_save_data_info* info); +void action_browse_boss_ext_save_data(ext_save_data_info* info); + +void action_browse_user_ext_save_data(ext_save_data_info* info); void action_browse_system_save_data(system_save_data_info* info); diff --git a/source/ui/section/action/browsebossextsavedata.c b/source/ui/section/action/browsebossextsavedata.c new file mode 100644 index 0000000..a48860e --- /dev/null +++ b/source/ui/section/action/browsebossextsavedata.c @@ -0,0 +1,10 @@ +#include <3ds.h> + +#include "action.h" +#include "../section.h" + +void action_browse_boss_ext_save_data(ext_save_data_info* info) { + u32 path[3] = {info->mediaType, (u32) (info->extSaveDataId & 0xFFFFFFFF), (u32) ((info->extSaveDataId >> 32) & 0xFFFFFFFF)}; + FS_Archive archive = {ARCHIVE_BOSS_EXTDATA, {PATH_BINARY, 12, path}}; + files_open(archive); +} \ No newline at end of file diff --git a/source/ui/section/action/browseextsavedata.c b/source/ui/section/action/browseextsavedata.c index 8108c33..5bd8b97 100644 --- a/source/ui/section/action/browseextsavedata.c +++ b/source/ui/section/action/browseextsavedata.c @@ -3,7 +3,7 @@ #include "action.h" #include "../section.h" -void action_browse_ext_save_data(ext_save_data_info* info) { +void action_browse_user_ext_save_data(ext_save_data_info* info) { u32 path[3] = {info->mediaType, (u32) (info->extSaveDataId & 0xFFFFFFFF), (u32) ((info->extSaveDataId >> 32) & 0xFFFFFFFF)}; FS_Archive archive = {info->shared ? ARCHIVE_SHARED_EXTDATA : ARCHIVE_EXTDATA, {PATH_BINARY, 12, path}}; files_open(archive); diff --git a/source/ui/section/action/deleteallpendingtitles.c b/source/ui/section/action/deleteallpendingtitles.c index fb1209c..af92879 100644 --- a/source/ui/section/action/deleteallpendingtitles.c +++ b/source/ui/section/action/deleteallpendingtitles.c @@ -33,9 +33,9 @@ static void action_delete_all_pending_titles_update(ui_view* view, void* data, f } static void action_delete_all_pending_titles_onresponse(ui_view* view, void* data, bool response) { - if(response) { - prompt_destroy(view); + prompt_destroy(view); + if(response) { ui_push(progressbar_create("Deleting Pending Titles", "", data, action_delete_all_pending_titles_update, NULL)); } } diff --git a/source/ui/section/action/deletecontents.c b/source/ui/section/action/deletecontents.c index 377cfd1..0119645 100644 --- a/source/ui/section/action/deletecontents.c +++ b/source/ui/section/action/deletecontents.c @@ -86,12 +86,14 @@ static void action_delete_dir_contents_update(ui_view* view, void* data, float* } static void action_delete_dir_contents_onresponse(ui_view* view, void* data, bool response) { - if(response) { - prompt_destroy(view); + prompt_destroy(view); + if(response) { ui_view* progressView = progressbar_create("Deleting Contents", "Press B to cancel.", data, action_delete_dir_contents_update, action_delete_dir_contents_draw_top); snprintf(progressbar_get_progress_text(progressView), PROGRESS_TEXT_MAX, "0 / %lu", ((delete_dir_contents_data*) data)->total); ui_push(progressView); + } else { + free(data); } } diff --git a/source/ui/section/action/deletependingtitle.c b/source/ui/section/action/deletependingtitle.c index 16c38b0..c408ed9 100644 --- a/source/ui/section/action/deletependingtitle.c +++ b/source/ui/section/action/deletependingtitle.c @@ -29,9 +29,9 @@ static void action_delete_pending_title_update(ui_view* view, void* data, float* } static void action_delete_pending_title_onresponse(ui_view* view, void* data, bool response) { - if(response) { - prompt_destroy(view); + prompt_destroy(view); + if(response) { ui_push(progressbar_create("Deleting Pending Title", "", data, action_delete_pending_title_update, ui_draw_pending_title_info)); } } diff --git a/source/ui/section/action/deleteticket.c b/source/ui/section/action/deleteticket.c index 9cd746b..5896a36 100644 --- a/source/ui/section/action/deleteticket.c +++ b/source/ui/section/action/deleteticket.c @@ -29,9 +29,9 @@ static void action_delete_ticket_update(ui_view* view, void* data, float* progre } static void action_delete_ticket_onresponse(ui_view* view, void* data, bool response) { - if(response) { - prompt_destroy(view); + prompt_destroy(view); + if(response) { ui_push(progressbar_create("Deleting Ticket", "", data, action_delete_ticket_update, ui_draw_ticket_info)); } } diff --git a/source/ui/section/action/deletetitle.c b/source/ui/section/action/deletetitle.c index 84f6a7d..9ac3087 100644 --- a/source/ui/section/action/deletetitle.c +++ b/source/ui/section/action/deletetitle.c @@ -29,9 +29,9 @@ static void action_delete_title_update(ui_view* view, void* data, float* progres } static void action_delete_title_onresponse(ui_view* view, void* data, bool response) { - if(response) { - prompt_destroy(view); + prompt_destroy(view); + if(response) { ui_push(progressbar_create("Deleting Title", "", data, action_delete_title_update, ui_draw_title_info)); } } diff --git a/source/ui/section/action/exportsecurevalue.c b/source/ui/section/action/exportsecurevalue.c index dd69039..278ecad 100644 --- a/source/ui/section/action/exportsecurevalue.c +++ b/source/ui/section/action/exportsecurevalue.c @@ -21,11 +21,11 @@ static void action_export_secure_value_update(ui_view* view, void* data, float* u64 value = 0; if(R_SUCCEEDED(res = FSUSER_GetSaveDataSecureValue(&exists, &value, SECUREVALUE_SLOT_SD, (u32) ((info->titleId >> 8) & 0xFFFFF), (u8) (info->titleId & 0xFF)))) { if(!exists) { - ui_push(prompt_create("Failure", "Secure value not set.", 0xFF000000, false, info, NULL, ui_draw_title_info, action_export_secure_value_end_onresponse)); - progressbar_destroy(view); ui_pop(); + ui_push(prompt_create("Failure", "Secure value not set.", 0xFF000000, false, info, NULL, ui_draw_title_info, action_export_secure_value_end_onresponse)); + return; } @@ -48,11 +48,11 @@ static void action_export_secure_value_update(ui_view* view, void* data, float* } if(R_FAILED(res)) { - error_display_res(info, ui_draw_title_info, res, "Failed to export secure value."); - progressbar_destroy(view); ui_pop(); + error_display_res(info, ui_draw_title_info, res, "Failed to export secure value."); + return; } @@ -63,9 +63,9 @@ static void action_export_secure_value_update(ui_view* view, void* data, float* } static void action_export_secure_value_onresponse(ui_view* view, void* data, bool response) { - if(response) { - prompt_destroy(view); + prompt_destroy(view); + if(response) { ui_push(progressbar_create("Exporting Secure Value", "", data, action_export_secure_value_update, ui_draw_title_info)); } } diff --git a/source/ui/section/action/importsecurevalue.c b/source/ui/section/action/importsecurevalue.c index 54daa53..f5881f0 100644 --- a/source/ui/section/action/importsecurevalue.c +++ b/source/ui/section/action/importsecurevalue.c @@ -32,11 +32,11 @@ static void action_import_secure_value_update(ui_view* view, void* data, float* } if(R_FAILED(res)) { - error_display_res(info, ui_draw_title_info, res, "Failed to import secure value."); - progressbar_destroy(view); ui_pop(); + error_display_res(info, ui_draw_title_info, res, "Failed to import secure value."); + return; } @@ -47,9 +47,9 @@ static void action_import_secure_value_update(ui_view* view, void* data, float* } static void action_import_secure_value_onresponse(ui_view* view, void* data, bool response) { - if(response) { - prompt_destroy(view); + prompt_destroy(view); + if(response) { ui_push(progressbar_create("Importing Secure Value", "", data, action_import_secure_value_update, ui_draw_title_info)); } } diff --git a/source/ui/section/action/installcias.c b/source/ui/section/action/installcias.c index 548e25e..593a997 100644 --- a/source/ui/section/action/installcias.c +++ b/source/ui/section/action/installcias.c @@ -172,12 +172,14 @@ static void action_install_cias_update(ui_view* view, void* data, float* progres } static void action_install_cias_onresponse(ui_view* view, void* data, bool response) { - if(response) { - prompt_destroy(view); + prompt_destroy(view); + if(response) { ui_view* progressView = progressbar_create("Installing CIA(s)", "Press B to cancel.", data, action_install_cias_update, action_install_cias_draw_top); snprintf(progressbar_get_progress_text(progressView), PROGRESS_TEXT_MAX, "0 / %lu", ((install_cias_data*) data)->total); ui_push(progressView); + } else { + free(data); } } diff --git a/source/ui/section/action/launchtitle.c b/source/ui/section/action/launchtitle.c index 991eee1..b31076c 100644 --- a/source/ui/section/action/launchtitle.c +++ b/source/ui/section/action/launchtitle.c @@ -35,9 +35,9 @@ static void action_launch_title_update(ui_view* view, void* data, float* progres } static void action_launch_title_onresponse(ui_view* view, void* data, bool response) { - if(response) { - prompt_destroy(view); + prompt_destroy(view); + if(response) { ui_push(progressbar_create("Launching Title", "", data, action_launch_title_update, ui_draw_title_info)); } } diff --git a/source/ui/section/action/pastefiles.c b/source/ui/section/action/pastefiles.c index db3c01f..92f2c1f 100644 --- a/source/ui/section/action/pastefiles.c +++ b/source/ui/section/action/pastefiles.c @@ -134,12 +134,14 @@ static void action_paste_files_update(ui_view* view, void* data, float* progress } static void action_paste_files_onresponse(ui_view* view, void* data, bool response) { - if(response) { - prompt_destroy(view); + prompt_destroy(view); + if(response) { ui_view* progressView = progressbar_create("Pasting Contents", "Press B to cancel.", data, action_paste_files_update, action_paste_files_draw_top); snprintf(progressbar_get_progress_text(progressView), PROGRESS_TEXT_MAX, "0 / %lu", ((paste_files_data*) data)->total); ui_push(progressView); + } else { + free(data); } } diff --git a/source/ui/section/extsavedata.c b/source/ui/section/extsavedata.c index cc25ff2..119a2c5 100644 --- a/source/ui/section/extsavedata.c +++ b/source/ui/section/extsavedata.c @@ -16,11 +16,12 @@ typedef struct { bool populated; } extsavedata_data; -#define EXTSAVEDATA_ACTION_COUNT 1 +#define EXTSAVEDATA_ACTION_COUNT 2 static u32 extsavedata_action_count = EXTSAVEDATA_ACTION_COUNT; static list_item extsavedata_action_items[EXTSAVEDATA_ACTION_COUNT] = { - {"Browse Save Data", 0xFF000000, action_browse_ext_save_data}, + {"Browse User Save Data", 0xFF000000, action_browse_user_ext_save_data}, + {"Browse SpotPass Save Data", 0xFF000000, action_browse_boss_ext_save_data}, }; static void extsavedata_action_draw_top(ui_view* view, void* data, float x1, float y1, float x2, float y2, list_item* selected) {