mirror of
https://github.com/HamletDuFromage/aio-switch-updater.git
synced 2024-12-29 10:56:01 +00:00
Added option to launch Daybreak with arguments after a sysupdate download
This commit is contained in:
parent
d03bbb13ea
commit
811eb4c18c
7 changed files with 112 additions and 42 deletions
|
@ -95,6 +95,8 @@ constexpr const char HOMEBREW[] = "/config/aio-switch-updater/language.json";
|
|||
constexpr const char ROMFS_FORWARDER[] = "romfs:/aiosu-forwarder.nro";
|
||||
constexpr const char FORWARDER_PATH[] = "/config/aio-switch-updater/aiosu-forwarder.nro";
|
||||
|
||||
constexpr const char DAYBREAK_PATH[] = "/switch/daybreak.nro";
|
||||
|
||||
constexpr const char HIDDEN_AIO_FILE[] = "/config/aio-switch-updater/.aio-switch-updater";
|
||||
|
||||
constexpr const int LISTITEM_HEIGHT = 50;
|
||||
|
|
|
@ -2,22 +2,50 @@
|
|||
|
||||
#include <borealis.hpp>
|
||||
#include <chrono>
|
||||
#include <iostream>
|
||||
|
||||
class DialoguePage : public brls::View
|
||||
{
|
||||
private:
|
||||
std::chrono::system_clock::time_point start = std::chrono::high_resolution_clock::now();
|
||||
brls::NavigationMap navigationMap;
|
||||
|
||||
protected:
|
||||
brls::Button* button1 = nullptr;
|
||||
brls::Button* button2 = nullptr;
|
||||
brls::Label* label = nullptr;
|
||||
std::chrono::system_clock::time_point start = std::chrono::high_resolution_clock::now();
|
||||
brls::NavigationMap navigationMap;
|
||||
bool erista = true;
|
||||
virtual void CreateView();
|
||||
virtual void instantiateButtons(){};
|
||||
|
||||
public:
|
||||
DialoguePage(brls::StagedAppletFrame* frame, const std::string& text, bool erista = true);
|
||||
DialoguePage(){};
|
||||
|
||||
void draw(NVGcontext* vg, int x, int y, unsigned width, unsigned height, brls::Style* style, brls::FrameContext* ctx) override;
|
||||
void layout(NVGcontext* vg, brls::Style* style, brls::FontStash* stash) override;
|
||||
brls::View* getDefaultFocus() override;
|
||||
brls::View* getNextFocus(brls::FocusDirection direction, brls::View* currentView);
|
||||
};
|
||||
|
||||
class DialoguePage_fw : public DialoguePage
|
||||
{
|
||||
private:
|
||||
void instantiateButtons() override;
|
||||
std::string text;
|
||||
brls::StagedAppletFrame* frame;
|
||||
|
||||
public:
|
||||
DialoguePage_fw(brls::StagedAppletFrame* frame, const std::string& text) : DialoguePage(), text(text), frame(frame) { CreateView(); }
|
||||
void draw(NVGcontext* vg, int x, int y, unsigned width, unsigned height, brls::Style* style, brls::FrameContext* ctx) override;
|
||||
};
|
||||
|
||||
class DialoguePage_ams : public DialoguePage
|
||||
{
|
||||
private:
|
||||
void instantiateButtons() override;
|
||||
bool erista = true;
|
||||
std::string text;
|
||||
brls::StagedAppletFrame* frame;
|
||||
|
||||
public:
|
||||
DialoguePage_ams(brls::StagedAppletFrame* frame, const std::string& text, bool erista = true) : DialoguePage(), erista(erista), text(text), frame(frame) { CreateView(); }
|
||||
};
|
|
@ -131,7 +131,7 @@
|
|||
"download_cheats": "Download cheats",
|
||||
"tools": "Tools",
|
||||
"launch_warning": "Please pay attention to the following points before using the app:\n\n\ue016 Read up on how to manually update your Switch first. This will help you understand the app better and you'll know what to do in case something goes wrong.\n\ue016 Please note that using this app on a exFAT SD card is STRONGLY discouraged, as those are likely to corrupt.\n\n\ue016 Some new features and/or changes regarding current features may have been introduced. Please check them out via the Tools->Changelog menu.\n\nThis screen won't show again.",
|
||||
"footer_text" : "v{} | {:.1f}GB available",
|
||||
"footer_text": "v{} | {:.1f}GB available",
|
||||
"theme_warning": "It seems like you have a custom theme installed, this may cause your system to fail to boot after upgrading your firmware.\nPlease consider deleting it before upgrading."
|
||||
},
|
||||
"hide": {
|
||||
|
@ -185,6 +185,9 @@
|
|||
"getting_ams": "Getting Atmosphère",
|
||||
"custom_packs_label": "Here are packs listed in the {} file. Be aware that those are not endorsed by aio-switch-updater so make sure you trust their source."
|
||||
},
|
||||
"firmware": {
|
||||
"launch_daybreak": "Do you want to launch Daybreak to install the downloaded sysupdate?"
|
||||
},
|
||||
"net": {
|
||||
"title": "Internet settings"
|
||||
},
|
||||
|
@ -214,4 +217,4 @@
|
|||
"zh-Hant": "Traditional Chinese (zh-Hant)",
|
||||
"zh-Hans": "Simplified Chinese (zh-Hans)"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -104,7 +104,7 @@ void AmsTab::CreateStagedFrames(const std::string& text, const std::string& url,
|
|||
new WorkerPage(stagedFrame, "menus/common/extracting"_i18n, []() { util::extractArchive(archiveType::ams_cfw); }));
|
||||
if (hekate) {
|
||||
stagedFrame->addStage(
|
||||
new DialoguePage(stagedFrame, text_hekate, erista));
|
||||
new DialoguePage_ams(stagedFrame, text_hekate, erista));
|
||||
stagedFrame->addStage(
|
||||
new WorkerPage(stagedFrame, "menus/common/downloading"_i18n, [hekate_url]() { util::downloadArchive(hekate_url, archiveType::cfw); }));
|
||||
stagedFrame->addStage(
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <algorithm>
|
||||
#include <filesystem>
|
||||
#include <iostream>
|
||||
|
||||
#include "fs.hpp"
|
||||
#include "main_frame.hpp"
|
||||
|
@ -10,39 +11,15 @@
|
|||
namespace i18n = brls::i18n;
|
||||
using namespace i18n::literals;
|
||||
|
||||
DialoguePage::DialoguePage(brls::StagedAppletFrame* frame, const std::string& text, bool erista) : erista(erista)
|
||||
void DialoguePage::CreateView()
|
||||
{
|
||||
this->button1 = (new brls::Button(brls::ButtonStyle::REGULAR))->setLabel("menus/common/yes"_i18n);
|
||||
this->button1->setParent(this);
|
||||
this->button2 = (new brls::Button(brls::ButtonStyle::REGULAR))->setLabel("menus/common/no"_i18n);
|
||||
this->button2->setParent(this);
|
||||
|
||||
this->button1->getClickEvent()->subscribe([frame, this](View* view) {
|
||||
if (!frame->isLastStage())
|
||||
frame->nextStage();
|
||||
else {
|
||||
brls::Application::pushView(new MainFrame());
|
||||
}
|
||||
});
|
||||
this->instantiateButtons();
|
||||
|
||||
this->button2->getClickEvent()->subscribe([frame, this](View* view) {
|
||||
if (this->erista) {
|
||||
util::rebootToPayload(RCM_PAYLOAD_PATH);
|
||||
}
|
||||
else {
|
||||
if (std::filesystem::exists(UPDATE_BIN_PATH)) {
|
||||
fs::copyFile(UPDATE_BIN_PATH, MARIKO_PAYLOAD_PATH_TEMP);
|
||||
}
|
||||
else {
|
||||
fs::copyFile(REBOOT_PAYLOAD_PATH, MARIKO_PAYLOAD_PATH_TEMP);
|
||||
}
|
||||
fs::copyFile(RCM_PAYLOAD_PATH, MARIKO_PAYLOAD_PATH);
|
||||
util::shutDown(true);
|
||||
}
|
||||
brls::Application::popView();
|
||||
});
|
||||
|
||||
this->label = new brls::Label(brls::LabelStyle::DIALOG, "menus/ams_update/install_hekate"_i18n + "\n\n" + text, true);
|
||||
this->label->setHorizontalAlign(NVG_ALIGN_CENTER);
|
||||
this->label->setParent(this);
|
||||
|
||||
|
@ -114,3 +91,59 @@ brls::View* DialoguePage::getNextFocus(brls::FocusDirection direction, brls::Vie
|
|||
{
|
||||
return this->navigationMap.getNextFocus(direction, currentView);
|
||||
}
|
||||
|
||||
void DialoguePage_ams::instantiateButtons()
|
||||
{
|
||||
this->button1->getClickEvent()->subscribe([this](View* view) {
|
||||
if (!frame->isLastStage())
|
||||
frame->nextStage();
|
||||
else {
|
||||
brls::Application::pushView(new MainFrame());
|
||||
}
|
||||
});
|
||||
|
||||
this->button2->getClickEvent()->subscribe([this](View* view) {
|
||||
if (this->erista) {
|
||||
util::rebootToPayload(RCM_PAYLOAD_PATH);
|
||||
}
|
||||
else {
|
||||
if (std::filesystem::exists(UPDATE_BIN_PATH)) {
|
||||
fs::copyFile(UPDATE_BIN_PATH, MARIKO_PAYLOAD_PATH_TEMP);
|
||||
}
|
||||
else {
|
||||
fs::copyFile(REBOOT_PAYLOAD_PATH, MARIKO_PAYLOAD_PATH_TEMP);
|
||||
}
|
||||
fs::copyFile(RCM_PAYLOAD_PATH, MARIKO_PAYLOAD_PATH);
|
||||
util::shutDown(true);
|
||||
}
|
||||
brls::Application::popView();
|
||||
});
|
||||
|
||||
this->label = new brls::Label(brls::LabelStyle::DIALOG, "menus/ams_update/install_hekate"_i18n + "\n\n" + this->text, true);
|
||||
}
|
||||
|
||||
void DialoguePage_fw::instantiateButtons()
|
||||
{
|
||||
this->button2->getClickEvent()->subscribe([this](View* view) {
|
||||
if (!frame->isLastStage())
|
||||
frame->nextStage();
|
||||
else {
|
||||
brls::Application::pushView(new MainFrame());
|
||||
}
|
||||
});
|
||||
|
||||
this->button1->getClickEvent()->subscribe([this](View* view) {
|
||||
envSetNextLoad(DAYBREAK_PATH, fmt::format("\"{}\" \"/firmware\"", DAYBREAK_PATH).c_str());
|
||||
romfsExit();
|
||||
brls::Application::quit();
|
||||
});
|
||||
|
||||
this->label = new brls::Label(brls::LabelStyle::DIALOG, fmt::format("{}\n\n{}", this->text, "menus/firmware/launch_daybreak"_i18n), true);
|
||||
}
|
||||
|
||||
void DialoguePage_fw::draw(NVGcontext* vg, int x, int y, unsigned width, unsigned height, brls::Style* style, brls::FrameContext* ctx)
|
||||
{
|
||||
this->label->frame(ctx);
|
||||
this->button1->frame(ctx);
|
||||
this->button2->frame(ctx);
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "app_page.hpp"
|
||||
#include "confirm_page.hpp"
|
||||
#include "current_cfw.hpp"
|
||||
#include "dialogue_page.hpp"
|
||||
#include "download.hpp"
|
||||
#include "extract.hpp"
|
||||
#include "fs.hpp"
|
||||
|
@ -92,14 +93,11 @@ ListDownloadTab::ListDownloadTab(const archiveType type) : brls::List()
|
|||
listItem->getClickEvent()->subscribe([&, text, url, type, operation, newCheatsVer, currentCheatsVer](brls::View* view) {
|
||||
brls::StagedAppletFrame* stagedFrame = new brls::StagedAppletFrame();
|
||||
stagedFrame->setTitle(operation);
|
||||
stagedFrame->addStage(
|
||||
new ConfirmPage(stagedFrame, text));
|
||||
stagedFrame->addStage(new ConfirmPage(stagedFrame, text));
|
||||
if (type != archiveType::cheats || newCheatsVer != currentCheatsVer || !std::filesystem::exists(CHEATS_ZIP_PATH)) {
|
||||
stagedFrame->addStage(
|
||||
new WorkerPage(stagedFrame, "menus/common/downloading"_i18n, [url, type]() { util::downloadArchive(url, type); }));
|
||||
stagedFrame->addStage(new WorkerPage(stagedFrame, "menus/common/downloading"_i18n, [url, type]() { util::downloadArchive(url, type); }));
|
||||
}
|
||||
stagedFrame->addStage(
|
||||
new WorkerPage(stagedFrame, "menus/common/extracting"_i18n, [type]() { util::extractArchive(type); }));
|
||||
stagedFrame->addStage(new WorkerPage(stagedFrame, "menus/common/extracting"_i18n, [type]() { util::extractArchive(type); }));
|
||||
std::string doneMsg = "menus/common/all_done"_i18n;
|
||||
switch (type) {
|
||||
case archiveType::fw: {
|
||||
|
@ -110,16 +108,22 @@ ListDownloadTab::ListDownloadTab(const archiveType type) : brls::List()
|
|||
break;
|
||||
}
|
||||
}
|
||||
if (std::filesystem::exists(DAYBREAK_PATH)) {
|
||||
stagedFrame->addStage(new DialoguePage_fw(stagedFrame, doneMsg));
|
||||
}
|
||||
else {
|
||||
stagedFrame->addStage(new ConfirmPage(stagedFrame, doneMsg, true));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case archiveType::sigpatches:
|
||||
doneMsg += "\n" + "menus/sigpatches/reboot"_i18n;
|
||||
stagedFrame->addStage(new ConfirmPage(stagedFrame, doneMsg, true));
|
||||
break;
|
||||
default:
|
||||
stagedFrame->addStage(new ConfirmPage(stagedFrame, doneMsg, true));
|
||||
break;
|
||||
}
|
||||
stagedFrame->addStage(
|
||||
new ConfirmPage(stagedFrame, doneMsg, true));
|
||||
brls::Application::pushView(stagedFrame);
|
||||
});
|
||||
this->addView(listItem);
|
||||
|
|
|
@ -147,7 +147,7 @@ namespace util {
|
|||
case archiveType::app:
|
||||
extract::extract(APP_FILENAME, CONFIG_PATH);
|
||||
fs::copyFile(ROMFS_FORWARDER, FORWARDER_PATH);
|
||||
envSetNextLoad(FORWARDER_PATH, ("\"" + std::string(FORWARDER_PATH) + "\"").c_str());
|
||||
envSetNextLoad(FORWARDER_PATH, fmt::format("\"{}\"", FORWARDER_PATH).c_str());
|
||||
romfsExit();
|
||||
brls::Application::quit();
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue