diff --git a/include/msg.hpp b/include/msg.hpp index 1a0a21c..c431d82 100644 --- a/include/msg.hpp +++ b/include/msg.hpp @@ -34,6 +34,7 @@ namespace Msg void DisplayMsg(std::string text); void DisplayWarnMsg(std::string Text); bool promptMsg(std::string promptMsg); + void DisplayStartMSG(); } #endif \ No newline at end of file diff --git a/include/screens/scriptlist.hpp b/include/screens/scriptlist.hpp index 6c3181b..13c18a8 100644 --- a/include/screens/scriptlist.hpp +++ b/include/screens/scriptlist.hpp @@ -38,9 +38,11 @@ class ScriptList : public Screen public: void Draw(void) const override; void Logic(u32 hDown, u32 hHeld, touchPosition touch) override; + ScriptList(); private: void deleteScript(int selectedScript); - + void refreshList(); + void DrawSubMenu(void) const; void DrawList(void) const; void DrawSingleObject(void) const; diff --git a/include/screens/unistore.hpp b/include/screens/unistore.hpp index 4e7f09d..b83b2b2 100644 --- a/include/screens/unistore.hpp +++ b/include/screens/unistore.hpp @@ -40,6 +40,8 @@ public: void Logic(u32 hDown, u32 hHeld, touchPosition touch) override; UniStore(); private: + void refreshList(); + void DrawSubMenu(void) const; void DrawStoreList(void) const; void DrawStore(void) const; diff --git a/include/utils/config.hpp b/include/utils/config.hpp index c013b71..3f0904f 100644 --- a/include/utils/config.hpp +++ b/include/utils/config.hpp @@ -30,9 +30,9 @@ #include namespace Config { - extern int LangPath, lang, Color1, Color2, Color3, TxtColor, SelectedColor, UnselectedColor, viewMode, progressbarColor; - extern std::string ScriptPath, MusicPath, StorePath, UniStoreFile; - extern bool Logging, UseBars, GodMode, autobootUnistore; + extern int LangPath, lang, Color1, Color2, Color3, TxtColor, SelectedColor, UnselectedColor, viewMode, progressbarColor, autoboot; + extern std::string ScriptPath, MusicPath, StorePath, AutobootFile; + extern bool Logging, UseBars, GodMode; void load(); void save(); diff --git a/romfs/lang/en/app.json b/romfs/lang/en/app.json index 8804f10..5cc3094 100644 --- a/romfs/lang/en/app.json +++ b/romfs/lang/en/app.json @@ -123,10 +123,13 @@ "ENABLE_GODMODE": "Enable GodMode", "ENABLE_GODMODE_PROMPT": "Would you like to enable GodMode?\n\nBe careful when you use GodMode!!", - "DISABLE_AUTOBOOT_STORE": "Would you like to disable autoboot?", + "DISABLE_AUTOBOOT": "Would you like to disable autoboot?", "AUTOBOOT_STORE": "Would you like to autoboot this Store?\n\nThis will autoboot this store on startup!", "SCRIPT_NOT_FOUND": "This script does not exist.", "DELETE_SCRIPT": "Would you like to delete this script?", - "REFRESHING_LIST": "Refreshing List..." + "REFRESHING_LIST": "Refreshing List...", + + "AUTOBOOT_SCRIPT": "Would you like to autoboot this Script?\n\nThis will autoboot this Script on startup!", + "STARTING_UNIVERSAL_UPDATER": "Starting Universal-Updater..." } diff --git a/source/init.cpp b/source/init.cpp index 85d12e3..577ff6e 100644 --- a/source/init.cpp +++ b/source/init.cpp @@ -32,6 +32,7 @@ #include "logging.hpp" #include "mainMenu.hpp" #include "screenCommon.hpp" +#include "scriptList.hpp" #include "sound.h" #include "unistore.hpp" @@ -49,6 +50,7 @@ touchPosition touch; sound *bgm = NULL; bool songIsFound = false; bool UniStoreAutoboot = false; +int AutobootWhat = 0; // 0 -> MainMenu ; 1 -> Store; 2 -> Script. // Include all spritesheet's. C2D_SpriteSheet sprites; @@ -87,9 +89,8 @@ Result Init::Initialize() { gfxInitDefault(); romfsInit(); amInit(); - Gui::init(); - Gui::loadSheet("romfs:/gfx/sprites.t3x", sprites); sdmcInit(); + Gui::init(); cfguInit(); acInit(); // Create Folder if missing. @@ -104,20 +105,34 @@ Result Init::Initialize() { } Config::load(); Lang::load(Config::lang); - + // In case it takes a bit longer to autoboot a script or so. + Msg::DisplayStartMSG(); if (Config::Logging == true) { Logging::createLogFile(); } + Gui::loadSheet("romfs:/gfx/sprites.t3x", sprites); - if (Config::autobootUnistore) { - UniStoreAutoboot = true; - } + AutobootWhat = Config::autoboot; - if (UniStoreAutoboot) { - if (access(Config::UniStoreFile.c_str(), F_OK) == 0) { + if (Config::autoboot == 1) { + if (access(Config::AutobootFile.c_str(), F_OK) == 0) { Gui::setScreen(std::make_unique()); + } else { + AutobootWhat = 0; + Config::autoboot = 0; + Gui::setScreen(std::make_unique()); + } + } else if (Config::autoboot == 2) { + if (access(Config::AutobootFile.c_str(), F_OK) == 0) { + Gui::setScreen(std::make_unique()); + } else { + AutobootWhat = 0; + Config::autoboot = 0; + Gui::setScreen(std::make_unique()); } } else { + AutobootWhat = 0; + Config::autoboot = 0; Gui::setScreen(std::make_unique()); } diff --git a/source/msg.cpp b/source/msg.cpp index e04661b..dd4e162 100644 --- a/source/msg.cpp +++ b/source/msg.cpp @@ -34,6 +34,22 @@ extern u32 bgTopColor; extern u32 bgBottomColor; extern u32 TextColor; +void Msg::DisplayStartMSG() { + Gui::clearTextBufs(); + C3D_FrameBegin(C3D_FRAME_SYNCDRAW); + C2D_TargetClear(Top, BLACK); + C2D_TargetClear(Bottom, BLACK); + Gui::ScreenDraw(Top); + Gui::Draw_Rect(0, 0, 400, 25, Config::Color1); + Gui::Draw_Rect(0, 25, 400, 190, Config::Color2); + Gui::Draw_Rect(0, 215, 400, 25, Config::Color1); + Gui::DrawStringCentered(0, 2, 0.7f, Config::TxtColor, Lang::get("STARTING_UNIVERSAL_UPDATER")); + Gui::ScreenDraw(Bottom); + Gui::Draw_Rect(0, 0, 320, 25, Config::Color1); + Gui::Draw_Rect(0, 25, 320, 190, Config::Color2); + Gui::Draw_Rect(0, 215, 320, 25, Config::Color1); + C3D_FrameEnd(0); +} void Msg::DisplayMsg(std::string text) { Gui::clearTextBufs(); C3D_FrameBegin(C3D_FRAME_SYNCDRAW); diff --git a/source/screens/scriptlist.cpp b/source/screens/scriptlist.cpp index d485d4b..ee92509 100644 --- a/source/screens/scriptlist.cpp +++ b/source/screens/scriptlist.cpp @@ -25,6 +25,7 @@ */ #include "download.hpp" +#include "mainMenu.hpp" #include "scriptBrowse.hpp" #include "scriptCreator.hpp" #include "scriptHelper.hpp" @@ -312,6 +313,49 @@ void ScriptList::DrawSubMenu(void) const { Gui::DrawStringCentered(80, subPos[3].y+12, 0.6f, Config::TxtColor, Lang::get("CHANGE_SCRIPTPATH"), 130); } +void loadDesc(void) { + lines.clear(); + while(Desc.find('\n') != Desc.npos) { + lines.push_back(Desc.substr(0, Desc.find('\n'))); + Desc = Desc.substr(Desc.find('\n')+1); + } + lines.push_back(Desc.substr(0, Desc.find('\n'))); +} + +extern int AutobootWhat; +bool changeBackHandle = false; + +ScriptList::ScriptList() { + if (AutobootWhat == 2) { + // If Script isn't found, go to MainMenu. + if (access(Config::AutobootFile.c_str(), F_OK) != 0) { + AutobootWhat = 0; + changeBackHandle = true; + Gui::setScreen(std::make_unique()); + } + + if (ScriptHelper::checkIfValid(Config::AutobootFile) == true) { + Info fI = parseInfo(Config::AutobootFile); + currentFile = Config::AutobootFile; + selectedTitle = fI.title; + jsonFile = openScriptFile(); + Desc = Description(jsonFile); + checkForValidate(); + fileInfo2 = parseObjects(currentFile); + loadColors(jsonFile); + loadDesc(); + isScriptSelected = true; + selection = 0; + mode = 2; + changeBackHandle = true; + AutobootWhat = 0; + } else { + AutobootWhat = 0; + changeBackHandle = true; + Gui::setScreen(std::make_unique()); + } + } +} void ScriptList::DrawList(void) const { std::string line1; @@ -368,15 +412,6 @@ void ScriptList::Draw(void) const { } } -void loadDesc(void) { - lines.clear(); - while(Desc.find('\n') != Desc.npos) { - lines.push_back(Desc.substr(0, Desc.find('\n'))); - Desc = Desc.substr(Desc.find('\n')+1); - } - lines.push_back(Desc.substr(0, Desc.find('\n'))); -} - void ScriptList::DrawSingleObject(void) const { std::string info; std::string entryAmount = std::to_string(selection2+1) + " / " + std::to_string(fileInfo2.size()); @@ -419,11 +454,33 @@ void ScriptList::DrawSingleObject(void) const { } } +void ScriptList::refreshList() { + if (returnIfExist(Config::ScriptPath, {"json"}) == true) { + Msg::DisplayMsg(Lang::get("REFRESHING_LIST")); + dirContents.clear(); + fileInfo.clear(); + chdir(Config::ScriptPath.c_str()); + getDirectoryContents(dirContents, {"json"}); + for(uint i=0;i()); + } else { + Gui::screenBack(); + return; + } } // Navigation. @@ -539,6 +596,25 @@ void ScriptList::ListSelection(u32 hDown, u32 hHeld, touchPosition touch) { mode = 0; } + if (hDown & KEY_START) { + if (Config::autoboot == 2) { + if (Msg::promptMsg(Lang::get("DISABLE_AUTOBOOT"))) { + Config::autoboot = 0; + Config::AutobootFile = ""; + } + } else { + if (dirContents[selection].isDirectory) { + } else if (fileInfo.size() != 0) { + if (ScriptHelper::checkIfValid(dirContents[selection].name) == true) { + if (Msg::promptMsg(Lang::get("AUTOBOOT_SCRIPT"))) { + Config::AutobootFile = Config::ScriptPath + dirContents[selection].name; + Config::autoboot = 2; + } + } + } + } + } + if ((hHeld & KEY_DOWN && !keyRepeatDelay) || (hDown & KEY_TOUCH && touching(touch, arrowPos[1]))) { if (selection < (int)fileInfo.size()-1) { selection++; @@ -665,7 +741,7 @@ void ScriptList::SelectFunction(u32 hDown, u32 hHeld, touchPosition touch) { selection2 = 0; fileInfo2.clear(); isScriptSelected = false; - mode = 1; + refreshList(); } if ((hHeld & KEY_DOWN && !keyRepeatDelay) || (hDown & KEY_TOUCH && touching(touch, arrowPos[1]))) { diff --git a/source/screens/unistore.cpp b/source/screens/unistore.cpp index f576b23..2f85450 100644 --- a/source/screens/unistore.cpp +++ b/source/screens/unistore.cpp @@ -50,7 +50,7 @@ extern u32 TextColor; extern u32 progressBar; extern u32 selected; extern u32 unselected; -extern bool UniStoreAutoboot; +extern int AutobootWhat; bool changeBackState = false; C2D_SpriteSheet appStoreSheet; @@ -198,29 +198,35 @@ void loadStoreColors(nlohmann::json &json) { UniStore::UniStore() { // Autobooting UniStore. ;) - if (UniStoreAutoboot) { + if (AutobootWhat == 1) { // If store isn't found, go to MainMenu. - if (access(Config::UniStoreFile.c_str(), F_OK) != 0) { - Gui::setScreen(std::make_unique()); + if (access(Config::AutobootFile.c_str(), F_OK) != 0) { + AutobootWhat = 0; changeBackState = true; + Gui::setScreen(std::make_unique()); } - // Parse store. - SI = parseStoreInfo(Config::UniStoreFile); // If WiFi enabled & File exist, update store. - if (checkWifiStatus()) { - if (Msg::promptMsg(Lang::get("WOULD_YOU_LIKE_UPDATE"))) { - if(SI.url != "" && SI.url != "MISSING: storeInfo.url" && SI.file != "" && SI.file != "MISSING: storeInfo.file") { - ScriptHelper::downloadFile(SI.url, SI.file, Lang::get("UPDATING")); - } - if(SI.sheetURL != "" && SI.sheetURL != "MISSING: storeInfo.sheetURL" && SI.storeSheet != "" && SI.storeSheet != "MISSING: storeInfo.sheet") { - ScriptHelper::downloadFile(SI.sheetURL, SI.storeSheet, Lang::get("UPDATING")); + if (ScriptHelper::checkIfValid(Config::AutobootFile, 1) == true) { + SI = parseStoreInfo(Config::AutobootFile); + if (checkWifiStatus()) { + if (Msg::promptMsg(Lang::get("WOULD_YOU_LIKE_UPDATE"))) { + if(SI.url != "" && SI.url != "MISSING: storeInfo.url" && SI.file != "" && SI.file != "MISSING: storeInfo.file") { + ScriptHelper::downloadFile(SI.url, SI.file, Lang::get("UPDATING")); + } + if(SI.sheetURL != "" && SI.sheetURL != "MISSING: storeInfo.sheetURL" && SI.storeSheet != "" && SI.storeSheet != "MISSING: storeInfo.sheet") { + ScriptHelper::downloadFile(SI.sheetURL, SI.storeSheet, Lang::get("UPDATING")); + } } } + } else { + AutobootWhat = 0; + changeBackState = true; + Gui::setScreen(std::make_unique()); } - if (ScriptHelper::checkIfValid(Config::UniStoreFile, 1) == true) { - currentStoreFile = Config::UniStoreFile; + if (ScriptHelper::checkIfValid(Config::AutobootFile, 1) == true) { + currentStoreFile = Config::AutobootFile; Msg::DisplayMsg(Lang::get("PREPARE_STORE")); if (SI.storeSheet != "" || SI.storeSheet != "MISSING: storeInfo.sheet") { if(access(SI.storeSheet.c_str(), F_OK) != -1 ) { @@ -234,7 +240,12 @@ UniStore::UniStore() { displayInformations = handleIfDisplayText(); isScriptSelected = true; mode = 2; + AutobootWhat = 0; changeBackState = true; + } else { + AutobootWhat = 0; + changeBackState = true; + Gui::setScreen(std::make_unique()); } } } @@ -452,6 +463,24 @@ void UniStore::updateStore(int selectedStore) { } } +void UniStore::refreshList() { + if (returnIfExist(Config::StorePath, {"unistore"}) == true) { + Msg::DisplayMsg(Lang::get("REFRESHING_LIST")); + dirContents.clear(); + storeInfo.clear(); + chdir(Config::StorePath.c_str()); + getDirectoryContents(dirContents, {"unistore"}); + for(uint i=0;i