Add BOSS ext data support, always free action prompts.

This commit is contained in:
Steven Smith 2016-04-08 20:50:45 -07:00
parent a9f30b1301
commit c4bd7f89b3
15 changed files with 50 additions and 31 deletions

@ -1 +1 @@
Subproject commit cbda9a6b87292341f33f56099ac34894a58fe133
Subproject commit 3547b54340ed59f670dfe6e97abc19f2c66fc999

View File

@ -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);

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
if(response) {
ui_push(progressbar_create("Deleting Pending Titles", "", data, action_delete_all_pending_titles_update, NULL));
}
}

View File

@ -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);
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);
}
}

View File

@ -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);
if(response) {
ui_push(progressbar_create("Deleting Pending Title", "", data, action_delete_pending_title_update, ui_draw_pending_title_info));
}
}

View File

@ -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);
if(response) {
ui_push(progressbar_create("Deleting Ticket", "", data, action_delete_ticket_update, ui_draw_ticket_info));
}
}

View File

@ -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);
if(response) {
ui_push(progressbar_create("Deleting Title", "", data, action_delete_title_update, ui_draw_title_info));
}
}

View File

@ -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);
if(response) {
ui_push(progressbar_create("Exporting Secure Value", "", data, action_export_secure_value_update, ui_draw_title_info));
}
}

View File

@ -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);
if(response) {
ui_push(progressbar_create("Importing Secure Value", "", data, action_import_secure_value_update, ui_draw_title_info));
}
}

View File

@ -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);
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);
}
}

View File

@ -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);
if(response) {
ui_push(progressbar_create("Launching Title", "", data, action_launch_title_update, ui_draw_title_info));
}
}

View File

@ -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);
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);
}
}

View File

@ -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) {