From 1969456af40adc9afccf787ccc077171267e5cb0 Mon Sep 17 00:00:00 2001 From: VoltZ <47382115+SuperSaiyajinVoltZ@users.noreply.github.com> Date: Sat, 2 Nov 2019 06:51:42 +0100 Subject: [PATCH] Add version checking and don't let it crash, if no files are found. --- include/gui.hpp | 2 ++ romfs/lang/en/app.json | 5 ++++- source/gui.cpp | 15 +++++++++++++++ source/screens/scriptlist.cpp | 34 ++++++++++++++++++++++++++++------ 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/include/gui.hpp b/include/gui.hpp index 9e315b6..d21b0fd 100644 --- a/include/gui.hpp +++ b/include/gui.hpp @@ -68,6 +68,8 @@ namespace Gui // Basic GUI. void DrawTop(void); void DrawBottom(void); + + void DisplayWarnMsg(std::string Text); } void DisplayMsg(std::string text); diff --git a/romfs/lang/en/app.json b/romfs/lang/en/app.json index fa9d18b..6ae1a43 100644 --- a/romfs/lang/en/app.json +++ b/romfs/lang/en/app.json @@ -24,5 +24,8 @@ "ENTER_RED_RGB": "Enter the Red RGB.", "ENTER_GREEN_RGB": "Enter the Green RGB.", - "ENTER_BLUE_RGB": "Enter the Blue RGB." + "ENTER_BLUE_RGB": "Enter the Blue RGB.", + + "WHAT_DO_YOU_TRY": "What are you trying to do? :P", + "INCOMPATIBLE_SCRIPT": "You have an incompatible script." } diff --git a/source/gui.cpp b/source/gui.cpp index 294029f..02732ae 100644 --- a/source/gui.cpp +++ b/source/gui.cpp @@ -81,6 +81,21 @@ void DisplayMsg(std::string text) { C3D_FrameEnd(0); } +void Gui::DisplayWarnMsg(std::string Text) +{ + Gui::clearTextBufs(); + C3D_FrameBegin(C3D_FRAME_SYNCDRAW); + C2D_TargetClear(top, BLACK); + C2D_TargetClear(bottom, BLACK); + Gui::DrawTop(); + Gui::DrawStringCentered(0, 2, 0.6f, Config::TxtColor, Text.c_str(), 400); + Gui::DrawBottom(); + C3D_FrameEnd(0); + for (int i = 0; i < 60*3; i++) { + gspWaitForVBlank(); + } +} + void Gui::DrawStringCentered(float x, float y, float size, u32 color, std::string Text, int maxWidth) { Gui::DrawString((currentScreen ? 200 : 160)+x-(std::min(maxWidth, (int)Gui::GetStringWidth(size, Text))/2), y, size, color, Text, maxWidth); } diff --git a/source/screens/scriptlist.cpp b/source/screens/scriptlist.cpp index fdeeb76..8b85c9e 100644 --- a/source/screens/scriptlist.cpp +++ b/source/screens/scriptlist.cpp @@ -62,6 +62,19 @@ Info parseInfo(std::string fileName) { return info; } +void checkForValidate(void) { + FILE* file = fopen(currentFile.c_str(), "rt"); + nlohmann::json json = nlohmann::json::parse(file, nullptr, false); + fclose(file); + + std::string version; + version = get(json, "info", "version"); + if (version != "1") { + Gui::DisplayWarnMsg(Lang::get("INCOMPATIBLE_SCRIPT")); + } +} + + // Objects like Release or Nightly. std::vector parseObjects(std::string fileName) { FILE* file = fopen(fileName.c_str(), "rt"); @@ -235,10 +248,15 @@ void ScriptList::ListSelection(u32 hDown, u32 hHeld) { } if (hDown & KEY_A) { - currentFile = dirContents[selection].name; - fileInfo2 = parseObjects(currentFile); - selection = 0; - mode = 1; + if (fileInfo.size() == 0) { + Gui::DisplayWarnMsg(Lang::get("WHAT_DO_YOU_TRY")); + } else { + currentFile = dirContents[selection].name; + checkForValidate(); + fileInfo2 = parseObjects(currentFile); + selection = 0; + mode = 1; + } } if(selection < screenPos) { @@ -275,8 +293,12 @@ void ScriptList::SelectFunction(u32 hDown, u32 hHeld) { } } if (hDown & KEY_A) { - choice = fileInfo2[selection2]; - runFunctions(); + if (fileInfo2.size() == 0) { + Gui::DisplayWarnMsg(Lang::get("WHAT_DO_YOU_TRY")); + } else { + choice = fileInfo2[selection2]; + runFunctions(); + } } if (hDown & KEY_B) {