1
0
Fork 0
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:
flb 2021-09-12 15:01:40 +02:00
parent d03bbb13ea
commit 811eb4c18c
7 changed files with 112 additions and 42 deletions

View file

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

View file

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

View file

@ -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"
},

View file

@ -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(

View file

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

View file

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

View file

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