mirror of
https://github.com/HamletDuFromage/aio-switch-updater.git
synced 2025-02-20 07:25:40 +00:00
Added missing updates menu
This commit is contained in:
parent
d81c856ab9
commit
b9b8773a05
12 changed files with 109 additions and 71 deletions
2
Makefile
2
Makefile
|
@ -22,7 +22,7 @@ DATA := data
|
||||||
INCLUDES := include lib/zipper/include /lib/borealis/library/include/borealis/extern/nlohmann
|
INCLUDES := include lib/zipper/include /lib/borealis/library/include/borealis/extern/nlohmann
|
||||||
APP_TITLE := All-in-One Switch Updater
|
APP_TITLE := All-in-One Switch Updater
|
||||||
APP_AUTHOR := HamletDuFromage
|
APP_AUTHOR := HamletDuFromage
|
||||||
APP_VERSION := 2.18.1
|
APP_VERSION := 2.19.0
|
||||||
TARGET := $(notdir $(CURDIR))
|
TARGET := $(notdir $(CURDIR))
|
||||||
|
|
||||||
ROMFS := resources
|
ROMFS := resources
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <borealis.hpp>
|
#include <borealis.hpp>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
#include <json.hpp>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
static constexpr uint32_t MaxTitleCount = 64000;
|
static constexpr uint32_t MaxTitleCount = 64000;
|
||||||
|
@ -32,7 +33,7 @@ protected:
|
||||||
uint32_t GetControlData(u64 tid, NsApplicationControlData* controlData, u64& controlSize, std::string& name);
|
uint32_t GetControlData(u64 tid, NsApplicationControlData* controlData, u64& controlSize, std::string& name);
|
||||||
virtual void PopulatePage();
|
virtual void PopulatePage();
|
||||||
virtual void CreateLabel(){};
|
virtual void CreateLabel(){};
|
||||||
virtual void DeclareGameListItem(const std::string& name, uint64_t tid, NsApplicationControlData** controlData);
|
virtual void AddListItem(const std::string& name, uint64_t tid);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AppPage();
|
AppPage();
|
||||||
|
@ -53,7 +54,7 @@ class AppPage_CheatSlips : public AppPage
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
void CreateLabel() override;
|
void CreateLabel() override;
|
||||||
void DeclareGameListItem(const std::string& name, uint64_t tid, NsApplicationControlData** controlData) override;
|
void AddListItem(const std::string& name, uint64_t tid) override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AppPage_CheatSlips();
|
AppPage_CheatSlips();
|
||||||
|
@ -63,7 +64,7 @@ class AppPage_Gbatemp : public AppPage
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
void CreateLabel() override;
|
void CreateLabel() override;
|
||||||
void DeclareGameListItem(const std::string& name, uint64_t tid, NsApplicationControlData** controlData) override;
|
void AddListItem(const std::string& name, uint64_t tid) override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AppPage_Gbatemp();
|
AppPage_Gbatemp();
|
||||||
|
@ -74,9 +75,19 @@ class AppPage_DownloadedCheats : public AppPage
|
||||||
private:
|
private:
|
||||||
std::set<std::string> titles;
|
std::set<std::string> titles;
|
||||||
void CreateLabel() override;
|
void CreateLabel() override;
|
||||||
void DeclareGameListItem(const std::string& name, uint64_t tid, NsApplicationControlData** controlData) override;
|
void AddListItem(const std::string& name, uint64_t tid) override;
|
||||||
void GetExistingCheatsTids();
|
void GetExistingCheatsTids();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AppPage_DownloadedCheats();
|
AppPage_DownloadedCheats();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class AppPage_OutdatedTitles : public AppPage
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
nlohmann::ordered_json versions;
|
||||||
|
void AddListItem(const std::string& name, uint64_t tid) override;
|
||||||
|
|
||||||
|
public:
|
||||||
|
AppPage_OutdatedTitles();
|
||||||
|
};
|
|
@ -6,14 +6,13 @@
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <json.hpp>
|
#include <json.hpp>
|
||||||
|
|
||||||
namespace show_cheats {
|
namespace cheats_util {
|
||||||
|
u32 GetVersion(uint64_t title_id);
|
||||||
void ShowCheatFiles(uint64_t tid, const std::string& name);
|
void ShowCheatFiles(uint64_t tid, const std::string& name);
|
||||||
void ShowCheatSheet(u64 tid, const std::string& bid, const std::string& name);
|
void ShowCheatSheet(u64 tid, const std::string& bid, const std::string& name);
|
||||||
bool CreateCheatList(const std::filesystem::path& path, brls::List** cheatsList);
|
bool CreateCheatList(const std::filesystem::path& path, brls::List** cheatsList);
|
||||||
void DeleteCheats(u64 tid, const std::string& bid);
|
void DeleteCheats(u64 tid, const std::string& bid);
|
||||||
|
} // namespace cheats_util
|
||||||
} // namespace show_cheats
|
|
||||||
|
|
||||||
class DownloadCheatsPage : public brls::AppletFrame
|
class DownloadCheatsPage : public brls::AppletFrame
|
||||||
{
|
{
|
||||||
|
@ -29,7 +28,6 @@ protected:
|
||||||
DownloadCheatsPage(uint64_t tid, const std::string& name);
|
DownloadCheatsPage(uint64_t tid, const std::string& name);
|
||||||
void GetBuildID();
|
void GetBuildID();
|
||||||
void GetBuildIDFromDmnt();
|
void GetBuildIDFromDmnt();
|
||||||
void GetVersion();
|
|
||||||
void GetBuildIDFromFile();
|
void GetBuildIDFromFile();
|
||||||
void WriteCheats(const std::string& cheatContent);
|
void WriteCheats(const std::string& cheatContent);
|
||||||
void AddCheatsfileListItem();
|
void AddCheatsfileListItem();
|
||||||
|
|
|
@ -14,6 +14,7 @@ private:
|
||||||
brls::ToggleListItem* sigpatches;
|
brls::ToggleListItem* sigpatches;
|
||||||
brls::ToggleListItem* fws;
|
brls::ToggleListItem* fws;
|
||||||
brls::ToggleListItem* cheats;
|
brls::ToggleListItem* cheats;
|
||||||
|
brls::ToggleListItem* outdatedTitles;
|
||||||
brls::ToggleListItem* jccolor;
|
brls::ToggleListItem* jccolor;
|
||||||
brls::ToggleListItem* pccolor;
|
brls::ToggleListItem* pccolor;
|
||||||
brls::ToggleListItem* downloadpayload;
|
brls::ToggleListItem* downloadpayload;
|
||||||
|
|
|
@ -7,21 +7,6 @@
|
||||||
class ToolsTab : public brls::List
|
class ToolsTab : public brls::List
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
brls::ListItem* cheats;
|
|
||||||
brls::ListItem* JCcolor;
|
|
||||||
brls::ListItem* PCcolor;
|
|
||||||
brls::ListItem* updateApp;
|
|
||||||
brls::ListItem* rebootPayload;
|
|
||||||
brls::ListItem* downloadPayload;
|
|
||||||
brls::ListItem* changelog;
|
|
||||||
brls::ListItem* language;
|
|
||||||
brls::ListItem* cleanUp;
|
|
||||||
brls::ListItem* hideTabs;
|
|
||||||
//brls::ListItem* ntcp;
|
|
||||||
brls::ListItem* netSettings;
|
|
||||||
brls::ListItem* move;
|
|
||||||
brls::ListItem* browser;
|
|
||||||
|
|
||||||
brls::StagedAppletFrame* stagedFrame;
|
brls::StagedAppletFrame* stagedFrame;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit b055712a92a176258dcabc516ce1056bdf3a4730
|
Subproject commit b36542c3b610f9657d67df487936334c89d1fabd
|
|
@ -160,7 +160,10 @@
|
||||||
"batch_copy": "Batch copy files",
|
"batch_copy": "Batch copy files",
|
||||||
"batch_copy_not_found": "The following files were not found and couldn't be copied:\n",
|
"batch_copy_not_found": "The following files were not found and couldn't be copied:\n",
|
||||||
"batch_copy_config_not_found": "This tool allows you to automatically copy files to specific locations. This might be useful depending on your bootloader/trinket. Grab copy_files.txt at 'https://git.io/aiosu_copyfiles', edit it and add it to your config folder. This will also be performed after updates.",
|
"batch_copy_config_not_found": "This tool allows you to automatically copy files to specific locations. This might be useful depending on your bootloader/trinket. Grab copy_files.txt at 'https://git.io/aiosu_copyfiles', edit it and add it to your config folder. This will also be performed after updates.",
|
||||||
"language": "Change app language"
|
"language": "Change app language",
|
||||||
|
"outdated_titles": "Missing updates",
|
||||||
|
"latest_version_not_found": "Couldn't find updates info",
|
||||||
|
"outdated_titles_desc": "The following titles have available updates:"
|
||||||
},
|
},
|
||||||
"utils": {
|
"utils": {
|
||||||
"fw_warning": "Because of the size of FW archives, downloading firmwares in Applet Mode is not supported. Please launch the app with full RAM access.",
|
"fw_warning": "Because of the size of FW archives, downloading firmwares in Applet Mode is not supported. Please launch the app with full RAM access.",
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include "confirm_page.hpp"
|
#include "confirm_page.hpp"
|
||||||
#include "current_cfw.hpp"
|
#include "current_cfw.hpp"
|
||||||
|
#include "download.hpp"
|
||||||
#include "download_cheats_page.hpp"
|
#include "download_cheats_page.hpp"
|
||||||
#include "extract.hpp"
|
#include "extract.hpp"
|
||||||
#include "fs.hpp"
|
#include "fs.hpp"
|
||||||
|
@ -43,10 +44,12 @@ void AppPage::PopulatePage()
|
||||||
|
|
||||||
tid = records[i].application_id;
|
tid = records[i].application_id;
|
||||||
|
|
||||||
if R_FAILED (GetControlData(tid, controlData, controlSize, name)) continue;
|
if (R_FAILED(GetControlData(tid, controlData, controlSize, name)))
|
||||||
|
continue;
|
||||||
|
|
||||||
listItem = new brls::ListItem(name, "", util::formatApplicationId(tid));
|
listItem = new brls::ListItem(name, "", util::formatApplicationId(tid));
|
||||||
this->DeclareGameListItem(name, tid, &controlData);
|
listItem->setThumbnail(controlData->icon, sizeof(controlData->icon));
|
||||||
|
this->AddListItem(name, tid);
|
||||||
}
|
}
|
||||||
free(controlData);
|
free(controlData);
|
||||||
}
|
}
|
||||||
|
@ -54,8 +57,7 @@ void AppPage::PopulatePage()
|
||||||
else {
|
else {
|
||||||
tid = GetCurrentApplicationId();
|
tid = GetCurrentApplicationId();
|
||||||
if (R_SUCCEEDED(InitControlData(&controlData)) && R_SUCCEEDED(GetControlData(tid & 0xFFFFFFFFFFFFF000, controlData, controlSize, name))) {
|
if (R_SUCCEEDED(InitControlData(&controlData)) && R_SUCCEEDED(GetControlData(tid & 0xFFFFFFFFFFFFF000, controlData, controlSize, name))) {
|
||||||
listItem = new brls::ListItem(name, "", util::formatApplicationId(tid));
|
this->AddListItem(name, tid);
|
||||||
this->DeclareGameListItem(name, tid, &controlData);
|
|
||||||
}
|
}
|
||||||
label = new brls::Label(brls::LabelStyle::SMALL, "menus/common/applet_mode_not_supported"_i18n, true);
|
label = new brls::Label(brls::LabelStyle::SMALL, "menus/common/applet_mode_not_supported"_i18n, true);
|
||||||
list->addView(label);
|
list->addView(label);
|
||||||
|
@ -130,9 +132,8 @@ u32 AppPage::GetControlData(u64 tid, NsApplicationControlData* controlData, u64&
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppPage::DeclareGameListItem(const std::string& name, u64 tid, NsApplicationControlData** controlData)
|
void AppPage::AddListItem(const std::string& name, u64 tid)
|
||||||
{
|
{
|
||||||
listItem->setThumbnail((*controlData)->icon, sizeof((*controlData)->icon));
|
|
||||||
list->addView(listItem);
|
list->addView(listItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,10 +168,10 @@ void AppPage_CheatSlips::CreateLabel()
|
||||||
list->addView(label);
|
list->addView(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppPage_CheatSlips::DeclareGameListItem(const std::string& name, u64 tid, NsApplicationControlData** controlData)
|
void AppPage_CheatSlips::AddListItem(const std::string& name, u64 tid)
|
||||||
{
|
{
|
||||||
listItem->getClickEvent()->subscribe([tid, name](brls::View* view) { brls::Application::pushView(new DownloadCheatsPage_CheatSlips(tid, name)); });
|
listItem->getClickEvent()->subscribe([tid, name](brls::View* view) { brls::Application::pushView(new DownloadCheatsPage_CheatSlips(tid, name)); });
|
||||||
AppPage::DeclareGameListItem(name, tid, controlData);
|
list->addView(listItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
AppPage_Gbatemp::AppPage_Gbatemp() : AppPage()
|
AppPage_Gbatemp::AppPage_Gbatemp() : AppPage()
|
||||||
|
@ -186,10 +187,10 @@ void AppPage_Gbatemp::CreateLabel()
|
||||||
list->addView(label);
|
list->addView(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppPage_Gbatemp::DeclareGameListItem(const std::string& name, u64 tid, NsApplicationControlData** controlData)
|
void AppPage_Gbatemp::AddListItem(const std::string& name, u64 tid)
|
||||||
{
|
{
|
||||||
listItem->getClickEvent()->subscribe([tid, name](brls::View* view) { brls::Application::pushView(new DownloadCheatsPage_GbaTemp(tid, name)); });
|
listItem->getClickEvent()->subscribe([tid, name](brls::View* view) { brls::Application::pushView(new DownloadCheatsPage_GbaTemp(tid, name)); });
|
||||||
AppPage::DeclareGameListItem(name, tid, controlData);
|
list->addView(listItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
AppPage_Exclude::AppPage_Exclude() : AppPage()
|
AppPage_Exclude::AppPage_Exclude() : AppPage()
|
||||||
|
@ -227,7 +228,8 @@ void AppPage_Exclude::PopulatePage()
|
||||||
|
|
||||||
tid = records[i].application_id;
|
tid = records[i].application_id;
|
||||||
|
|
||||||
if R_FAILED (GetControlData(tid, controlData, controlSize, name)) continue;
|
if (R_FAILED(GetControlData(tid, controlData, controlSize, name)))
|
||||||
|
continue;
|
||||||
|
|
||||||
brls::ToggleListItem* listItem;
|
brls::ToggleListItem* listItem;
|
||||||
listItem = new brls::ToggleListItem(std::string(name), titles.find(util::formatApplicationId(tid)) != titles.end() ? 0 : 1);
|
listItem = new brls::ToggleListItem(std::string(name), titles.find(util::formatApplicationId(tid)) != titles.end() ? 0 : 1);
|
||||||
|
@ -273,16 +275,16 @@ void AppPage_DownloadedCheats::CreateLabel()
|
||||||
list->addView(label);
|
list->addView(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppPage_DownloadedCheats::DeclareGameListItem(const std::string& name, u64 tid, NsApplicationControlData** controlData)
|
void AppPage_DownloadedCheats::AddListItem(const std::string& name, u64 tid)
|
||||||
{
|
{
|
||||||
auto tid_str = util::formatApplicationId(tid);
|
auto tid_str = util::formatApplicationId(tid);
|
||||||
if (titles.find(tid_str) != titles.end()) {
|
if (titles.find(tid_str) != titles.end()) {
|
||||||
listItem->getClickEvent()->subscribe([tid, name](brls::View* view) { show_cheats::ShowCheatFiles(tid, name); });
|
listItem->getClickEvent()->subscribe([tid, name](brls::View* view) { cheats_util::ShowCheatFiles(tid, name); });
|
||||||
listItem->registerAction("menus/cheats/delete_cheats"_i18n, brls::Key::Y, [tid_str] {
|
listItem->registerAction("menus/cheats/delete_cheats"_i18n, brls::Key::Y, [tid_str] {
|
||||||
util::showDialogBoxInfo(extract::removeCheatsDirectory(fmt::format("{}{}", util::getContentsPath(), tid_str)) ? "menus/common/all_done"_i18n : fmt::format("menus/cheats/deletion_error"_i18n, tid_str));
|
util::showDialogBoxInfo(extract::removeCheatsDirectory(fmt::format("{}{}", util::getContentsPath(), tid_str)) ? "menus/common/all_done"_i18n : fmt::format("menus/cheats/deletion_error"_i18n, tid_str));
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
AppPage::DeclareGameListItem(name, tid, controlData);
|
list->addView(listItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,3 +303,26 @@ void AppPage_DownloadedCheats::GetExistingCheatsTids()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AppPage_OutdatedTitles::AppPage_OutdatedTitles() : AppPage()
|
||||||
|
{
|
||||||
|
download::getRequest(LOOKUP_TABLE_URL, versions);
|
||||||
|
this->PopulatePage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppPage_OutdatedTitles::AddListItem(const std::string& name, u64 tid)
|
||||||
|
{
|
||||||
|
u32 version = cheats_util::GetVersion(tid);
|
||||||
|
std::string tid_string = util::formatApplicationId(tid);
|
||||||
|
if (versions.find(tid_string) != versions.end()) {
|
||||||
|
u32 latest = versions.at(tid_string).at("latest");
|
||||||
|
if (version < latest) {
|
||||||
|
listItem->setSubLabel(fmt::format("{}\t|\t v{} (local) → v{} (latest)", tid_string, version, latest));
|
||||||
|
list->addView(listItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* else {
|
||||||
|
listItem->setSubLabel(fmt::format("{}\t|\t {}", tid_string, "menus/tools/latest_version_not_found"_i18n));
|
||||||
|
list->addView(listItem);
|
||||||
|
} */
|
||||||
|
}
|
|
@ -40,13 +40,13 @@ ChangelogPage::ChangelogPage() : AppletFrame(true, true)
|
||||||
changes.push_back("\uE016 Added option to set a payload to /bootloader/update.bin");
|
changes.push_back("\uE016 Added option to set a payload to /bootloader/update.bin");
|
||||||
|
|
||||||
verTitles.push_back("v1.2.2");
|
verTitles.push_back("v1.2.2");
|
||||||
changes.push_back("\uE016 Added japanese localisation (credits to github.com/yyoossk).");
|
changes.push_back("\uE016 Added Japanese localisation (credits to github.com/yyoossk).");
|
||||||
|
|
||||||
verTitles.push_back("v1.2.4");
|
verTitles.push_back("v1.2.4");
|
||||||
changes.push_back("\uE016 Fixed app self-update");
|
changes.push_back("\uE016 Fixed app self-update");
|
||||||
|
|
||||||
verTitles.push_back("v1.2.5");
|
verTitles.push_back("v1.2.5");
|
||||||
changes.push_back("\uE016 Improved japanese translation");
|
changes.push_back("\uE016 Improved Japanese translation");
|
||||||
|
|
||||||
verTitles.push_back("v1.2.6");
|
verTitles.push_back("v1.2.6");
|
||||||
changes.push_back("\uE016 Added spanish translation (credits to github.com/sergiou87");
|
changes.push_back("\uE016 Added spanish translation (credits to github.com/sergiou87");
|
||||||
|
@ -223,7 +223,7 @@ ChangelogPage::ChangelogPage() : AppletFrame(true, true)
|
||||||
changes.push_back("\uE016 Allow offline extraction of cheats.\n\uE016 Fixed extraction of the the complete cheat archive.\n\uE016 Fixed display bug for cheats extraction.");
|
changes.push_back("\uE016 Allow offline extraction of cheats.\n\uE016 Fixed extraction of the the complete cheat archive.\n\uE016 Fixed display bug for cheats extraction.");
|
||||||
|
|
||||||
verTitles.push_back("v2.16.3");
|
verTitles.push_back("v2.16.3");
|
||||||
changes.push_back("\uE016 Fetch default profiles online for joy-con and pro-con color swaps.\n\uE016 Updated french localization (https://github.com/NotaInutilis).");
|
changes.push_back("\uE016 Fetch default profiles online for joy-con and pro-con color swaps.\n\uE016 Updated French localization (https://github.com/NotaInutilis).");
|
||||||
|
|
||||||
verTitles.push_back("v2.17.0");
|
verTitles.push_back("v2.17.0");
|
||||||
changes.push_back("\uE016 Add ability to download a basic hekate_ipl file.\n\uE016 Add error messages when cheats are not found for a game.");
|
changes.push_back("\uE016 Add ability to download a basic hekate_ipl file.\n\uE016 Add error messages when cheats are not found for a game.");
|
||||||
|
@ -237,6 +237,9 @@ ChangelogPage::ChangelogPage() : AppletFrame(true, true)
|
||||||
verTitles.push_back("v2.18.1");
|
verTitles.push_back("v2.18.1");
|
||||||
changes.push_back("\uE016 Fix some pop-up related bugs.");
|
changes.push_back("\uE016 Fix some pop-up related bugs.");
|
||||||
|
|
||||||
|
verTitles.push_back("v2.19.0");
|
||||||
|
changes.push_back("\uE016 Added ability to view games with missing updates.\n\uE016 Updated Japanese localisation (https://github.com/yyoossk).\n\uE016 Updated Chinese localisation (https://github.com/Physton).");
|
||||||
|
|
||||||
|
|
||||||
for (int i = verTitles.size() - 1; i >= 0; i--) {
|
for (int i = verTitles.size() - 1; i >= 0; i--) {
|
||||||
listItem = new brls::ListItem(verTitles[i]);
|
listItem = new brls::ListItem(verTitles[i]);
|
||||||
|
|
|
@ -14,7 +14,18 @@ namespace i18n = brls::i18n;
|
||||||
using namespace i18n::literals;
|
using namespace i18n::literals;
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
namespace show_cheats {
|
namespace cheats_util {
|
||||||
|
u32 GetVersion(uint64_t title_id)
|
||||||
|
{
|
||||||
|
u32 res = 0;
|
||||||
|
NsApplicationContentMetaStatus* MetaSatus = new NsApplicationContentMetaStatus[100U];
|
||||||
|
s32 out;
|
||||||
|
nsListApplicationContentMetaStatus(title_id, 0, MetaSatus, 100, &out);
|
||||||
|
for (int i = 0; i < out; i++) {
|
||||||
|
if (res < MetaSatus[i].version) res = MetaSatus[i].version;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
void ShowCheatSheet(u64 tid, const std::string& bid, const std::string& name)
|
void ShowCheatSheet(u64 tid, const std::string& bid, const std::string& name)
|
||||||
{
|
{
|
||||||
|
@ -87,17 +98,17 @@ namespace show_cheats {
|
||||||
std::filesystem::remove(fmt::format("{}{:016X}/cheats/{}.txt", util::getContentsPath(), tid, bid));
|
std::filesystem::remove(fmt::format("{}{:016X}/cheats/{}.txt", util::getContentsPath(), tid, bid));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace show_cheats
|
} // namespace cheats_util
|
||||||
|
|
||||||
DownloadCheatsPage::DownloadCheatsPage(uint64_t tid, const std::string& name) : AppletFrame(true, true), tid(tid), name(name)
|
DownloadCheatsPage::DownloadCheatsPage(uint64_t tid, const std::string& name) : AppletFrame(true, true), tid(tid), name(name)
|
||||||
{
|
{
|
||||||
this->list = new brls::List();
|
this->list = new brls::List();
|
||||||
this->GetVersion();
|
this->version = cheats_util::GetVersion(this->tid);
|
||||||
this->GetBuildID();
|
this->GetBuildID();
|
||||||
this->setTitle(this->name);
|
this->setTitle(this->name);
|
||||||
this->setFooterText("v" + std::to_string(this->version / 0x10000));
|
this->setFooterText("v" + std::to_string(this->version / 0x10000));
|
||||||
this->brls::AppletFrame::registerAction("menus/cheats/show_existing"_i18n, brls::Key::X, [this] {
|
this->brls::AppletFrame::registerAction("menus/cheats/show_existing"_i18n, brls::Key::X, [this] {
|
||||||
show_cheats::ShowCheatSheet(this->tid, this->bid, this->name);
|
cheats_util::ShowCheatSheet(this->tid, this->bid, this->name);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
this->rebuildHints();
|
this->rebuildHints();
|
||||||
|
@ -126,16 +137,6 @@ void DownloadCheatsPage::GetBuildIDFromDmnt()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DownloadCheatsPage::GetVersion()
|
|
||||||
{
|
|
||||||
NsApplicationContentMetaStatus* MetaSatus = new NsApplicationContentMetaStatus[100U];
|
|
||||||
s32 out;
|
|
||||||
nsListApplicationContentMetaStatus(this->tid, 0, MetaSatus, 100, &out);
|
|
||||||
for (int i = 0; i < out; i++) {
|
|
||||||
if (version < MetaSatus[i].version) this->version = MetaSatus[i].version;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DownloadCheatsPage::GetBuildIDFromFile()
|
void DownloadCheatsPage::GetBuildIDFromFile()
|
||||||
{
|
{
|
||||||
nlohmann::ordered_json versions_json;
|
nlohmann::ordered_json versions_json;
|
||||||
|
@ -163,7 +164,7 @@ void DownloadCheatsPage::AddCheatsfileListItem()
|
||||||
{
|
{
|
||||||
brls::ListItem* item = new brls::ListItem("menus/cheats/show_cheat_files"_i18n);
|
brls::ListItem* item = new brls::ListItem("menus/cheats/show_cheat_files"_i18n);
|
||||||
item->getClickEvent()->subscribe([this](brls::View* view) {
|
item->getClickEvent()->subscribe([this](brls::View* view) {
|
||||||
show_cheats::ShowCheatFiles(this->tid, this->name);
|
cheats_util::ShowCheatFiles(this->tid, this->name);
|
||||||
});
|
});
|
||||||
this->list->addView(item);
|
this->list->addView(item);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,9 @@ HideTabsPage::HideTabsPage() : AppletFrame(true, true)
|
||||||
cheats = new brls::ToggleListItem("menus/main/download_cheats"_i18n, util::getBoolValue(hideStatus, "cheats"));
|
cheats = new brls::ToggleListItem("menus/main/download_cheats"_i18n, util::getBoolValue(hideStatus, "cheats"));
|
||||||
list->addView(cheats);
|
list->addView(cheats);
|
||||||
|
|
||||||
|
outdatedTitles = new brls::ToggleListItem("menus/main/download_cheats"_i18n, util::getBoolValue(hideStatus, "outdatedtitles"));
|
||||||
|
list->addView(outdatedTitles);
|
||||||
|
|
||||||
jccolor = new brls::ToggleListItem("menus/tools/joy_cons"_i18n, util::getBoolValue(hideStatus, "jccolor"));
|
jccolor = new brls::ToggleListItem("menus/tools/joy_cons"_i18n, util::getBoolValue(hideStatus, "jccolor"));
|
||||||
list->addView(jccolor);
|
list->addView(jccolor);
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
#include "JC_page.hpp"
|
#include "JC_page.hpp"
|
||||||
#include "PC_page.hpp"
|
#include "PC_page.hpp"
|
||||||
|
#include "app_page.hpp"
|
||||||
#include "changelog_page.hpp"
|
#include "changelog_page.hpp"
|
||||||
#include "cheats_page.hpp"
|
#include "cheats_page.hpp"
|
||||||
#include "confirm_page.hpp"
|
#include "confirm_page.hpp"
|
||||||
|
@ -27,7 +28,7 @@ namespace {
|
||||||
ToolsTab::ToolsTab(const std::string& tag, const nlohmann::ordered_json& payloads, bool erista, const nlohmann::json& hideStatus) : brls::List()
|
ToolsTab::ToolsTab(const std::string& tag, const nlohmann::ordered_json& payloads, bool erista, const nlohmann::json& hideStatus) : brls::List()
|
||||||
{
|
{
|
||||||
if (!tag.empty() && tag != AppVersion) {
|
if (!tag.empty() && tag != AppVersion) {
|
||||||
updateApp = new brls::ListItem(fmt::format("menus/tools/update_app"_i18n, tag));
|
brls::ListItem* updateApp = new brls::ListItem(fmt::format("menus/tools/update_app"_i18n, tag));
|
||||||
std::string text("menus/tools/dl_app"_i18n + std::string(APP_URL));
|
std::string text("menus/tools/dl_app"_i18n + std::string(APP_URL));
|
||||||
updateApp->getClickEvent()->subscribe([text, tag](brls::View* view) {
|
updateApp->getClickEvent()->subscribe([text, tag](brls::View* view) {
|
||||||
brls::StagedAppletFrame* stagedFrame = new brls::StagedAppletFrame();
|
brls::StagedAppletFrame* stagedFrame = new brls::StagedAppletFrame();
|
||||||
|
@ -46,37 +47,43 @@ ToolsTab::ToolsTab(const std::string& tag, const nlohmann::ordered_json& payload
|
||||||
this->addView(updateApp);
|
this->addView(updateApp);
|
||||||
}
|
}
|
||||||
|
|
||||||
cheats = new brls::ListItem("menus/tools/cheats"_i18n);
|
brls::ListItem* cheats = new brls::ListItem("menus/tools/cheats"_i18n);
|
||||||
cheats->getClickEvent()->subscribe([](brls::View* view) {
|
cheats->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
brls::PopupFrame::open("menus/cheats/menu"_i18n, new CheatsPage(), "", "");
|
brls::PopupFrame::open("menus/cheats/menu"_i18n, new CheatsPage(), "", "");
|
||||||
});
|
});
|
||||||
cheats->setHeight(LISTITEM_HEIGHT);
|
cheats->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
JCcolor = new brls::ListItem("menus/tools/joy_cons"_i18n);
|
brls::ListItem* outdatedTitles = new brls::ListItem("menus/tools/outdated_titles"_i18n);
|
||||||
|
outdatedTitles->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
|
brls::PopupFrame::open("menus/tools/outdated_titles"_i18n, new AppPage_OutdatedTitles(), "menus/tools/outdated_titles_desc"_i18n, "");
|
||||||
|
});
|
||||||
|
outdatedTitles->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
|
brls::ListItem* JCcolor = new brls::ListItem("menus/tools/joy_cons"_i18n);
|
||||||
JCcolor->getClickEvent()->subscribe([](brls::View* view) {
|
JCcolor->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
brls::Application::pushView(new JCPage());
|
brls::Application::pushView(new JCPage());
|
||||||
});
|
});
|
||||||
JCcolor->setHeight(LISTITEM_HEIGHT);
|
JCcolor->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
PCcolor = new brls::ListItem("menus/tools/pro_cons"_i18n);
|
brls::ListItem* PCcolor = new brls::ListItem("menus/tools/pro_cons"_i18n);
|
||||||
PCcolor->getClickEvent()->subscribe([](brls::View* view) {
|
PCcolor->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
brls::Application::pushView(new PCPage());
|
brls::Application::pushView(new PCPage());
|
||||||
});
|
});
|
||||||
PCcolor->setHeight(LISTITEM_HEIGHT);
|
PCcolor->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
rebootPayload = new brls::ListItem("menus/tools/inject_payloads"_i18n);
|
brls::ListItem* rebootPayload = new brls::ListItem("menus/tools/inject_payloads"_i18n);
|
||||||
rebootPayload->getClickEvent()->subscribe([](brls::View* view) {
|
rebootPayload->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
brls::PopupFrame::open("menus/tools/inject_payloads"_i18n, new PayloadPage(), "", "");
|
brls::PopupFrame::open("menus/tools/inject_payloads"_i18n, new PayloadPage(), "", "");
|
||||||
});
|
});
|
||||||
rebootPayload->setHeight(LISTITEM_HEIGHT);
|
rebootPayload->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
netSettings = new brls::ListItem("menus/tools/internet_settings"_i18n);
|
brls::ListItem* netSettings = new brls::ListItem("menus/tools/internet_settings"_i18n);
|
||||||
netSettings->getClickEvent()->subscribe([](brls::View* view) {
|
netSettings->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
brls::PopupFrame::open("menus/tools/internet_settings"_i18n, new NetPage(), "", "");
|
brls::PopupFrame::open("menus/tools/internet_settings"_i18n, new NetPage(), "", "");
|
||||||
});
|
});
|
||||||
netSettings->setHeight(LISTITEM_HEIGHT);
|
netSettings->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
browser = new brls::ListItem("menus/tools/browser"_i18n);
|
brls::ListItem* browser = new brls::ListItem("menus/tools/browser"_i18n);
|
||||||
browser->getClickEvent()->subscribe([](brls::View* view) {
|
browser->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
std::string url;
|
std::string url;
|
||||||
if (brls::Swkbd::openForText([&url](std::string text) { url = text; }, "cheatslips.com e-mail", "", 64, "https://duckduckgo.com", 0, "Submit", "https://website.tld")) {
|
if (brls::Swkbd::openForText([&url](std::string text) { url = text; }, "cheatslips.com e-mail", "", 64, "https://duckduckgo.com", 0, "Submit", "https://website.tld")) {
|
||||||
|
@ -106,7 +113,7 @@ ToolsTab::ToolsTab(const std::string& tag, const nlohmann::ordered_json& payload
|
||||||
});
|
});
|
||||||
browser->setHeight(LISTITEM_HEIGHT);
|
browser->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
move = new brls::ListItem("menus/tools/batch_copy"_i18n);
|
brls::ListItem* move = new brls::ListItem("menus/tools/batch_copy"_i18n);
|
||||||
move->getClickEvent()->subscribe([](brls::View* view) {
|
move->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
chdir("/");
|
chdir("/");
|
||||||
std::string error = "";
|
std::string error = "";
|
||||||
|
@ -120,7 +127,7 @@ ToolsTab::ToolsTab(const std::string& tag, const nlohmann::ordered_json& payload
|
||||||
});
|
});
|
||||||
move->setHeight(LISTITEM_HEIGHT);
|
move->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
cleanUp = new brls::ListItem("menus/tools/clean_up"_i18n);
|
brls::ListItem* cleanUp = new brls::ListItem("menus/tools/clean_up"_i18n);
|
||||||
cleanUp->getClickEvent()->subscribe([](brls::View* view) {
|
cleanUp->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
std::filesystem::remove(AMS_ZIP_PATH);
|
std::filesystem::remove(AMS_ZIP_PATH);
|
||||||
std::filesystem::remove(APP_ZIP_PATH);
|
std::filesystem::remove(APP_ZIP_PATH);
|
||||||
|
@ -136,7 +143,7 @@ ToolsTab::ToolsTab(const std::string& tag, const nlohmann::ordered_json& payload
|
||||||
});
|
});
|
||||||
cleanUp->setHeight(LISTITEM_HEIGHT);
|
cleanUp->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
language = new brls::ListItem("menus/tools/language"_i18n);
|
brls::ListItem* language = new brls::ListItem("menus/tools/language"_i18n);
|
||||||
language->getClickEvent()->subscribe([](brls::View* view) {
|
language->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
std::vector<std::pair<std::string, std::string>> languages{
|
std::vector<std::pair<std::string, std::string>> languages{
|
||||||
std::make_pair("American English ({})", "en-US"),
|
std::make_pair("American English ({})", "en-US"),
|
||||||
|
@ -187,19 +194,20 @@ ToolsTab::ToolsTab(const std::string& tag, const nlohmann::ordered_json& payload
|
||||||
});
|
});
|
||||||
language->setHeight(LISTITEM_HEIGHT);
|
language->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
hideTabs = new brls::ListItem("menus/tools/hide_tabs"_i18n);
|
brls::ListItem* hideTabs = new brls::ListItem("menus/tools/hide_tabs"_i18n);
|
||||||
hideTabs->getClickEvent()->subscribe([](brls::View* view) {
|
hideTabs->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
brls::PopupFrame::open("menus/tools/hide_tabs"_i18n, new HideTabsPage(), "", "");
|
brls::PopupFrame::open("menus/tools/hide_tabs"_i18n, new HideTabsPage(), "", "");
|
||||||
});
|
});
|
||||||
hideTabs->setHeight(LISTITEM_HEIGHT);
|
hideTabs->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
changelog = new brls::ListItem("menus/tools/changelog"_i18n);
|
brls::ListItem* changelog = new brls::ListItem("menus/tools/changelog"_i18n);
|
||||||
changelog->getClickEvent()->subscribe([](brls::View* view) {
|
changelog->getClickEvent()->subscribe([](brls::View* view) {
|
||||||
brls::PopupFrame::open("menus/tools/changelog"_i18n, new ChangelogPage(), "", "");
|
brls::PopupFrame::open("menus/tools/changelog"_i18n, new ChangelogPage(), "", "");
|
||||||
});
|
});
|
||||||
changelog->setHeight(LISTITEM_HEIGHT);
|
changelog->setHeight(LISTITEM_HEIGHT);
|
||||||
|
|
||||||
if (!util::getBoolValue(hideStatus, "cheats")) this->addView(cheats);
|
if (!util::getBoolValue(hideStatus, "cheats")) this->addView(cheats);
|
||||||
|
if (!util::getBoolValue(hideStatus, "outdatedtitles")) this->addView(outdatedTitles);
|
||||||
if (!util::getBoolValue(hideStatus, "jccolor")) this->addView(JCcolor);
|
if (!util::getBoolValue(hideStatus, "jccolor")) this->addView(JCcolor);
|
||||||
if (!util::getBoolValue(hideStatus, "pccolor")) this->addView(PCcolor);
|
if (!util::getBoolValue(hideStatus, "pccolor")) this->addView(PCcolor);
|
||||||
if (erista && !util::getBoolValue(hideStatus, "rebootpayload")) this->addView(rebootPayload);
|
if (erista && !util::getBoolValue(hideStatus, "rebootpayload")) this->addView(rebootPayload);
|
||||||
|
|
Loading…
Add table
Reference in a new issue