From 51909a3256946a070b5eec2cf1dbae90bc8128c1 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 29 Jun 2014 17:07:04 -0700 Subject: [PATCH] Separate out io actions from save dialog display. --- Core/Dialog/PSPSaveDialog.cpp | 268 ++++++++++++++++++---------------- Core/Dialog/PSPSaveDialog.h | 3 + 2 files changed, 142 insertions(+), 129 deletions(-) diff --git a/Core/Dialog/PSPSaveDialog.cpp b/Core/Dialog/PSPSaveDialog.cpp index 4060405db0..b9550131d3 100755 --- a/Core/Dialog/PSPSaveDialog.cpp +++ b/Core/Dialog/PSPSaveDialog.cpp @@ -618,11 +618,6 @@ int PSPSaveDialog::Update(int animSpeed) display = DS_SAVE_CONFIRM_OVERWRITE; } else { display = DS_SAVE_SAVING; - if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) { - param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save - display = DS_SAVE_DONE; - } else - display = DS_SAVE_LIST_CHOICE; // This will probably need error message ? } } EndDraw(); @@ -643,13 +638,6 @@ int PSPSaveDialog::Update(int animSpeed) StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { display = DS_SAVE_SAVING; - if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) { - param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save - display = DS_SAVE_DONE; - } else { - // TODO: This should probably show an error message? - StartFade(false); - } } EndDraw(); @@ -674,21 +662,13 @@ int PSPSaveDialog::Update(int animSpeed) } } else if (IsButtonPressed(okButtonFlag)) { display = DS_SAVE_SAVING; - if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) { - param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save - display = DS_SAVE_DONE; - } else { - // TODO: This should probably show an error message? - if (param.GetPspParam()->mode != SCE_UTILITY_SAVEDATA_TYPE_SAVE) - display = DS_SAVE_LIST_CHOICE; - else - StartFade(false); - } } EndDraw(); break; case DS_SAVE_SAVING: + ExecuteIOAction(); + StartDraw(); DisplaySaveIcon(); @@ -735,8 +715,6 @@ int PSPSaveDialog::Update(int animSpeed) StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { display = DS_LOAD_LOADING; - if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave)) - display = DS_LOAD_DONE; } EndDraw(); @@ -757,17 +735,13 @@ int PSPSaveDialog::Update(int animSpeed) StartFade(false); } else if (IsButtonPressed(okButtonFlag)) { display = DS_LOAD_LOADING; - if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave)) - display = DS_LOAD_DONE; - else { - param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; - StartFade(false); - } } EndDraw(); break; case DS_LOAD_LOADING: + ExecuteIOAction(); + StartDraw(); DisplaySaveIcon(); @@ -857,17 +831,14 @@ int PSPSaveDialog::Update(int animSpeed) display = DS_DELETE_LIST_CHOICE; else { display = DS_DELETE_DELETING; - if (param.Delete(param.GetPspParam(),currentSelectedSave)) { - param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save - display = DS_DELETE_DONE; - } else - display = DS_DELETE_LIST_CHOICE; // This will probably need error message ? } } EndDraw(); break; case DS_DELETE_DELETING: + ExecuteIOAction(); + StartDraw(); DisplayMessage(d->T("Deleting","Deleting\nPlease Wait...")); @@ -910,99 +881,10 @@ int PSPSaveDialog::Update(int animSpeed) break; case DS_NONE: // For action which display nothing - { - switch ((SceUtilitySavedataType)(u32)param.GetPspParam()->mode) - { - case SCE_UTILITY_SAVEDATA_TYPE_LOAD: // Only load and exit - case SCE_UTILITY_SAVEDATA_TYPE_AUTOLOAD: - if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave)) - param.GetPspParam()->common.result = 0; - else - param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA; - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - break; - case SCE_UTILITY_SAVEDATA_TYPE_SAVE: // Only save and exit - case SCE_UTILITY_SAVEDATA_TYPE_AUTOSAVE: - if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) - param.GetPspParam()->common.result = 0; - else - param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_SAVE_MS_NOSPACE; - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - break; - case SCE_UTILITY_SAVEDATA_TYPE_SIZES: - param.GetPspParam()->common.result = param.GetSizes(param.GetPspParam()); - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - break; - case SCE_UTILITY_SAVEDATA_TYPE_LIST: - param.GetList(param.GetPspParam()); - param.GetPspParam()->common.result = 0; - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - break; - case SCE_UTILITY_SAVEDATA_TYPE_FILES: - param.GetPspParam()->common.result = param.GetFilesList(param.GetPspParam()); - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - break; - case SCE_UTILITY_SAVEDATA_TYPE_GETSIZE: - { - bool result = param.GetSize(param.GetPspParam()); - // TODO: According to JPCSP, should test/verify this part but seems edge casey. - if (MemoryStick_State() != PSP_MEMORYSTICK_STATE_DRIVER_READY) - param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_MEMSTICK; - else if (result) - param.GetPspParam()->common.result = 0; - else - param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - } - break; - case SCE_UTILITY_SAVEDATA_TYPE_DELETEDATA: - DEBUG_LOG(SCEUTILITY, "sceUtilitySavedata DELETEDATA: %s", param.GetPspParam()->saveName); - param.GetPspParam()->common.result = param.DeleteData(param.GetPspParam()); - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - break; - //case SCE_UTILITY_SAVEDATA_TYPE_AUTODELETE: - case SCE_UTILITY_SAVEDATA_TYPE_SINGLEDELETE: - if (param.Delete(param.GetPspParam(), param.GetSelectedSave())) - param.GetPspParam()->common.result = 0; - else - param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_DELETE_NO_DATA; - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - break; - // TODO: Should reset the directory's other files. - case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATA: - case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE: - if (param.Save(param.GetPspParam(), GetSelectedSaveDirName(), param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE)) - param.GetPspParam()->common.result = 0; - else - param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - break; - case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATA: - case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE: - if (param.Save(param.GetPspParam(), GetSelectedSaveDirName(), param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE)) - param.GetPspParam()->common.result = 0; - else - param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - break; - case SCE_UTILITY_SAVEDATA_TYPE_READDATA: - case SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE: - if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave, param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) - param.GetPspParam()->common.result = 0; - else if (param.secureCanSkip(param.GetPspParam(),param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) { - INFO_LOG(SCEUTILITY,"Has not been saved yet, just skip."); - param.GetPspParam()->common.result = 0; - } - else - param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; // not sure if correct code - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - break; - default: - ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); - break; - } - } + ExecuteNotVisibleIOAction(); + ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); break; + default: ChangeStatus(SCE_UTILITY_STATUS_FINISHED, 0); break; @@ -1014,8 +896,136 @@ int PSPSaveDialog::Update(int animSpeed) return 0; } -int PSPSaveDialog::Shutdown(bool force) -{ +void PSPSaveDialog::ExecuteIOAction() { + switch (display) { + case DS_LOAD_LOADING: + if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave)) { + display = DS_LOAD_DONE; + } else { + // TODO: This should probably show an error message? + param.GetPspParam()->common.result = SCE_UTILITY_DIALOG_RESULT_CANCEL; + StartFade(false); + } + break; + case DS_SAVE_SAVING: + if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) { + param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save + display = DS_SAVE_DONE; + } else { + // TODO: This should probably show an error message? + if (param.GetPspParam()->mode != SCE_UTILITY_SAVEDATA_TYPE_SAVE) { + display = DS_SAVE_LIST_CHOICE; + } else { + StartFade(false); + } + } + break; + case DS_DELETE_DELETING: + if (param.Delete(param.GetPspParam(),currentSelectedSave)) { + param.SetPspParam(param.GetPspParam()); // Optim : Just Update modified save + display = DS_DELETE_DONE; + } else { + display = DS_DELETE_LIST_CHOICE; // This will probably need error message ? + } + break; + case DS_NONE: + ExecuteNotVisibleIOAction(); + break; + + default: + // Nothing to do here. + break; + } +} + +void PSPSaveDialog::ExecuteNotVisibleIOAction() { + switch ((SceUtilitySavedataType)(u32)param.GetPspParam()->mode) { + case SCE_UTILITY_SAVEDATA_TYPE_LOAD: // Only load and exit + case SCE_UTILITY_SAVEDATA_TYPE_AUTOLOAD: + if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave)) { + param.GetPspParam()->common.result = 0; + } else { + param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_LOAD_NO_DATA; + } + break; + case SCE_UTILITY_SAVEDATA_TYPE_SAVE: // Only save and exit + case SCE_UTILITY_SAVEDATA_TYPE_AUTOSAVE: + if (param.Save(param.GetPspParam(), GetSelectedSaveDirName())) { + param.GetPspParam()->common.result = 0; + } else { + param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_SAVE_MS_NOSPACE; + } + break; + case SCE_UTILITY_SAVEDATA_TYPE_SIZES: + param.GetPspParam()->common.result = param.GetSizes(param.GetPspParam()); + break; + case SCE_UTILITY_SAVEDATA_TYPE_LIST: + param.GetList(param.GetPspParam()); + param.GetPspParam()->common.result = 0; + break; + case SCE_UTILITY_SAVEDATA_TYPE_FILES: + param.GetPspParam()->common.result = param.GetFilesList(param.GetPspParam()); + break; + case SCE_UTILITY_SAVEDATA_TYPE_GETSIZE: + { + bool result = param.GetSize(param.GetPspParam()); + // TODO: According to JPCSP, should test/verify this part but seems edge casey. + if (MemoryStick_State() != PSP_MEMORYSTICK_STATE_DRIVER_READY) { + param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_MEMSTICK; + } else if (result) { + param.GetPspParam()->common.result = 0; + } else { + param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; + } + } + break; + case SCE_UTILITY_SAVEDATA_TYPE_DELETEDATA: + DEBUG_LOG(SCEUTILITY, "sceUtilitySavedata DELETEDATA: %s", param.GetPspParam()->saveName); + param.GetPspParam()->common.result = param.DeleteData(param.GetPspParam()); + break; + //case SCE_UTILITY_SAVEDATA_TYPE_AUTODELETE: + case SCE_UTILITY_SAVEDATA_TYPE_SINGLEDELETE: + if (param.Delete(param.GetPspParam(), param.GetSelectedSave())) { + param.GetPspParam()->common.result = 0; + } else { + param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_DELETE_NO_DATA; + } + break; + // TODO: Should reset the directory's other files. + case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATA: + case SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE: + if (param.Save(param.GetPspParam(), GetSelectedSaveDirName(), param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE)) { + param.GetPspParam()->common.result = 0; + } else { + param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; + } + break; + case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATA: + case SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE: + if (param.Save(param.GetPspParam(), GetSelectedSaveDirName(), param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_WRITEDATASECURE)) { + param.GetPspParam()->common.result = 0; + } else { + param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; + } + break; + case SCE_UTILITY_SAVEDATA_TYPE_READDATA: + case SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE: + if (param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave, param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) { + param.GetPspParam()->common.result = 0; + } else if (param.secureCanSkip(param.GetPspParam(),param.GetPspParam()->mode == SCE_UTILITY_SAVEDATA_TYPE_READDATASECURE)) { + // TODO: This makes loading/saving work in some games but also confuses them. Must be wrong in some way. + INFO_LOG(SCEUTILITY,"Has not been saved yet, just skip."); + param.GetPspParam()->common.result = 0; + } else { + param.GetPspParam()->common.result = SCE_UTILITY_SAVEDATA_ERROR_RW_NO_DATA; // not sure if correct code + } + break; + default: + break; + } +} + +int PSPSaveDialog::Shutdown(bool force) { if (GetStatus() != SCE_UTILITY_STATUS_FINISHED && !force) return SCE_ERROR_UTILITY_INVALID_STATUS; diff --git a/Core/Dialog/PSPSaveDialog.h b/Core/Dialog/PSPSaveDialog.h index d1a51dcc7e..e4c1e79e72 100644 --- a/Core/Dialog/PSPSaveDialog.h +++ b/Core/Dialog/PSPSaveDialog.h @@ -89,6 +89,9 @@ private: void DisplayMessage(std::string text, bool hasYesNo = false); const std::string GetSelectedSaveDirName() const; + void ExecuteIOAction(); + void ExecuteNotVisibleIOAction(); + enum DisplayState { DS_NONE,