Add title blacklist

This commit is contained in:
J-D-K 2018-08-06 18:50:30 -04:00
parent cee671c682
commit 22bd9d5b9f
4 changed files with 78 additions and 9 deletions

View File

@ -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<user> 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

View File

@ -44,6 +44,19 @@ static int getUserIndex(const u128& id)
return -1;
}
static std::vector<uint64_t> 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);
}
}
}
}

View File

@ -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;

View File

@ -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;