mirror of
https://github.com/J-D-K/JKSV.git
synced 2026-09-13 13:05:23 -05:00
Debugging everywhere!
This commit is contained in:
@@ -28,6 +28,10 @@ namespace
|
||||
CREATE_ALL_SAVE,
|
||||
DELETE_ALL_SAVE
|
||||
};
|
||||
|
||||
using TaskConfirm = ConfirmState<sys::Task, TaskState, UserOptionState::DataStruct>;
|
||||
using ProgressConfirm = ConfirmState<sys::ProgressTask, ProgressState, UserOptionState::DataStruct>;
|
||||
|
||||
} // namespace
|
||||
|
||||
// Declarations here. Defintions after class.
|
||||
@@ -39,30 +43,23 @@ static void create_all_save_data_for_user(sys::Task *task, std::shared_ptr<UserO
|
||||
static void delete_all_save_data_for_user(sys::Task *task, std::shared_ptr<UserOptionState::DataStruct> dataStruct);
|
||||
|
||||
UserOptionState::UserOptionState(data::User *user, TitleSelectCommon *titleSelect)
|
||||
: m_user(user)
|
||||
, m_titleSelect(titleSelect)
|
||||
, m_userOptionMenu(8, 8, 460, 22, 720)
|
||||
, m_dataStruct(std::make_shared<UserOptionState::DataStruct>())
|
||||
: m_user{user}
|
||||
, m_titleSelect{titleSelect}
|
||||
, m_userOptionMenu{8, 8, 460, 22, 720}
|
||||
, m_dataStruct{std::make_shared<UserOptionState::DataStruct>()}
|
||||
{
|
||||
// Check if panel needs to be created. It's shared by all instances.
|
||||
if (!m_menuPanel) { m_menuPanel = std::make_unique<ui::SlideOutPanel>(480, ui::SlideOutPanel::Side::Right); }
|
||||
|
||||
int currentStringIndex = 0;
|
||||
const char *currentString = nullptr;
|
||||
while ((currentString = strings::get_by_name(strings::names::USEROPTION_MENU, currentStringIndex++)) != nullptr)
|
||||
{
|
||||
m_userOptionMenu.add_option(stringutil::get_formatted_string(currentString, m_user->get_nickname()));
|
||||
}
|
||||
|
||||
// Fill this is.
|
||||
m_dataStruct->user = m_user;
|
||||
m_dataStruct->spawningState = this;
|
||||
UserOptionState::create_menu_panel();
|
||||
UserOptionState::load_menu_strings();
|
||||
UserOptionState::initialize_data_struct();
|
||||
}
|
||||
|
||||
void UserOptionState::update()
|
||||
{
|
||||
// Update the main panel.
|
||||
m_menuPanel->update(BaseState::has_focus());
|
||||
const bool hasFocus = BaseState::has_focus();
|
||||
const bool aPressed = input::button_pressed(HidNpadButton_A);
|
||||
const bool bPressed = input::button_pressed(HidNpadButton_B);
|
||||
|
||||
sm_menuPanel->update(hasFocus);
|
||||
|
||||
// See if this needs to be done.
|
||||
if (m_refreshRequired)
|
||||
@@ -72,77 +69,21 @@ void UserOptionState::update()
|
||||
m_refreshRequired = false;
|
||||
}
|
||||
|
||||
if (input::button_pressed(HidNpadButton_A) && m_user->get_account_save_type() != FsSaveDataType_System)
|
||||
if (aPressed)
|
||||
{
|
||||
switch (m_userOptionMenu.get_selected())
|
||||
{
|
||||
case BACKUP_ALL:
|
||||
{
|
||||
// This is broken down to make it easier to read.
|
||||
std::string queryString =
|
||||
stringutil::get_formatted_string(strings::get_by_name(strings::names::USEROPTION_CONFS, 0),
|
||||
m_user->get_nickname());
|
||||
|
||||
// State to push
|
||||
auto confirmBackupAll =
|
||||
std::make_shared<ConfirmState<sys::ProgressTask, ProgressState, UserOptionState::DataStruct>>(
|
||||
queryString,
|
||||
false,
|
||||
backup_all_for_user,
|
||||
m_dataStruct);
|
||||
|
||||
StateManager::push_state(confirmBackupAll);
|
||||
}
|
||||
break;
|
||||
|
||||
case CREATE_SAVE:
|
||||
{
|
||||
auto saveCreateState = std::make_shared<SaveCreateState>(m_user, m_titleSelect);
|
||||
|
||||
// This just pushes the state with the menu to select.
|
||||
StateManager::push_state(std::make_shared<SaveCreateState>(m_user, m_titleSelect));
|
||||
}
|
||||
break;
|
||||
|
||||
case CREATE_ALL_SAVE:
|
||||
{
|
||||
std::string queryString =
|
||||
stringutil::get_formatted_string(strings::get_by_name(strings::names::USEROPTION_CONFS, 1),
|
||||
m_user->get_nickname());
|
||||
|
||||
auto confirmCreateAll = std::make_shared<ConfirmState<sys::Task, TaskState, UserOptionState::DataStruct>>(
|
||||
queryString,
|
||||
true,
|
||||
create_all_save_data_for_user,
|
||||
m_dataStruct);
|
||||
|
||||
// Done?
|
||||
StateManager::push_state(confirmCreateAll);
|
||||
}
|
||||
break;
|
||||
|
||||
case DELETE_ALL_SAVE:
|
||||
{
|
||||
std::string queryString =
|
||||
stringutil::get_formatted_string(strings::get_by_name(strings::names::USEROPTION_CONFS, 2),
|
||||
m_user->get_nickname());
|
||||
|
||||
auto confirmDeleteAll = std::make_shared<ConfirmState<sys::Task, TaskState, UserOptionState::DataStruct>>(
|
||||
queryString,
|
||||
true,
|
||||
delete_all_save_data_for_user,
|
||||
m_dataStruct);
|
||||
|
||||
StateManager::push_state(confirmDeleteAll);
|
||||
}
|
||||
break;
|
||||
case BACKUP_ALL: UserOptionState::backup_all(); break;
|
||||
case CREATE_SAVE: UserOptionState::create_save_create(); break;
|
||||
case CREATE_ALL_SAVE: UserOptionState::create_all_save_data(); break;
|
||||
case DELETE_ALL_SAVE: UserOptionState::delete_all_save_data(); break;
|
||||
}
|
||||
}
|
||||
else if (input::button_pressed(HidNpadButton_B)) { m_menuPanel->close(); }
|
||||
else if (m_menuPanel->is_closed())
|
||||
else if (bPressed) { sm_menuPanel->close(); }
|
||||
else if (sm_menuPanel->is_closed())
|
||||
{
|
||||
BaseState::deactivate();
|
||||
m_menuPanel->reset();
|
||||
sm_menuPanel->reset();
|
||||
}
|
||||
|
||||
m_userOptionMenu.update(BaseState::has_focus());
|
||||
@@ -154,19 +95,83 @@ void UserOptionState::render()
|
||||
m_titleSelect->render();
|
||||
|
||||
// Render panel.
|
||||
m_menuPanel->clear_target();
|
||||
m_userOptionMenu.render(m_menuPanel->get_target(), BaseState::has_focus());
|
||||
m_menuPanel->render(NULL, BaseState::has_focus());
|
||||
sm_menuPanel->clear_target();
|
||||
m_userOptionMenu.render(sm_menuPanel->get_target(), BaseState::has_focus());
|
||||
sm_menuPanel->render(NULL, BaseState::has_focus());
|
||||
}
|
||||
|
||||
void UserOptionState::data_and_view_refresh_required() { m_refreshRequired = true; }
|
||||
|
||||
void UserOptionState::create_menu_panel()
|
||||
{
|
||||
static constexpr int SIZE_PANEL_WIDTH = 480;
|
||||
if (!sm_menuPanel) { sm_menuPanel = std::make_unique<ui::SlideOutPanel>(SIZE_PANEL_WIDTH, ui::SlideOutPanel::Side::Right); }
|
||||
}
|
||||
|
||||
void UserOptionState::load_menu_strings()
|
||||
{
|
||||
const char *nickname = m_user->get_nickname();
|
||||
|
||||
for (int i = 0; const char *format = strings::get_by_name(strings::names::USEROPTION_MENU, i); i++)
|
||||
{
|
||||
const std::string option = stringutil::get_formatted_string(format, nickname);
|
||||
m_userOptionMenu.add_option(option);
|
||||
}
|
||||
}
|
||||
|
||||
void UserOptionState::initialize_data_struct()
|
||||
{
|
||||
m_dataStruct->user = m_user;
|
||||
m_dataStruct->spawningState = this;
|
||||
}
|
||||
|
||||
void UserOptionState::backup_all()
|
||||
{
|
||||
const char *confirmFormat = strings::get_by_name(strings::names::USEROPTION_CONFS, 0);
|
||||
const char *nickname = m_user->get_nickname();
|
||||
|
||||
const std::string queryString = stringutil::get_formatted_string(confirmFormat, nickname);
|
||||
|
||||
auto confirm = std::make_shared<ProgressConfirm>(queryString, true, backup_all_for_user, m_dataStruct);
|
||||
StateManager::push_state(confirm);
|
||||
}
|
||||
|
||||
void UserOptionState::create_save_create()
|
||||
{
|
||||
auto saveCreate = std::make_shared<SaveCreateState>(m_user, m_titleSelect);
|
||||
StateManager::push_state(saveCreate);
|
||||
}
|
||||
|
||||
void UserOptionState::create_all_save_data()
|
||||
{
|
||||
const char *confirmFormat = strings::get_by_name(strings::names::USEROPTION_CONFS, 1);
|
||||
const char *nickname = m_user->get_nickname();
|
||||
|
||||
const std::string queryString = stringutil::get_formatted_string(confirmFormat, nickname);
|
||||
|
||||
auto confirm = std::make_shared<TaskConfirm>(queryString, true, create_all_save_data_for_user, m_dataStruct);
|
||||
StateManager::push_state(confirm);
|
||||
}
|
||||
|
||||
void UserOptionState::delete_all_save_data()
|
||||
{
|
||||
const uint8_t saveType = m_user->get_account_save_type();
|
||||
if (saveType == FsSaveDataType_System || saveType == FsSaveDataType_SystemBcat) { return; }
|
||||
|
||||
const char *confirmFormat = strings::get_by_name(strings::names::USEROPTION_CONFS, 2);
|
||||
const char *nickname = m_user->get_nickname();
|
||||
|
||||
const std::string queryString = stringutil::get_formatted_string(confirmFormat, nickname);
|
||||
|
||||
auto confirm = std::make_shared<TaskConfirm>(queryString, true, delete_all_save_data_for_user, m_dataStruct);
|
||||
StateManager::push_state(confirm);
|
||||
}
|
||||
|
||||
static void backup_all_for_user(sys::ProgressTask *task, std::shared_ptr<UserOptionState::DataStruct> dataStruct)
|
||||
{
|
||||
if (error::is_null(task)) { return; }
|
||||
|
||||
data::User *user = dataStruct->user;
|
||||
UserOptionState *spawningState = dataStruct->spawningState;
|
||||
data::User *user = dataStruct->user;
|
||||
|
||||
const bool exportZip = config::get_by_key(config::keys::EXPORT_TO_ZIP) || config::get_by_key(config::keys::AUTO_UPLOAD);
|
||||
const bool autoUpload = config::get_by_key(config::keys::AUTO_UPLOAD);
|
||||
@@ -230,16 +235,17 @@ static void create_all_save_data_for_user(sys::Task *task, std::shared_ptr<UserO
|
||||
data::User *user = dataStruct->user;
|
||||
UserOptionState *spawningState = dataStruct->spawningState;
|
||||
|
||||
auto &titleInfoMap = data::get_title_info_map();
|
||||
const int popTicks = ui::PopMessageManager::DEFAULT_TICKS;
|
||||
const char *statusTemplate = strings::get_by_name(strings::names::USEROPTION_STATUS, 0);
|
||||
const char *popFailure = strings::get_by_name(strings::names::SAVECREATE_POPS, 0);
|
||||
const FsSaveDataType saveType = user->get_account_save_type();
|
||||
auto &titleInfoMap = data::get_title_info_map();
|
||||
const int popTicks = ui::PopMessageManager::DEFAULT_TICKS;
|
||||
const char *statusTemplate = strings::get_by_name(strings::names::USEROPTION_STATUS, 0);
|
||||
const char *popFailure = strings::get_by_name(strings::names::SAVECREATE_POPS, 1);
|
||||
const uint8_t saveType = user->get_account_save_type();
|
||||
|
||||
for (auto &[applicationID, titleInfo] : titleInfoMap)
|
||||
{
|
||||
|
||||
const bool hasType = titleInfo.has_save_data_type(saveType);
|
||||
if (!hasType) { return; }
|
||||
if (!hasType) { continue; }
|
||||
|
||||
{
|
||||
const std::string status = stringutil::get_formatted_string(statusTemplate, titleInfo.get_title());
|
||||
@@ -247,7 +253,12 @@ static void create_all_save_data_for_user(sys::Task *task, std::shared_ptr<UserO
|
||||
}
|
||||
|
||||
const bool saveCreated = fs::create_save_data_for(user, &titleInfo);
|
||||
if (!saveCreated) { ui::PopMessageManager::push_message(popTicks, popFailure); }
|
||||
if (!saveCreated)
|
||||
{
|
||||
const char *title = titleInfo.get_title();
|
||||
const std::string pop = stringutil::get_formatted_string(popFailure, title);
|
||||
ui::PopMessageManager::push_message(popTicks, pop);
|
||||
}
|
||||
}
|
||||
spawningState->data_and_view_refresh_required();
|
||||
task->finished();
|
||||
@@ -275,7 +286,7 @@ static void delete_all_save_data_for_user(sys::Task *task, std::shared_ptr<UserO
|
||||
for (size_t i = 0; i < totalDataEntries; i++)
|
||||
{
|
||||
const FsSaveDataInfo *saveInfo = user->get_save_info_at(i);
|
||||
if (error::is_null(saveInfo)) { continue; }
|
||||
if (error::is_null(saveInfo) || saveInfo->save_data_type == FsSaveDataType_System) { continue; }
|
||||
|
||||
{
|
||||
const uint64_t applicationID = user->get_application_id_at(i);
|
||||
|
||||
Reference in New Issue
Block a user