mirror of
https://github.com/XorTroll/uLaunch
synced 2024-11-14 00:07:16 +00:00
Fix homebrew launching, add user menu
This commit is contained in:
parent
6c6148a2b1
commit
d6241ac9c9
5 changed files with 126 additions and 35 deletions
|
@ -16,6 +16,7 @@ namespace ui
|
||||||
|
|
||||||
void SetStartMode(am::QMenuStartMode mode);
|
void SetStartMode(am::QMenuStartMode mode);
|
||||||
void LoadMenu();
|
void LoadMenu();
|
||||||
|
void LoadStartupMenu();
|
||||||
|
|
||||||
bool IsSuspended();
|
bool IsSuspended();
|
||||||
bool IsTitleSuspended();
|
bool IsTitleSuspended();
|
||||||
|
|
|
@ -38,6 +38,7 @@ namespace qmenu
|
||||||
fs::CreateDirectory(Q_BASE_SD_DIR);
|
fs::CreateDirectory(Q_BASE_SD_DIR);
|
||||||
fs::CreateDirectory(Q_ENTRIES_PATH);
|
fs::CreateDirectory(Q_ENTRIES_PATH);
|
||||||
fs::CreateDirectory(Q_THEMES_PATH);
|
fs::CreateDirectory(Q_THEMES_PATH);
|
||||||
|
fs::CreateDirectory(Q_BASE_DB_DIR "/user");
|
||||||
fs::CreateDirectory(Q_BASE_SD_DIR "/title");
|
fs::CreateDirectory(Q_BASE_SD_DIR "/title");
|
||||||
fs::CreateDirectory(Q_BASE_SD_DIR "/user");
|
fs::CreateDirectory(Q_BASE_SD_DIR "/user");
|
||||||
fs::CreateDirectory(Q_BASE_SD_DIR "/nro");
|
fs::CreateDirectory(Q_BASE_SD_DIR "/nro");
|
||||||
|
|
|
@ -618,8 +618,15 @@ namespace ui
|
||||||
|
|
||||||
void MenuLayout::HandleHomebrewLaunch(cfg::TitleRecord &rec)
|
void MenuLayout::HandleHomebrewLaunch(cfg::TitleRecord &rec)
|
||||||
{
|
{
|
||||||
int sopt = qapp->CreateShowDialog("Homebrew launch", "How would you like to launch this homebrew?\n\nNOTE: Launching as application might involve BAN RISK, so use it at your own risk!", { "Applet", "Application", "Cancel" }, true);
|
u32 launchmode = 0;
|
||||||
if(sopt == 0)
|
if(config.system_title_override_enabled)
|
||||||
|
{
|
||||||
|
auto sopt = qapp->CreateShowDialog("Homebrew launch", "How would you like to launch this homebrew?\n\nNOTE: Launching as application might involve BAN RISK, so use it at your own risk!", { "Applet", "Application", "Cancel" }, true);
|
||||||
|
if(sopt == 0) launchmode = 1;
|
||||||
|
else if(sopt == 1) launchmode = 2;
|
||||||
|
}
|
||||||
|
else launchmode = 1;
|
||||||
|
if(launchmode == 1)
|
||||||
{
|
{
|
||||||
am::QMenuCommandWriter writer(am::QDaemonMessage::LaunchHomebrewLibApplet);
|
am::QMenuCommandWriter writer(am::QDaemonMessage::LaunchHomebrewLibApplet);
|
||||||
writer.Write<hb::TargetInput>(rec.nro_target);
|
writer.Write<hb::TargetInput>(rec.nro_target);
|
||||||
|
@ -630,36 +637,123 @@ namespace ui
|
||||||
qapp->CloseWithFadeOut();
|
qapp->CloseWithFadeOut();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(sopt == 1)
|
else if(launchmode == 2)
|
||||||
{
|
{
|
||||||
if(config.system_title_override_enabled)
|
am::QMenuCommandWriter writer(am::QDaemonMessage::LaunchHomebrewApplication);
|
||||||
{
|
writer.Write<hb::TargetInput>(rec.nro_target);
|
||||||
am::QMenuCommandWriter writer(am::QDaemonMessage::LaunchHomebrewApplication);
|
writer.FinishWrite();
|
||||||
writer.Write<hb::TargetInput>(rec.nro_target);
|
|
||||||
writer.FinishWrite();
|
|
||||||
|
|
||||||
am::QMenuCommandResultReader reader;
|
am::QMenuCommandResultReader reader;
|
||||||
if(reader && R_SUCCEEDED(reader.GetReadResult()))
|
if(reader && R_SUCCEEDED(reader.GetReadResult()))
|
||||||
{
|
{
|
||||||
pu::audio::Play(this->sfxTitleLaunch);
|
pu::audio::Play(this->sfxTitleLaunch);
|
||||||
qapp->StopPlayBGM();
|
qapp->StopPlayBGM();
|
||||||
qapp->CloseWithFadeOut();
|
qapp->CloseWithFadeOut();
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
auto rc = reader.GetReadResult();
|
|
||||||
qapp->CreateShowDialog("Title launch", "An error ocurred attempting to launch the title:\n" + util::FormatResultDisplay(rc) + " (" + util::FormatResultHex(rc) + ")", { "Ok" }, true);
|
|
||||||
}
|
|
||||||
reader.FinishRead();
|
|
||||||
}
|
}
|
||||||
else qapp->CreateShowDialog("Title launch", "System title launching (via flog) is disabled.\nYou can enable it in settings.\n\nNote that this system (unlike title override) could involve ban risk!\nUse it at your own risk.", { "Ok" }, true);
|
else
|
||||||
|
{
|
||||||
|
auto rc = reader.GetReadResult();
|
||||||
|
qapp->CreateShowDialog("Title launch", "An error ocurred attempting to launch the title:\n" + util::FormatResultDisplay(rc) + " (" + util::FormatResultHex(rc) + ")", { "Ok" }, true);
|
||||||
|
}
|
||||||
|
reader.FinishRead();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuLayout::HandleUserMenu()
|
void MenuLayout::HandleUserMenu()
|
||||||
{
|
{
|
||||||
qapp->CreateShowDialog("Users", "Users", {"Ok"}, true);
|
auto uid = qapp->GetSelectedUser();
|
||||||
|
auto [rc, pass] = db::AccessPassword(uid);
|
||||||
|
bool has_pass = R_SUCCEEDED(rc);
|
||||||
|
|
||||||
|
auto [_rc, name] = os::GetAccountName(uid);
|
||||||
|
auto sopt = qapp->CreateShowDialog("User settings", "Selected user: " + name + "\nWhat would you like to do with this user?", { has_pass ? "Change password" : "Register password", "Log off", "Cancel" }, true, os::GetIconCacheImagePath(uid));
|
||||||
|
if(sopt == 0)
|
||||||
|
{
|
||||||
|
if(has_pass)
|
||||||
|
{
|
||||||
|
auto sopt = qapp->CreateShowDialog("Change password", "What would you like to do with the password?", { "Change", "Remove", "Cancel" }, true);
|
||||||
|
if((sopt == 0) || (sopt == 1))
|
||||||
|
{
|
||||||
|
SwkbdConfig swkbd;
|
||||||
|
swkbdCreate(&swkbd, 0);
|
||||||
|
swkbdConfigMakePresetPassword(&swkbd);
|
||||||
|
swkbdConfigSetStringLenMax(&swkbd, 15);
|
||||||
|
swkbdConfigSetGuideText(&swkbd, "User password");
|
||||||
|
swkbdConfigSetHeaderText(&swkbd, "Input user password");
|
||||||
|
char inpass[0x10] = {0};
|
||||||
|
auto rc = swkbdShow(&swkbd, inpass, 0x10);
|
||||||
|
swkbdClose(&swkbd);
|
||||||
|
if(R_SUCCEEDED(rc))
|
||||||
|
{
|
||||||
|
auto rc = db::TryLogUser(qapp->GetSelectedUser(), std::string(inpass));
|
||||||
|
if(R_FAILED(rc)) qapp->CreateShowDialog("Login", "An invalid password was given.", {"Ok"}, true);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(sopt == 0)
|
||||||
|
{
|
||||||
|
SwkbdConfig swkbd;
|
||||||
|
swkbdCreate(&swkbd, 0);
|
||||||
|
swkbdConfigMakePresetPassword(&swkbd);
|
||||||
|
swkbdConfigSetStringLenMax(&swkbd, 15);
|
||||||
|
swkbdConfigSetHeaderText(&swkbd, "Enter new password");
|
||||||
|
char pass[0x10] = {0};
|
||||||
|
auto rc = swkbdShow(&swkbd, pass, 0x10);
|
||||||
|
swkbdClose(&swkbd);
|
||||||
|
if(R_SUCCEEDED(rc))
|
||||||
|
{
|
||||||
|
auto sopt2 = qapp->CreateShowDialog("Change password", "Would you like to change the password?", { "Yes", "Cancel" }, true);
|
||||||
|
if(sopt2 == 0)
|
||||||
|
{
|
||||||
|
auto passfile = db::GetUserPasswordFilePath(qapp->GetSelectedUser());
|
||||||
|
fs::DeleteFile(passfile);
|
||||||
|
rc = db::RegisterUserPassword(qapp->GetSelectedUser(), pass);
|
||||||
|
qapp->CreateShowDialog("Change password", R_SUCCEEDED(rc) ? "The password was successfully changed." : "An error ocurred while attempting to change the password: " + util::FormatResultDisplay(rc) + " (" + util::FormatResultHex(rc) + ")", { "Ok" }, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(sopt == 1)
|
||||||
|
{
|
||||||
|
auto sopt2 = qapp->CreateShowDialog("Remove password", "Would you really like to remove the password?", { "Yes", "Cancel" }, true);
|
||||||
|
if(sopt2 == 0)
|
||||||
|
{
|
||||||
|
auto passfile = db::GetUserPasswordFilePath(qapp->GetSelectedUser());
|
||||||
|
fs::DeleteFile(passfile);
|
||||||
|
qapp->CreateShowDialog("Remove password", "The user's password was removed.", { "Ok" }, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SwkbdConfig swkbd;
|
||||||
|
swkbdCreate(&swkbd, 0);
|
||||||
|
swkbdConfigMakePresetPassword(&swkbd);
|
||||||
|
swkbdConfigSetStringLenMax(&swkbd, 15);
|
||||||
|
swkbdConfigSetHeaderText(&swkbd, "Enter password");
|
||||||
|
char pass[0x10] = {0};
|
||||||
|
auto rc = swkbdShow(&swkbd, pass, 0x10);
|
||||||
|
swkbdClose(&swkbd);
|
||||||
|
if(R_SUCCEEDED(rc))
|
||||||
|
{
|
||||||
|
auto sopt = qapp->CreateShowDialog("Register password", "Would you like to register this password?", { "Yes", "Cancel" }, true);
|
||||||
|
if(sopt == 0)
|
||||||
|
{
|
||||||
|
rc = db::RegisterUserPassword(qapp->GetSelectedUser(), pass);
|
||||||
|
qapp->CreateShowDialog("Register password", R_SUCCEEDED(rc) ? "The password was successfully registered." : "An error ocurred while attempting to register the password: " + util::FormatResultDisplay(rc) + " (" + util::FormatResultHex(rc) + ")", { "Ok" }, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(sopt == 1)
|
||||||
|
{
|
||||||
|
qapp->FadeOut();
|
||||||
|
qapp->LoadStartupMenu();
|
||||||
|
qapp->FadeIn();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuLayout::HandleWebPageOpen()
|
void MenuLayout::HandleWebPageOpen()
|
||||||
|
|
|
@ -74,6 +74,12 @@ namespace ui
|
||||||
this->StartPlayBGM();
|
this->StartPlayBGM();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QMenuApplication::LoadStartupMenu()
|
||||||
|
{
|
||||||
|
this->StopPlayBGM();
|
||||||
|
this->LoadLayout(this->startupLayout);
|
||||||
|
}
|
||||||
|
|
||||||
bool QMenuApplication::IsSuspended()
|
bool QMenuApplication::IsSuspended()
|
||||||
{
|
{
|
||||||
return (this->IsTitleSuspended() || this->IsHomebrewSuspended());
|
return (this->IsTitleSuspended() || this->IsHomebrewSuspended());
|
||||||
|
|
|
@ -54,17 +54,6 @@ namespace ui
|
||||||
this->usersMenu->SetVisible(false);
|
this->usersMenu->SetVisible(false);
|
||||||
this->infoText->SetText("Unable to obtain system accounts. Hold power to power off or reboot the console.");
|
this->infoText->SetText("Unable to obtain system accounts. Hold power to power off or reboot the console.");
|
||||||
}
|
}
|
||||||
|
|
||||||
this->SetOnInput([&](u64 down, u64 up, u64 held, pu::ui::Touch pos)
|
|
||||||
{
|
|
||||||
if(down & KEY_X)
|
|
||||||
{
|
|
||||||
fs::DeleteDirectory(Q_BASE_DB_DIR "/user");
|
|
||||||
fs::CreateDirectory(Q_BASE_DB_DIR "/user");
|
|
||||||
auto rc = db::RegisterUserPassword(this->userlist[0], "xor");
|
|
||||||
qapp->CreateShowDialog("Re-register", "0x" + util::FormatApplicationId(rc), {"Ok"}, true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this->Add(this->usersMenu);
|
this->Add(this->usersMenu);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue