diff --git a/inc/data.h b/inc/data.h index 699f771..24ea6d4 100644 --- a/inc/data.h +++ b/inc/data.h @@ -14,6 +14,7 @@ namespace data //Loads user + title info void loadDataInfo(); + void loadBlacklist(); void exit(); //Class to help not load the same icons over and over @@ -95,13 +96,15 @@ namespace data u128 userID; std::string username, userSafe; }; + //Adds title to blacklist + void blacklistAdd(titledata& t); //User vector extern std::vector users; //Stores current data we're using so I don't have to type so much. extern titledata curData; - extern user curUser; + extern user curUser; } #endif // DATA_H diff --git a/src/data.cpp b/src/data.cpp index b710e70..5565df7 100644 --- a/src/data.cpp +++ b/src/data.cpp @@ -44,6 +44,19 @@ static int getUserIndex(const u128& id) return -1; } +static std::vector blacklist; + +bool blacklisted(const uint64_t& id) +{ + for(unsigned i = 0; i < blacklist.size(); i++) + { + if(id == blacklist[i]) + return true; + } + + return false; +} + namespace data { titledata curData; @@ -54,6 +67,9 @@ namespace data void loadDataInfo() { + blacklist.clear(); + loadBlacklist(); + icn defIcon; defIcon.load(0, "romfs:/img/icn/icnDefault.png"); icons.push_back(defIcon); @@ -81,7 +97,7 @@ namespace data if(R_FAILED(res) || total == 0) break; - if((info.SaveDataType == FsSaveDataType_SaveData) || sysSave) + if((info.SaveDataType == FsSaveDataType_SaveData && !blacklisted(info.titleID)) || sysSave) { int u = getUserIndex(info.userID); if(u == -1) @@ -314,4 +330,46 @@ namespace data return true; } + + void loadBlacklist() + { + if(fs::fileExists(fs::getWorkDir() + "blacklist.txt")) + { + std::string line; + std::fstream bl(fs::getWorkDir() + "blacklist.txt", std::ios::in); + + while(std::getline(bl, line)) + { + if(line[0] == '#' || line[0] == '\n') + continue; + + uint64_t pushID = std::strtoull(line.c_str(), NULL, 16); + + blacklist.push_back(pushID); + } + } + } + + void blacklistAdd(titledata& t) + { + std::fstream bl(fs::getWorkDir() + "blacklist.txt", std::ios::app); + + std::string titleLine = "#" + t.getTitle() + "\n"; + char idLine[32]; + sprintf(idLine, "0x%016lX\n", t.getID()); + + bl.write(titleLine.c_str(), titleLine.length()); + bl.write(idLine, std::strlen(idLine)); + bl.close(); + + //Remove it from every user + for(unsigned i = 0; i < users.size(); i++) + { + for(unsigned j = 0; j < users[i].titles.size(); j++) + { + if(users[i].titles[j].getID() == t.getID()) + users[i].titles.erase(users[i].titles.begin() + j); + } + } + } } diff --git a/src/ui.cpp b/src/ui.cpp index 5dd4773..0fd8f50 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -165,19 +165,21 @@ namespace ui //User Select int startX = 848; ui::button sel("", startX, 656, 110, 64); - ui::button dmp("", startX += 110, 656, 110, 64); - ui::button cls("", startX += 110, 656, 110, 64); + ui::button dmp("", startX += 110, 656, 134, 64); + ui::button cls("", startX += 134, 656, 110, 64); usrNav.push_back(sel); usrNav.push_back(dmp); usrNav.push_back(cls); //Title - startX = 914; + startX = 804; ui::button ttlSel("", startX, 656, 110, 64); - ui::button ttlDmp("", startX += 110, 656, 110, 64); + ui::button ttlDmp("", startX += 110, 656, 134, 64); + ui::button ttlBlk("", startX += 134, 656, 110, 64); ui::button ttlBck("", startX += 110, 656, 110, 64); ttlNav.push_back(ttlSel); ttlNav.push_back(ttlDmp); + ttlNav.push_back(ttlBlk); ttlNav.push_back(ttlBck); //Folder. Skip adv since it can't be touch controlled @@ -265,12 +267,14 @@ namespace ui case TTL_SEL: case CLS_TTL: { - unsigned startX = 914; + unsigned startX = 804; texDraw(buttonA, frameBuffer, startX, 672); drawText("Select", frameBuffer, shared, startX += 38, 680, 14, mnuTxt); texDraw(buttonY, frameBuffer, startX += 72, 672); drawText("Dump All", frameBuffer, shared, startX += 38, 680, 14, mnuTxt); - texDraw(buttonB, frameBuffer, startX += 96, 672); + texDraw(buttonX, frameBuffer, startX += 96, 672); + drawText("Blacklist", frameBuffer, shared, startX += 38, 682, 12, mnuTxt); + texDraw(buttonB, frameBuffer, startX += 72, 672); drawText("Back", frameBuffer, shared, startX += 38, 680, 14, mnuTxt); } break; diff --git a/src/ui/ttlsel.cpp b/src/ui/ttlsel.cpp index b3ab02e..5d36dc7 100644 --- a/src/ui/ttlsel.cpp +++ b/src/ui/ttlsel.cpp @@ -208,7 +208,11 @@ namespace ui { fs::dumpAllUserSaves(data::curUser); } - else if(down & KEY_B || ttlNav[2].getEvent() == BUTTON_RELEASED) + else if(down & KEY_X || ttlNav[2].getEvent() == BUTTON_RELEASED) + { + data::blacklistAdd(data::curUser.titles[selected]); + } + else if(down & KEY_B || ttlNav[3].getEvent() == BUTTON_RELEASED) { start = 0; selected = 0;