diff --git a/include/download/download.hpp b/include/download/download.hpp index c4dfca8..847edf2 100644 --- a/include/download/download.hpp +++ b/include/download/download.hpp @@ -109,6 +109,4 @@ namespace download { void deleteFileList(std::string file, std::string message); void installFileList(std::string file, std::string message); void extractFileList(std::string file, std::string input, std::string output, std::string message); -} - -void downloadScripts(void); \ No newline at end of file +} \ No newline at end of file diff --git a/include/screens/scriptBrowse.hpp b/include/screens/scriptBrowse.hpp index 268f829..79f816f 100644 --- a/include/screens/scriptBrowse.hpp +++ b/include/screens/scriptBrowse.hpp @@ -29,6 +29,7 @@ #include "screens/screen.hpp" #include "screens/screenCommon.hpp" +#include "utils/config.hpp" #include "utils/fileBrowse.h" class ScriptBrowse : public Screen @@ -36,8 +37,10 @@ class ScriptBrowse : public Screen public: void Draw(void) const override; void Logic(u32 hDown, u32 hHeld, touchPosition touch) override; + ScriptBrowse(); private: + nlohmann::json currentFile; std::vector dirContents; mutable int screenPos = 0; mutable int selection = 0; diff --git a/include/utils/fileBrowse.h b/include/utils/fileBrowse.h index 4ff7862..bc77720 100644 --- a/include/utils/fileBrowse.h +++ b/include/utils/fileBrowse.h @@ -26,5 +26,6 @@ void findNdsFiles(vector& dirContents); bool nameEndsWith(const std::string& name, const std::vector extensionList); void getDirectoryContents(std::vector& dirContents, const std::vector extensionList); void getDirectoryContents(std::vector& dirContents); +std::vector getContents(const std::string &name, const std::vector &extensionList); #endif //FILE_BROWSE_H \ No newline at end of file diff --git a/romfs/lang/en/app.json b/romfs/lang/en/app.json index 0892f2a..e9f807a 100644 --- a/romfs/lang/en/app.json +++ b/romfs/lang/en/app.json @@ -35,5 +35,10 @@ "GETTING_SCRIPT_LIST": "Getting Script List...", "B_BACK": "\uE001: Back", "A_CHOOSE": "\uE000: Choose", - "SCRIPTBROWSE": "Scriptbrowse" + "SCRIPTBROWSE": "Scriptbrowse", + "GET_SCRIPTS": "Get Scripts", + "INSTALLED_REV": "Installed revision: ", + "CURRENT_REV": "Current revision: ", + "AUTHOR": "author: ", + "TITLE": "title: " } diff --git a/source/download/download.cpp b/source/download/download.cpp index 3f51eaa..6e6f1f3 100644 --- a/source/download/download.cpp +++ b/source/download/download.cpp @@ -673,75 +673,4 @@ void download::extractFileList(std::string file, std::string input, std::string Threads::create((ThreadFunc)displayProgressBar); extractArchive(file, input, output); showProgressBar = false; -} - -// Script Browse. -void downloadScripts(void) { - int keyRepeatDelay = 0; - std::string ScriptsPath = Config::ScriptPath; - - DisplayMsg(Lang::get("GETTING_SCRIPT_LIST")); - - std::vector scriptList; - scriptList = getThemeList("Universal-Team/extras", "Scripts"); - makeDirs(ScriptsPath.c_str()); - - for(uint i=0;i 0) { - selectedScript--; - keyRepeatDelay = 3; - } - } else if(hHeld & KEY_DOWN && !keyRepeatDelay) { - if(selectedScript < (int)scriptList.size()-1) { - selectedScript++; - keyRepeatDelay = 3; - } - } else if(hHeld & KEY_LEFT && !keyRepeatDelay) { - selectedScript -= 10; - if(selectedScript < 0) { - selectedScript = 0; - } - keyRepeatDelay = 3; - } else if(hHeld & KEY_RIGHT && !keyRepeatDelay) { - selectedScript += 10; - if(selectedScript > (int)scriptList.size()) { - selectedScript = scriptList.size()-1; - } - keyRepeatDelay = 3; - } - std::string scriptText; - for(int i=(selectedScript<10) ? 0 : selectedScript-10;i<(int)scriptList.size()&&i<((selectedScript<10) ? 11 : selectedScript+1);i++) { - if(i == selectedScript) { - scriptText += "> " + scriptList[i].name + "\n"; - } else { - scriptText += " " + scriptList[i].name + "\n"; - } - } - for(uint i=0;i<((scriptList.size()<10) ? 11-scriptList.size() : 0);i++) { - scriptText += "\n"; - } - scriptText += Lang::get("B_BACK") + " " +Lang::get("A_CHOOSE"); - DisplayMsg(scriptText.c_str()); - } } \ No newline at end of file diff --git a/source/screens/mainMenu.cpp b/source/screens/mainMenu.cpp index 1043b28..cbcf54a 100644 --- a/source/screens/mainMenu.cpp +++ b/source/screens/mainMenu.cpp @@ -53,7 +53,7 @@ void MainMenu::Draw(void) const { } Gui::DrawString((320-Gui::GetStringWidth(0.6f, Lang::get("SCRIPTLIST")))/2-150+70, mainButtons[0].y+10, 0.6f, Config::TxtColor, Lang::get("SCRIPTLIST"), 140); - Gui::DrawString((320-Gui::GetStringWidth(0.6f, Lang::get("SCRIPTBROWSE")))/2+150-70, mainButtons[1].y+10, 0.6f, Config::TxtColor, Lang::get("SCRIPTBROWSE"), 140); + Gui::DrawString((320-Gui::GetStringWidth(0.6f, Lang::get("GET_SCRIPTS")))/2+150-70, mainButtons[1].y+10, 0.6f, Config::TxtColor, Lang::get("GET_SCRIPTS"), 140); Gui::DrawString((320-Gui::GetStringWidth(0.6f, Lang::get("LANGUAGE")))/2-150+70, mainButtons[2].y+10, 0.6f, Config::TxtColor, Lang::get("LANGUAGE"), 140); Gui::DrawString((320-Gui::GetStringWidth(0.6f, Lang::get("COLORS")))/2+150-70, mainButtons[3].y+10, 0.6f, Config::TxtColor, Lang::get("COLORS"), 140); } @@ -105,8 +105,4 @@ void MainMenu::Logic(u32 hDown, u32 hHeld, touchPosition touch) { Gui::setScreen(std::make_unique()); } } - - if (hDown & KEY_X) { - downloadScripts(); - } } \ No newline at end of file diff --git a/source/screens/scriptBrowse.cpp b/source/screens/scriptBrowse.cpp index 13a6657..e1fad91 100644 --- a/source/screens/scriptBrowse.cpp +++ b/source/screens/scriptBrowse.cpp @@ -29,11 +29,13 @@ #include "screens/mainMenu.hpp" #include "screens/scriptBrowse.hpp" -#include "utils/config.hpp" +#include "utils/fileBrowse.h" +#include "utils/json.hpp" -#define ENTRIES_PER_SCREEN 2 +#define ENTRIES_PER_SCREEN 3 nlohmann::json jsonFileBrowse; + std::string metaFile = "sdmc:/3ds/Universal-Updater/ScriptInfo.json"; extern std::string get(nlohmann::json json, const std::string &key, const std::string &key2); @@ -46,17 +48,91 @@ nlohmann::json openMetaFile() { return jsonFile; } +nlohmann::json parseInfo() { + FILE* file = fopen(metaFile.c_str(), "rt"); + if(!file) { + printf("File not found\n"); + fclose(file); + return {"", ""}; + } + nlohmann::json json = nlohmann::json::parse(file, nullptr, false); + fclose(file); + + for(uint i=0;i()), 400); Gui::DrawBottom(); + for(int i=0;i 0) { + selection--; + } else { + selection = (int)jsonFileBrowse.size()-1; + } + if (fastMode == true) { + keyRepeatDelay = 3; + } else if (fastMode == false){ + keyRepeatDelay = 6; + } + } + + if (hDown & KEY_A) { + if (jsonFileBrowse.size() != 0) { + std::string fileName = Lang::get("DOWNLOADING") + std::string(jsonFileBrowse[selection]["title"]); + DisplayMsg(fileName); + downloadToFile(jsonFileBrowse[selection]["url"], Config::ScriptPath + std::string(jsonFileBrowse[selection]["title"])+ ".json"); + } + } } \ No newline at end of file diff --git a/source/utils/fileBrowse.cpp b/source/utils/fileBrowse.cpp index 1ae7249..20182c9 100644 --- a/source/utils/fileBrowse.cpp +++ b/source/utils/fileBrowse.cpp @@ -159,4 +159,16 @@ void getDirectoryContents(std::vector& dirContents, const std::vector< void getDirectoryContents(std::vector& dirContents) { getDirectoryContents(dirContents, {}); +} + +std::vector getContents(const std::string &name, const std::vector &extensionList) { + std::vector dirContents; + DIR* pdir = opendir(name.c_str()); + struct dirent *pent; + while ((pent = readdir(pdir)) != NULL) { + if(nameEndsWith(pent->d_name, extensionList)) + dirContents.push_back(pent->d_name); + } + closedir(pdir); + return dirContents; } \ No newline at end of file