diff --git a/source/ui/section/action/action.h b/source/ui/section/action/action.h index f56d34c..efe1915 100644 --- a/source/ui/section/action/action.h +++ b/source/ui/section/action/action.h @@ -36,6 +36,7 @@ void action_install_cdn(linked_list* items, list_item* selected); void action_install_cdn_noprompt(volatile bool* done, ticket_info* info, bool finishedPrompt); void action_delete_title(linked_list* items, list_item* selected); +void action_delete_title_ticket(linked_list* items, list_item* selected); void action_launch_title(linked_list* items, list_item* selected); void action_extract_smdh(linked_list* items, list_item* selected); void action_import_seed(linked_list* items, list_item* selected); diff --git a/source/ui/section/action/deletetitle.c b/source/ui/section/action/deletetitle.c index 69b2cce..9220987 100644 --- a/source/ui/section/action/deletetitle.c +++ b/source/ui/section/action/deletetitle.c @@ -15,6 +15,7 @@ typedef struct { linked_list* items; list_item* selected; + bool ticket; } delete_title_data; static void action_delete_title_draw_top(ui_view* view, void* data, float x1, float y1, float x2, float y2) { @@ -26,7 +27,11 @@ static void action_delete_title_update(ui_view* view, void* data, float* progres title_info* info = (title_info*) deleteData->selected->data; - Result res = AM_DeleteTitle(info->mediaType, info->titleId); + Result res = 0; + + if(R_SUCCEEDED(res = AM_DeleteTitle(info->mediaType, info->titleId)) && deleteData->ticket) { + res = AM_DeleteTicket(info->titleId); + } ui_pop(); info_destroy(view); @@ -51,7 +56,7 @@ static void action_delete_title_onresponse(ui_view* view, void* data, bool respo } } -void action_delete_title(linked_list* items, list_item* selected) { +static void action_delete_title_internal(linked_list* items, list_item* selected, const char* message, bool ticket) { delete_title_data* data = (delete_title_data*) calloc(1, sizeof(delete_title_data)); if(data == NULL) { error_display(NULL, NULL, "Failed to allocate delete title data."); @@ -61,6 +66,15 @@ void action_delete_title(linked_list* items, list_item* selected) { data->items = items; data->selected = selected; + data->ticket = ticket; - prompt_display("Confirmation", "Delete the selected title?", COLOR_TEXT, true, data, action_delete_title_draw_top, action_delete_title_onresponse); + prompt_display("Confirmation", message, COLOR_TEXT, true, data, action_delete_title_draw_top, action_delete_title_onresponse); +} + +void action_delete_title(linked_list* items, list_item* selected) { + action_delete_title_internal(items, selected, "Delete the selected title?", false); +} + +void action_delete_title_ticket(linked_list* items, list_item* selected) { + action_delete_title_internal(items, selected, "Delete the selected title and ticket?", true); } \ No newline at end of file diff --git a/source/ui/section/titles.c b/source/ui/section/titles.c index bf5b9b3..5003555 100644 --- a/source/ui/section/titles.c +++ b/source/ui/section/titles.c @@ -14,6 +14,7 @@ static list_item launch_title = {"Launch Title", COLOR_TEXT, action_launch_title}; static list_item delete_title = {"Delete Title", COLOR_TEXT, action_delete_title}; +static list_item delete_title_ticket = {"Delete Title And Ticket", COLOR_TEXT, action_delete_title_ticket}; static list_item extract_smdh = {"Extract SMDH", COLOR_TEXT, action_extract_smdh}; static list_item import_seed = {"Import Seed", COLOR_TEXT, action_import_seed}; static list_item browse_save_data = {"Browse Save Data", COLOR_TEXT, action_browse_title_save_data}; @@ -75,6 +76,7 @@ static void titles_action_update(ui_view* view, void* data, linked_list* items, if(info->mediaType != MEDIATYPE_GAME_CARD) { linked_list_add(items, &delete_title); + linked_list_add(items, &delete_title_ticket); } if(!info->twl) {