diff --git a/include/screens/scriptlist.hpp b/include/screens/scriptlist.hpp index 0b6e3ef..cd5dcf6 100644 --- a/include/screens/scriptlist.hpp +++ b/include/screens/scriptlist.hpp @@ -48,7 +48,7 @@ private: void deleteScript(int selectedScript); void refreshList(); nlohmann::json openScriptFile(); - void checkForValidate(void); + bool checkForValidate(void); void loadDesc(void); Result runFunctions(nlohmann::json &json); diff --git a/include/utils/common.hpp b/include/utils/common.hpp index e59ff67..a2037eb 100644 --- a/include/utils/common.hpp +++ b/include/utils/common.hpp @@ -66,7 +66,7 @@ using json = nlohmann::json; #define WORKING_DIR "/" #define SCRIPTS_PATH "sdmc:/3ds/Universal-Updater/scripts/" // The Scripts will be here. #define MUSIC_PATH "sdmc:/3ds/Universal-Updater/Music.wav" // Default Music File / Path. -#define SCRIPT_VERSION 3 +#define SCRIPT_VERSION 4 #define STORE_PATH "sdmc:/3ds/Universal-Updater/stores/" // Default Store path. #define ENTRIES_PER_SCREEN 3 #define ENTRIES_PER_LIST 7 diff --git a/include/utils/config.hpp b/include/utils/config.hpp index 8981a20..823485d 100644 --- a/include/utils/config.hpp +++ b/include/utils/config.hpp @@ -123,7 +123,9 @@ public: // Show Downloadspeed. bool showSpeed() { return this->v_showSpeed; } void showSpeed(bool v) { this->v_showSpeed = v; if (!this->changesMade) this->changesMade = true; } - + // Citra stuff. + bool citra() { return this->v_citra; } + void citra(bool v) { this->v_citra = v; if (!this->changesMade) this->changesMade = true; } // Variables. std::string _3dsxpath() { return this->v_3dsx_install_path; } void _3dsxpath(std::string v) { this->v_3dsx_install_path = v; if (!this->changesMade) this->changesMade = true; } @@ -149,7 +151,7 @@ private: v_outdatedColor, v_uptodateColor, v_notfoundColor, v_futureColor; std::string v_scriptPath, v_musicPath, v_storePath, v_autobootFile, v_language; int v_langPath, v_viewMode, v_autoboot, v_keyDelay; - bool v_logging, v_useBars, v_screenFade, v_progressDisplay, v_firstStartup, v_useScriptColor, v_showSpeed; + bool v_logging, v_useBars, v_screenFade, v_progressDisplay, v_firstStartup, v_useScriptColor, v_showSpeed, v_citra; // Some variables. std::string v_3dsx_install_path, v_nds_install_path, v_archive_path; diff --git a/source/download/download.cpp b/source/download/download.cpp index 401c8d2..ae29825 100644 --- a/source/download/download.cpp +++ b/source/download/download.cpp @@ -626,6 +626,7 @@ Result downloadFromRelease(std::string url, std::string asset, std::string path, * @return True if Wi-Fi is connected; false if not. */ bool checkWifiStatus(void) { + if (config->citra()) return true; u32 wifiStatus; bool res = false; diff --git a/source/screens/scriptlist.cpp b/source/screens/scriptlist.cpp index 769de73..ae0d4ae 100644 --- a/source/screens/scriptlist.cpp +++ b/source/screens/scriptlist.cpp @@ -62,14 +62,19 @@ ScriptInfo parseInfo(std::string fileName) { } // Check if Script version has the current version. -void ScriptList::checkForValidate(void) { +bool ScriptList::checkForValidate(void) { FILE* file = fopen(currentFile.c_str(), "rt"); nlohmann::json json = nlohmann::json::parse(file, nullptr, false); fclose(file); int ver = ScriptHelper::getNum(json, "info", "version"); - if (ver < SCRIPT_VERSION || ver > SCRIPT_VERSION) { + if (ver == 3 || ver == 4) { + return true; + } else { Msg::DisplayWarnMsg(Lang::get("INCOMPATIBLE_SCRIPT")); + return false; } + + return false; } // Open a script file and return it to a JSON. @@ -206,18 +211,23 @@ ScriptList::ScriptList() { if (ScriptHelper::checkIfValid(config->autobootFile()) == true) { ScriptInfo 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; + if (checkForValidate()) { + selectedTitle = fI.title; + jsonFile = openScriptFile(); + Desc = Description(jsonFile); + 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(), config->screenFade(), true); + } } else { AutobootWhat = 0; changeBackHandle = true; @@ -642,16 +652,18 @@ void ScriptList::ListSelection(u32 hDown, u32 hHeld, touchPosition touch) { if (!dirContents[screenPos + i].isDirectory && fileInfo.size() != 0) { if (ScriptHelper::checkIfValid(dirContents[screenPos + i].name) == true) { currentFile = dirContents[screenPos + i].name; - selectedTitle = fileInfo[screenPos + i].title; - jsonFile = openScriptFile(); - Desc = Description(jsonFile); - checkForValidate(); - fileInfo2 = parseObjects(currentFile); - loadColors(jsonFile); - loadDesc(); - isScriptSelected = true; - Selection = 0; - mode = 2; + if (checkForValidate()) { + selectedTitle = fileInfo[screenPos + i].title; + jsonFile = openScriptFile(); + Desc = Description(jsonFile); + checkForValidate(); + fileInfo2 = parseObjects(currentFile); + loadColors(jsonFile); + loadDesc(); + isScriptSelected = true; + Selection = 0; + mode = 2; + } } } } @@ -662,16 +674,18 @@ void ScriptList::ListSelection(u32 hDown, u32 hHeld, touchPosition touch) { if (!dirContents[screenPosList + i].isDirectory && fileInfo.size() != 0) { if (ScriptHelper::checkIfValid(dirContents[screenPosList + i].name) == true) { currentFile = dirContents[screenPosList + i].name; - selectedTitle = fileInfo[screenPosList + i].title; - jsonFile = openScriptFile(); - Desc = Description(jsonFile); - checkForValidate(); - fileInfo2 = parseObjects(currentFile); - loadColors(jsonFile); - loadDesc(); - isScriptSelected = true; - Selection = 0; - mode = 2; + if (checkForValidate()) { + selectedTitle = fileInfo[screenPosList + i].title; + jsonFile = openScriptFile(); + Desc = Description(jsonFile); + checkForValidate(); + fileInfo2 = parseObjects(currentFile); + loadColors(jsonFile); + loadDesc(); + isScriptSelected = true; + Selection = 0; + mode = 2; + } } } } @@ -684,16 +698,18 @@ void ScriptList::ListSelection(u32 hDown, u32 hHeld, touchPosition touch) { } else if (fileInfo.size() != 0) { if (ScriptHelper::checkIfValid(dirContents[Selection].name) == true) { currentFile = dirContents[Selection].name; - selectedTitle = fileInfo[Selection].title; - jsonFile = openScriptFile(); - Desc = Description(jsonFile); - checkForValidate(); - fileInfo2 = parseObjects(currentFile); - loadColors(jsonFile); - loadDesc(); - isScriptSelected = true; - Selection = 0; - mode = 2; + if (checkForValidate()) { + selectedTitle = fileInfo[Selection].title; + jsonFile = openScriptFile(); + Desc = Description(jsonFile); + checkForValidate(); + fileInfo2 = parseObjects(currentFile); + loadColors(jsonFile); + loadDesc(); + isScriptSelected = true; + Selection = 0; + mode = 2; + } } } } diff --git a/source/utils/config.cpp b/source/utils/config.cpp index 381c94c..d62effd 100644 --- a/source/utils/config.cpp +++ b/source/utils/config.cpp @@ -36,6 +36,7 @@ void Config::addMissingThings() { this->setString("3DSX_PATH", _3DSX_PATH); this->setString("NDS_PATH", _NDS_PATH); this->setString("ARCHIVE_PATH", ARCHIVES_DEFAULT); + this->setBool("CITRA", false); } } @@ -76,6 +77,7 @@ void Config::initialize() { this->setString("3DSX_PATH", _3DSX_PATH); this->setString("NDS_PATH", _NDS_PATH); this->setString("ARCHIVE_PATH", ARCHIVES_DEFAULT); + this->setBool("CITRA", false); this->setInt("VERSION", this->configVersion); // Write to file. @@ -290,6 +292,12 @@ Config::Config() { this->archivepath(this->getString("ARCHIVE_PATH")); } + if (!this->json.contains("CITRA")) { + this->citra(false); + } else { + this->citra(this->getBool("CITRA")); + } + this->changesMade = false; // No changes made yet. } @@ -330,7 +338,7 @@ void Config::save() { this->setString("3DSX_PATH", this->_3dsxpath()); this->setString("NDS_PATH", this->ndspath()); this->setString("ARCHIVE_PATH", this->archivepath()); - + this->setBool("CITRA", this->citra()); // Write changes to file. const std::string dump = this->json.dump(1, '\t'); fwrite(dump.c_str(), 1, this->json.dump(1, '\t').size(), file);