From 3ebdb7e95da9a799993095ece336e8ee8317535c Mon Sep 17 00:00:00 2001 From: SuperSaiyajinStackZ <47382115+SuperSaiyajinStackZ@users.noreply.github.com> Date: Sun, 22 Dec 2019 17:49:23 +0100 Subject: [PATCH] *Only* open valid Scripts. --- include/utils/scriptHelper.hpp | 2 ++ source/screens/scriptBrowse.cpp | 1 - source/screens/scriptlist.cpp | 26 +++++++++++++------------- source/screens/tinyDB.cpp | 1 - source/utils/scriptHelper.cpp | 14 ++++++++++++++ 5 files changed, 29 insertions(+), 15 deletions(-) diff --git a/include/utils/scriptHelper.hpp b/include/utils/scriptHelper.hpp index 65dc057..fcefd93 100644 --- a/include/utils/scriptHelper.hpp +++ b/include/utils/scriptHelper.hpp @@ -43,6 +43,8 @@ namespace ScriptHelper { void extractFile(std::string file, std::string input, std::string output, std::string message); Result createFile(const char * path); void displayTimeMsg(std::string message, int seconds); + + bool checkIfValid(std::string scriptFile); } #endif \ No newline at end of file diff --git a/source/screens/scriptBrowse.cpp b/source/screens/scriptBrowse.cpp index c924515..e32af83 100644 --- a/source/screens/scriptBrowse.cpp +++ b/source/screens/scriptBrowse.cpp @@ -59,7 +59,6 @@ nlohmann::json infoFromScript(const std::string &path) { FILE* file = fopen(path.c_str(), "r"); if(!file) { - fclose(file); return out; } in = nlohmann::json::parse(file, nullptr, false); diff --git a/source/screens/scriptlist.cpp b/source/screens/scriptlist.cpp index a4431c8..ba0c32f 100644 --- a/source/screens/scriptlist.cpp +++ b/source/screens/scriptlist.cpp @@ -59,7 +59,6 @@ Info parseInfo(std::string fileName) { FILE* file = fopen(fileName.c_str(), "rt"); if(!file) { printf("File not found\n"); - fclose(file); return {"", ""}; } nlohmann::json json = nlohmann::json::parse(file, nullptr, false); @@ -95,7 +94,6 @@ std::vector parseObjects(std::string fileName) { FILE* file = fopen(fileName.c_str(), "rt"); if(!file) { printf("File not found\n"); - fclose(file); return {{""}}; } nlohmann::json json = nlohmann::json::parse(file, nullptr, false); @@ -425,17 +423,19 @@ void ScriptList::ListSelection(u32 hDown, u32 hHeld, touchPosition touch) { if (hDown & KEY_A) { if (dirContents[selection].isDirectory) { } else if (fileInfo.size() != 0) { - 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 = 1; + 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 = 1; + } } } diff --git a/source/screens/tinyDB.cpp b/source/screens/tinyDB.cpp index c5e0614..6a0af11 100644 --- a/source/screens/tinyDB.cpp +++ b/source/screens/tinyDB.cpp @@ -54,7 +54,6 @@ std::vector parseObjects() { FILE* file = fopen(tinyDBFile, "rt"); if(!file) { printf("File not found\n"); - fclose(file); return {{""}}; } tinyDBJson = nlohmann::json::parse(file, nullptr, false); diff --git a/source/utils/scriptHelper.cpp b/source/utils/scriptHelper.cpp index 10ae8b7..b10bcd3 100644 --- a/source/utils/scriptHelper.cpp +++ b/source/utils/scriptHelper.cpp @@ -131,4 +131,18 @@ void ScriptHelper::displayTimeMsg(std::string message, int seconds) { for (int i = 0; i < 60*seconds; i++) { gspWaitForVBlank(); } +} + +bool ScriptHelper::checkIfValid(std::string scriptFile) { + FILE* file = fopen(scriptFile.c_str(), "rt"); + if(!file) { + printf("File not found\n"); + return false; + } + nlohmann::json json = nlohmann::json::parse(file, nullptr, false); + fclose(file); + + if (!json.contains("info")) return false; + + return true; } \ No newline at end of file