mirror of
https://github.com/J-D-K/JKSV.git
synced 2026-04-25 07:57:04 -05:00
Fix favorites, try to not make copies of users in memory
This commit is contained in:
parent
7cde0a12ba
commit
41da3c8a92
19
inc/data.h
19
inc/data.h
|
|
@ -74,7 +74,7 @@ namespace data
|
|||
|
||||
//returns save_data_id string. only used for helping identify nand files
|
||||
std::string getTIDStr() { return tidStr; }
|
||||
std::string getSaveIDStr(){ return saveIDStr; }
|
||||
std::string getSaveIDStr() { return saveIDStr; }
|
||||
|
||||
uint64_t getID() { return id; }
|
||||
uint64_t getSaveID() { return saveID; }
|
||||
|
|
@ -111,7 +111,7 @@ namespace data
|
|||
|
||||
//Returns user ID
|
||||
AccountUid getUID() { return userID; }
|
||||
u128 getUID128(){ return uID128; }
|
||||
u128 getUID128() { return uID128; }
|
||||
|
||||
//Returns username
|
||||
std::string getUsername() { return username; }
|
||||
|
|
@ -133,21 +133,24 @@ namespace data
|
|||
};
|
||||
|
||||
//Adds title to blacklist
|
||||
void blacklistAdd(data::user& u, data::titledata& t);
|
||||
void blacklistAdd(data::titledata& t);
|
||||
//Adds title to favorite list
|
||||
void favoriteAdd(data::user& u, data::titledata& t);
|
||||
void favoriteRemove(data::user& u, data::titledata& t);
|
||||
void favoriteAdd(data::titledata& t);
|
||||
void favoriteRemove(data::titledata& t);
|
||||
|
||||
//User vector
|
||||
extern std::vector<icn> icons;
|
||||
extern std::vector<user> users;
|
||||
|
||||
//Stores current data we're using so I don't have to type so much. + Options and info
|
||||
extern data::titledata curData;
|
||||
extern data::user curUser;
|
||||
//Options and info
|
||||
extern int selUser, selData;
|
||||
extern SetLanguage sysLang;
|
||||
extern bool incDev, autoBack, ovrClk, holdDel, holdRest, holdOver, forceMount, accSysSave, sysSaveWrite, directFsCmd, skipUser;
|
||||
|
||||
//Inline shortcuts to current user and current title. I might need to think of another way.
|
||||
//Previous versions made full copies of vectors in memory, which i didn't like
|
||||
inline data::user& curUser(){ return data::users[data::selUser]; }
|
||||
inline data::titledata& curData(){ return curUser().titles[data::selData]; }
|
||||
}
|
||||
|
||||
#endif // DATA_H
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ namespace ui
|
|||
//needed here since it uses static menu
|
||||
void folderMenuPrepare(data::user& usr, data::titledata& dat);
|
||||
void advCopyMenuPrep();
|
||||
void advModePrep(const std::string& svDev, bool commitOnWrite);
|
||||
void advModePrep(const std::string& svDev, const FsSaveDataType& _type, bool commitOnWrite);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
45
src/data.cpp
45
src/data.cpp
|
|
@ -10,9 +10,6 @@
|
|||
#include "file.h"
|
||||
#include "util.h"
|
||||
|
||||
//Current data
|
||||
data::titledata data::curData;
|
||||
data::user data::curUser;
|
||||
int data::selUser = 0, data::selData = 0;
|
||||
|
||||
//Icon/User vectors
|
||||
|
|
@ -71,7 +68,7 @@ static int findIcnIndex(const uint64_t& titleID)
|
|||
|
||||
static bool blacklisted(const uint64_t& tid)
|
||||
{
|
||||
for(uint64_t bid : blacklist)
|
||||
for(uint64_t& bid : blacklist)
|
||||
if(tid == bid) return true;
|
||||
|
||||
return false;
|
||||
|
|
@ -79,7 +76,7 @@ static bool blacklisted(const uint64_t& tid)
|
|||
|
||||
static bool isFavorite(const uint64_t& tid)
|
||||
{
|
||||
for(uint64_t fid : favorites)
|
||||
for(uint64_t& fid : favorites)
|
||||
if(tid == fid) return true;
|
||||
|
||||
return false;
|
||||
|
|
@ -202,8 +199,6 @@ void data::init()
|
|||
setMakeLanguage(lang, &sysLang);
|
||||
|
||||
data::loadUsersTitles(false);
|
||||
|
||||
curUser = users[0];
|
||||
}
|
||||
|
||||
void data::exit()
|
||||
|
|
@ -378,56 +373,48 @@ void data::loadBlacklist()
|
|||
void data::saveBlackList()
|
||||
{
|
||||
FILE *bl = fopen(std::string(fs::getWorkDir() + "blacklist.txt").c_str(), "w");
|
||||
for(uint64_t id : blacklist)
|
||||
for(uint64_t& id : blacklist)
|
||||
fprintf(bl, "0x%016lX\n", id);
|
||||
|
||||
fclose(bl);
|
||||
}
|
||||
|
||||
void data::blacklistAdd(user& u, titledata& t)
|
||||
void data::blacklistAdd(titledata& t)
|
||||
{
|
||||
uint64_t tid = t.getID();
|
||||
for(data::user& _u : data::users)
|
||||
{
|
||||
for(unsigned i = 0; i < _u.titles.size(); i++)
|
||||
if(_u.titles[i].getID() == t.getID()) _u.titles.erase(_u.titles.begin() + i);
|
||||
if(_u.titles[i].getID() == tid) _u.titles.erase(_u.titles.begin() + i);
|
||||
}
|
||||
blacklist.push_back(t.getID());
|
||||
int uInd = getUserIndex(u.getUID());
|
||||
u = users[uInd];
|
||||
blacklist.push_back(tid);
|
||||
}
|
||||
|
||||
void data::favoriteAdd(data::user& u, titledata& t)
|
||||
void data::favoriteAdd(titledata& t)
|
||||
{
|
||||
uint64_t tid = t.getID();
|
||||
for(data::user& _u : data::users)
|
||||
{
|
||||
for(unsigned i = 0; i < _u.titles.size(); i++)
|
||||
if(_u.titles[i].getID() == t.getID()) _u.titles[i].setFav(true);
|
||||
if(_u.titles[i].getID() == tid) _u.titles[i].setFav(true);
|
||||
|
||||
std::sort(_u.titles.begin(), _u.titles.end(), sortTitles);
|
||||
}
|
||||
favorites.push_back(t.getID());
|
||||
|
||||
int uInd = getUserIndex(u.getUID());
|
||||
u = users[uInd];
|
||||
favorites.push_back(tid);
|
||||
}
|
||||
|
||||
void data::favoriteRemove(data::user& u, data::titledata& t)
|
||||
void data::favoriteRemove(data::titledata& t)
|
||||
{
|
||||
auto ind = std::find(favorites.begin(), favorites.end(), t.getID());
|
||||
if(ind == favorites.end())
|
||||
return;
|
||||
|
||||
uint64_t tid = t.getID();
|
||||
auto ind = std::find(favorites.begin(), favorites.end(), tid);
|
||||
favorites.erase(ind);
|
||||
for(data::user& _u : data::users)
|
||||
{
|
||||
for(unsigned i = 0; i < _u.titles.size(); i++)
|
||||
if(_u.titles[i].getID() == t.getID()) _u.titles[i].setFav(false);
|
||||
if(_u.titles[i].getID() == tid) _u.titles[i].setFav(false);
|
||||
|
||||
std::sort(_u.titles.begin(), _u.titles.end(), sortTitles);
|
||||
}
|
||||
|
||||
int uInd = getUserIndex(u.getUID());
|
||||
u = users[uInd];
|
||||
}
|
||||
|
||||
void data::loadCfg()
|
||||
|
|
@ -491,7 +478,7 @@ void data::loadFav()
|
|||
void data::saveFav()
|
||||
{
|
||||
FILE *fav = fopen(std::string(fs::getWorkDir() + "favorites.txt").c_str(), "w");
|
||||
for(uint64_t fid : favorites)
|
||||
for(uint64_t& fid : favorites)
|
||||
fprintf(fav, "0x%016lX\n", fid);
|
||||
|
||||
fclose(fav);
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@ void ui::init()
|
|||
|
||||
if(ui::textMode && data::skipUser)
|
||||
{
|
||||
ui::textTitlePrep(data::curUser);
|
||||
ui::textTitlePrep(data::curUser());
|
||||
mstate = TXT_TTL;
|
||||
}
|
||||
else if(ui::textMode)
|
||||
|
|
|
|||
|
|
@ -22,9 +22,11 @@ fs::dirList saveList(""), sdList("sdmc:/");
|
|||
|
||||
static bool commit = false;
|
||||
|
||||
static FsSaveDataType type = FsSaveDataType_System;
|
||||
|
||||
static inline bool sysSaveCheck()
|
||||
{
|
||||
return data::sysSaveWrite || data::curData.getType() != FsSaveDataType_System;
|
||||
return data::sysSaveWrite || type != FsSaveDataType_System;
|
||||
}
|
||||
|
||||
//Performs copy menu operations. To big to stuff into case IMO.
|
||||
|
|
@ -348,9 +350,10 @@ void ui::advCopyMenuPrep()
|
|||
copyMenu.addOpt(ui::advMenuStr[i]);
|
||||
}
|
||||
|
||||
void ui::advModePrep(const std::string& svDev, bool commitOnWrite)
|
||||
void ui::advModePrep(const std::string& svDev, const FsSaveDataType& _type, bool commitOnWrite)
|
||||
{
|
||||
commit = commitOnWrite;
|
||||
type = _type;
|
||||
saveMenu.setParams(30, 98, 602);
|
||||
sdMenu.setParams(648, 98, 602);
|
||||
copyMenu.setParams(472, 278, 304);
|
||||
|
|
|
|||
|
|
@ -28,11 +28,11 @@ void ui::createNewBackup(const uint64_t& held)
|
|||
std::string folder;
|
||||
|
||||
if(held & KEY_R)
|
||||
folder = data::curUser.getUsernameSafe() + " - " + util::getDateTime(util::DATE_FMT_YMD);
|
||||
folder = data::curUser().getUsernameSafe() + " - " + util::getDateTime(util::DATE_FMT_YMD);
|
||||
else if(held & KEY_L)
|
||||
folder = data::curUser.getUsernameSafe() + " - " + util::getDateTime(util::DATE_FMT_YDM);
|
||||
folder = data::curUser().getUsernameSafe() + " - " + util::getDateTime(util::DATE_FMT_YDM);
|
||||
else if(held & KEY_ZL)
|
||||
folder = data::curUser.getUsernameSafe() + " - " + util::getDateTime(util::DATE_FMT_HOYSTE);
|
||||
folder = data::curUser().getUsernameSafe() + " - " + util::getDateTime(util::DATE_FMT_HOYSTE);
|
||||
else
|
||||
{
|
||||
const std::string dict[] =
|
||||
|
|
@ -42,31 +42,31 @@ void ui::createNewBackup(const uint64_t& held)
|
|||
util::getDateTime(util::DATE_FMT_HOYSTE),
|
||||
util::getDateTime(util::DATE_FMT_JHK),
|
||||
util::getDateTime(util::DATE_FMT_ASC),
|
||||
data::curUser.getUsernameSafe().c_str(),
|
||||
data::curData.getTitle().length() < 24 ? data::curData.getTitleSafe() : util::generateAbbrev(data::curData)
|
||||
data::curUser().getUsernameSafe(),
|
||||
data::curData().getTitleSafe().length() < 24 ? data::curData().getTitleSafe() : util::generateAbbrev(data::curData())
|
||||
};
|
||||
folder = util::getStringInput("", "Enter a folder name", 64, 7, dict);
|
||||
}
|
||||
|
||||
if(!folder.empty())
|
||||
{
|
||||
std::string path = data::curData.getPath() + "/" + folder;
|
||||
std::string path = data::curData().getPath() + "/" + folder;
|
||||
mkdir(path.c_str(), 777);
|
||||
path += "/";
|
||||
fs::copyDirToDir("sv:/", path);
|
||||
|
||||
folderMenuPrepare(data::curUser, data::curData);
|
||||
folderMenuPrepare(data::curUser(), data::curData());
|
||||
}
|
||||
}
|
||||
|
||||
void ui::overwriteBackup(unsigned ind)
|
||||
{
|
||||
fs::dirList list(data::curData.getPath());
|
||||
fs::dirList list(data::curData().getPath());
|
||||
|
||||
std::string folderName = list.getItem(ind);
|
||||
if(confirm(data::holdOver, ui::confOverwrite.c_str(), folderName.c_str()))
|
||||
{
|
||||
std::string toPath = data::curData.getPath() + folderName + "/";
|
||||
std::string toPath = data::curData().getPath() + folderName + "/";
|
||||
//Delete and recreate
|
||||
fs::delDir(toPath);
|
||||
mkdir(toPath.c_str(), 777);
|
||||
|
|
@ -79,16 +79,16 @@ void ui::overwriteBackup(unsigned ind)
|
|||
|
||||
void ui::restoreBackup(unsigned ind)
|
||||
{
|
||||
if((data::curData.getType() != FsSaveDataType_System || data::sysSaveWrite) && folderMenu.getSelected() > 0)
|
||||
if((data::curData().getType() != FsSaveDataType_System || data::sysSaveWrite) && folderMenu.getSelected() > 0)
|
||||
{
|
||||
fs::dirList list(data::curData.getPath());
|
||||
fs::dirList list(data::curData().getPath());
|
||||
|
||||
std::string folderName = list.getItem(ind);
|
||||
if(confirm(data::holdRest, ui::confRestore.c_str(), folderName.c_str()))
|
||||
{
|
||||
if(data::autoBack)
|
||||
{
|
||||
std::string autoFolder = data::curData.getPath() + "/AUTO - " + data::curUser.getUsernameSafe() + " - " + util::getDateTime(util::DATE_FMT_ASC);
|
||||
std::string autoFolder = data::curData().getPath() + "/AUTO - " + data::curUser().getUsernameSafe() + " - " + util::getDateTime(util::DATE_FMT_ASC);
|
||||
mkdir(autoFolder.c_str(), 777);
|
||||
autoFolder += "/";
|
||||
|
||||
|
|
@ -96,7 +96,7 @@ void ui::restoreBackup(unsigned ind)
|
|||
fs::copyDirToDir(root, autoFolder);
|
||||
}
|
||||
|
||||
std::string fromPath = data::curData.getPath() + folderName + "/";
|
||||
std::string fromPath = data::curData().getPath() + folderName + "/";
|
||||
std::string root = "sv:/";
|
||||
|
||||
fs::delDir(root);
|
||||
|
|
@ -106,23 +106,23 @@ void ui::restoreBackup(unsigned ind)
|
|||
|
||||
//Rescan init folder menu if autobak to show changes
|
||||
if(data::autoBack)
|
||||
folderMenuPrepare(data::curUser, data::curData);
|
||||
folderMenuPrepare(data::curUser(), data::curData());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ui::deleteBackup(unsigned ind)
|
||||
{
|
||||
fs::dirList list(data::curData.getPath());
|
||||
fs::dirList list(data::curData().getPath());
|
||||
|
||||
std::string folderName = list.getItem(folderMenu.getSelected() - 1);
|
||||
if(ui::confirmDelete(folderName))
|
||||
{
|
||||
std::string delPath = data::curData.getPath() + folderName + "/";
|
||||
std::string delPath = data::curData().getPath() + folderName + "/";
|
||||
fs::delDir(delPath);
|
||||
}
|
||||
|
||||
folderMenuPrepare(data::curUser, data::curData);
|
||||
folderMenuPrepare(data::curUser(), data::curData());
|
||||
}
|
||||
|
||||
void ui::updateFolderMenu(const uint64_t& down, const uint64_t& held)
|
||||
|
|
@ -132,7 +132,7 @@ void ui::updateFolderMenu(const uint64_t& down, const uint64_t& held)
|
|||
//Draw folder menu
|
||||
folderMenu.draw(ui::txtCont);
|
||||
|
||||
data::curData.icon.draw(96, 98);
|
||||
data::curData().icon.draw(96, 98);
|
||||
drawTextWrap(folderMenuInfo.c_str(), frameBuffer, ui::shared, 60, 370, 16, ui::txtCont, 360);
|
||||
|
||||
|
||||
|
|
@ -149,10 +149,10 @@ void ui::updateFolderMenu(const uint64_t& down, const uint64_t& held)
|
|||
ui::deleteBackup(folderMenu.getSelected() - 1);
|
||||
else if(down & KEY_MINUS)
|
||||
{
|
||||
advModePrep("sv:/", true);
|
||||
advModePrep("sv:/", data::curData().getType(), true);
|
||||
mstate = ADV_MDE;
|
||||
}
|
||||
else if(down & KEY_ZR && data::curData.getType() != FsSaveDataType_System && confirm(true, ui::confEraseFolder.c_str(), data::curData.getTitle().c_str()))
|
||||
else if(down & KEY_ZR && data::curData().getType() != FsSaveDataType_System && confirm(true, ui::confEraseFolder.c_str(), data::curData().getTitle().c_str()))
|
||||
{
|
||||
fs::delDir("sv:/");
|
||||
fsdevCommitDevice("sv");
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "data.h"
|
||||
#include "ui.h"
|
||||
#include "uiupdate.h"
|
||||
#include "file.h"
|
||||
|
|
@ -36,8 +37,8 @@ void ui::updateTitleMenu(const uint64_t& down, const uint64_t& held)
|
|||
unsigned x = 70, y = 98;
|
||||
|
||||
unsigned endTitle = start + 32;
|
||||
if(start + 32 > (int)data::curUser.titles.size())
|
||||
endTitle = data::curUser.titles.size();
|
||||
if(start + 32 > (int)data::curUser().titles.size())
|
||||
endTitle = data::curUser().titles.size();
|
||||
|
||||
//draw Rect so it's always behind icons
|
||||
drawBoundBox(selRectX, selRectY, 140, 140, clrShft);
|
||||
|
|
@ -55,7 +56,7 @@ void ui::updateTitleMenu(const uint64_t& down, const uint64_t& held)
|
|||
selRectX = tX - 6;
|
||||
selRectY = y - 6;
|
||||
|
||||
std::string title = data::curUser.titles[data::selData].getTitle();
|
||||
std::string title = data::curData().getTitle();
|
||||
unsigned titleWidth = textGetWidth(title.c_str(), ui::shared, 18);
|
||||
int rectWidth = titleWidth + 32, rectX = (tX + 64) - (rectWidth / 2);
|
||||
if(rectX < 16)
|
||||
|
|
@ -67,16 +68,16 @@ void ui::updateTitleMenu(const uint64_t& down, const uint64_t& held)
|
|||
drawText(title.c_str(), frameBuffer, ui::shared, rectX + 16, y - 40, 18, ui::txtDiag);
|
||||
}
|
||||
|
||||
if(data::curUser.titles[i].getFav())
|
||||
data::curUser.titles[i].icon.drawFavHalf(tX, y);
|
||||
if(data::curUser().titles[i].getFav())
|
||||
data::curUser().titles[i].icon.drawFavHalf(tX, y);
|
||||
else
|
||||
data::curUser.titles[i].icon.drawHalf(tX, y);
|
||||
data::curUser().titles[i].icon.drawHalf(tX, y);
|
||||
}
|
||||
}
|
||||
|
||||
if(down & KEY_RIGHT)
|
||||
{
|
||||
if(data::selData < (int)data::curUser.titles.size() - 1)
|
||||
if(data::selData < (int)data::curUser().titles.size() - 1)
|
||||
data::selData++;
|
||||
|
||||
if(data::selData >= (int)start + 32)
|
||||
|
|
@ -102,30 +103,26 @@ void ui::updateTitleMenu(const uint64_t& down, const uint64_t& held)
|
|||
else if(down & KEY_DOWN)
|
||||
{
|
||||
data::selData += 8;
|
||||
if(data::selData > (int)data::curUser.titles.size() - 1)
|
||||
data::selData = data::curUser.titles.size() - 1;
|
||||
if(data::selData > (int)data::curUser().titles.size() - 1)
|
||||
data::selData = data::curUser().titles.size() - 1;
|
||||
|
||||
if(data::selData - start >= 32)
|
||||
start += 8;
|
||||
}
|
||||
else if(down & KEY_A)
|
||||
else if(down & KEY_A && fs::mountSave(data::curUser(), data::curData()))
|
||||
{
|
||||
data::curData = data::curUser.titles[data::selData];
|
||||
if(fs::mountSave(data::curUser, data::curData))
|
||||
{
|
||||
folderMenuPrepare(data::curUser, data::curData);
|
||||
//Wanna change this sometime
|
||||
ui::folderMenuInfo = util::getInfoString(data::curUser, data::curData);
|
||||
folderMenuPrepare(data::curUser(), data::curData());
|
||||
//Wanna change this sometime
|
||||
ui::folderMenuInfo = util::getInfoString(data::curUser(), data::curData());
|
||||
|
||||
mstate = FLD_SEL;
|
||||
}
|
||||
mstate = FLD_SEL;
|
||||
}
|
||||
else if(down & KEY_Y)
|
||||
fs::dumpAllUserSaves(data::curUser);
|
||||
fs::dumpAllUserSaves(data::curUser());
|
||||
else if(down & KEY_MINUS)
|
||||
{
|
||||
if(ui::confirm(false, ui::confBlacklist.c_str(), data::curUser.titles[data::selData].getTitle().c_str()))
|
||||
data::blacklistAdd(data::curUser, data::curUser.titles[data::selData]);
|
||||
if(ui::confirm(false, ui::confBlacklist.c_str(), data::curUser().titles[data::selData].getTitle().c_str()))
|
||||
data::blacklistAdd(data::curData());
|
||||
}
|
||||
else if(down & KEY_B)
|
||||
{
|
||||
|
|
@ -144,9 +141,9 @@ void ui::updateTitleMenu(const uint64_t& down, const uint64_t& held)
|
|||
start = 0;
|
||||
data::selData = 0;
|
||||
selRectX = 64, selRectY = 90;
|
||||
data::curUser = data::users[data::selUser];
|
||||
data::curUser() = data::users[data::selUser];
|
||||
|
||||
ui::showPopup(data::curUser.getUsername(), POP_FRAME_DEFAULT);
|
||||
ui::showPopup(data::curUser().getUsername(), POP_FRAME_DEFAULT);
|
||||
}
|
||||
else if(down & KEY_R)
|
||||
{
|
||||
|
|
@ -156,29 +153,28 @@ void ui::updateTitleMenu(const uint64_t& down, const uint64_t& held)
|
|||
start = 0;
|
||||
data::selData = 0;
|
||||
selRectX = 64, selRectY = 90;
|
||||
data::curUser = data::users[data::selUser];
|
||||
data::curUser() = data::users[data::selUser];
|
||||
|
||||
ui::showPopup(data::curUser.getUsername(), POP_FRAME_DEFAULT);
|
||||
ui::showPopup(data::curUser().getUsername(), POP_FRAME_DEFAULT);
|
||||
}
|
||||
else if(down & KEY_ZR)
|
||||
{
|
||||
data::titledata tempData = data::curUser.titles[data::selData];
|
||||
data::titledata tempData = data::curUser().titles[data::selData];
|
||||
if(tempData.getType() == FsSaveDataType_System)
|
||||
ui::showMessage("*NO*", "Deleting system save archives is disabled.");
|
||||
else if(confirm(true, ui::confEraseNand.c_str(), tempData.getTitle().c_str()))
|
||||
{
|
||||
fsDeleteSaveDataFileSystemBySaveDataSpaceId(FsSaveDataSpaceId_User, tempData.getSaveID());
|
||||
data::loadUsersTitles(false);
|
||||
data::curUser = data::users[data::selUser];
|
||||
data::selData = 0;
|
||||
}
|
||||
}
|
||||
else if(down & KEY_X)
|
||||
{
|
||||
if(!data::curUser.titles[data::selData].getFav())
|
||||
data::favoriteAdd(data::curUser, data::curUser.titles[data::selData]);
|
||||
if(!data::curData().getFav())
|
||||
data::favoriteAdd(data::curData());
|
||||
else
|
||||
data::favoriteRemove(data::curUser, data::curUser.titles[data::selData]);
|
||||
data::favoriteRemove(data::curData());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -87,8 +87,8 @@ void ui::textUserMenuUpdate(const uint64_t& down, const uint64_t& held)
|
|||
{
|
||||
if(data::users[userMenu.getSelected()].titles.size() > 0)
|
||||
{
|
||||
data::curUser = data::users[userMenu.getSelected()];
|
||||
textTitlePrep(data::curUser);
|
||||
data::selUser = folderMenu.getSelected();
|
||||
textTitlePrep(data::curUser());
|
||||
mstate = TXT_TTL;
|
||||
}
|
||||
else
|
||||
|
|
@ -121,58 +121,58 @@ void ui::textTitleMenuUpdate(const uint64_t& down, const uint64_t& held)
|
|||
|
||||
if(down & KEY_A)
|
||||
{
|
||||
data::curData = data::curUser.titles[titleMenu.getSelected()];
|
||||
|
||||
if(fs::mountSave(data::curUser, data::curData))
|
||||
data::selData = titleMenu.getSelected();
|
||||
if(fs::mountSave(data::curUser(), data::curData()))
|
||||
{
|
||||
textFolderPrep(data::curUser, data::curData);
|
||||
textFolderPrep(data::curUser(), data::curData());
|
||||
mstate = TXT_FLD;
|
||||
}
|
||||
}
|
||||
else if(down & KEY_Y)
|
||||
{
|
||||
fs::dumpAllUserSaves(data::curUser);
|
||||
fs::dumpAllUserSaves(data::curUser());
|
||||
}
|
||||
else if(down & KEY_MINUS)
|
||||
{
|
||||
if(ui::confirm(false, ui::confBlacklist.c_str(), data::curUser.titles[titleMenu.getSelected()].getTitle().c_str()))
|
||||
data::blacklistAdd(data::curUser, data::curUser.titles[titleMenu.getSelected()]);
|
||||
data::selData = titleMenu.getSelected();
|
||||
if(ui::confirm(false, ui::confBlacklist.c_str(), data::curData().getTitle().c_str()))
|
||||
data::blacklistAdd(data::curData());
|
||||
|
||||
textTitlePrep(data::curUser);
|
||||
textTitlePrep(data::curUser());
|
||||
}
|
||||
else if(down & KEY_L)
|
||||
{
|
||||
if(--data::selUser < 0)
|
||||
data::selUser = data::users.size() - 1;
|
||||
|
||||
data::curUser = data::users[data::selUser];
|
||||
textTitlePrep(data::curUser);
|
||||
data::curUser() = data::users[data::selUser];
|
||||
textTitlePrep(data::curUser());
|
||||
|
||||
ui::showPopup(data::curUser.getUsername(), POP_FRAME_DEFAULT);
|
||||
ui::showPopup(data::curUser().getUsername(), POP_FRAME_DEFAULT);
|
||||
}
|
||||
else if(down & KEY_R)
|
||||
{
|
||||
if(++data::selUser > (int)data::users.size() - 1)
|
||||
data::selUser = 0;
|
||||
|
||||
data::curUser = data::users[data::selUser];
|
||||
textTitlePrep(data::curUser);
|
||||
data::curUser() = data::users[data::selUser];
|
||||
textTitlePrep(data::curUser());
|
||||
|
||||
ui::showPopup(data::curUser.getUsername(), POP_FRAME_DEFAULT);
|
||||
ui::showPopup(data::curUser().getUsername(), POP_FRAME_DEFAULT);
|
||||
}
|
||||
else if(down & KEY_X)
|
||||
{
|
||||
unsigned sel = titleMenu.getSelected();
|
||||
if(!data::curUser.titles[sel].getFav())
|
||||
data::favoriteAdd(data::curUser, data::curUser.titles[sel]);
|
||||
data::selData = titleMenu.getSelected();
|
||||
if(!data::curData().getFav())
|
||||
data::favoriteAdd(data::curData());
|
||||
else
|
||||
data::favoriteRemove(data::curUser, data::curUser.titles[sel]);
|
||||
data::favoriteRemove(data::curData());
|
||||
|
||||
textTitlePrep(data::curUser);
|
||||
textTitlePrep(data::curUser());
|
||||
}
|
||||
else if(down & KEY_ZR)
|
||||
{
|
||||
data::titledata tempData = data::curUser.titles[titleMenu.getSelected()];
|
||||
data::titledata tempData = data::curUser().titles[titleMenu.getSelected()];
|
||||
if(tempData.getType() == FsSaveDataType_System)
|
||||
ui::showMessage("*NO*", "Deleting system save archives is disabled.");
|
||||
else if(confirm(true, ui::confEraseNand.c_str(), tempData.getTitle().c_str()))
|
||||
|
|
@ -180,8 +180,8 @@ void ui::textTitleMenuUpdate(const uint64_t& down, const uint64_t& held)
|
|||
fsDeleteSaveDataFileSystemBySaveDataSpaceId(FsSaveDataSpaceId_User, tempData.getSaveID());
|
||||
|
||||
data::loadUsersTitles(false);
|
||||
data::curUser = data::users[data::selUser];
|
||||
ui::textTitlePrep(data::curUser);
|
||||
data::curUser() = data::users[data::selUser];
|
||||
ui::textTitlePrep(data::curUser());
|
||||
}
|
||||
}
|
||||
else if(down & KEY_B)
|
||||
|
|
@ -207,10 +207,10 @@ void ui::textFolderMenuUpdate(const uint64_t& down, const uint64_t& held)
|
|||
deleteBackup(folderMenu.getSelected() - 1);
|
||||
else if(down & KEY_MINUS)
|
||||
{
|
||||
advModePrep("sv:/", true);
|
||||
advModePrep("sv:/", data::curData().getType(), true);
|
||||
mstate = ADV_MDE;
|
||||
}
|
||||
else if(down & KEY_ZR && data::curData.getType() != FsSaveDataType_System && confirm(true, ui::confEraseFolder.c_str(), data::curData.getTitle().c_str()))
|
||||
else if(down & KEY_ZR && data::curData().getType() != FsSaveDataType_System && confirm(true, ui::confEraseFolder.c_str(), data::curData().getTitle().c_str()))
|
||||
{
|
||||
fs::delDir("sv:/");
|
||||
fsdevCommitDevice("sv");
|
||||
|
|
@ -238,12 +238,12 @@ void ui::updateExMenu(const uint64_t& down, const uint64_t& held)
|
|||
{
|
||||
fsdevUnmountDevice("sv");
|
||||
FsFileSystem sv;
|
||||
data::curData.setType(FsSaveDataType_System);
|
||||
data::curData().setType(FsSaveDataType_System);
|
||||
switch(exMenu.getSelected())
|
||||
{
|
||||
case 0:
|
||||
data::curData.setType(FsSaveDataType_Bcat);
|
||||
advModePrep("sdmc:/", false);
|
||||
data::curData().setType(FsSaveDataType_Bcat);
|
||||
advModePrep("sdmc:/", data::curData().getType(), false);
|
||||
mstate = ADV_MDE;
|
||||
prevState = EX_MNU;
|
||||
break;
|
||||
|
|
@ -253,7 +253,7 @@ void ui::updateExMenu(const uint64_t& down, const uint64_t& held)
|
|||
fsOpenBisFileSystem(&sv, FsBisPartitionId_CalibrationFile, "");
|
||||
fsdevMountDevice("prodInfo-f", sv);
|
||||
|
||||
advModePrep("profInfo-f:/", false);
|
||||
advModePrep("profInfo-f:/", FsSaveDataType_System, false);
|
||||
mstate = ADV_MDE;
|
||||
prevState = EX_MNU;
|
||||
break;
|
||||
|
|
@ -262,7 +262,7 @@ void ui::updateExMenu(const uint64_t& down, const uint64_t& held)
|
|||
fsOpenBisFileSystem(&sv, FsBisPartitionId_SafeMode, "");
|
||||
fsdevMountDevice("safe", sv);
|
||||
|
||||
advModePrep("safe:/", false);
|
||||
advModePrep("safe:/", FsSaveDataType_System, false);
|
||||
mstate = ADV_MDE;
|
||||
prevState = EX_MNU;
|
||||
break;
|
||||
|
|
@ -271,7 +271,7 @@ void ui::updateExMenu(const uint64_t& down, const uint64_t& held)
|
|||
fsOpenBisFileSystem(&sv, FsBisPartitionId_System, "");
|
||||
fsdevMountDevice("sys", sv);
|
||||
|
||||
advModePrep("sys:/", false);
|
||||
advModePrep("sys:/", FsSaveDataType_System, false);
|
||||
mstate = ADV_MDE;
|
||||
prevState = EX_MNU;
|
||||
break;
|
||||
|
|
@ -280,7 +280,7 @@ void ui::updateExMenu(const uint64_t& down, const uint64_t& held)
|
|||
fsOpenBisFileSystem(&sv, FsBisPartitionId_User, "");
|
||||
fsdevMountDevice("user", sv);
|
||||
|
||||
advModePrep("user:/", false);
|
||||
advModePrep("user:/", FsSaveDataType_System, false);
|
||||
mstate = ADV_MDE;
|
||||
prevState = EX_MNU;
|
||||
break;
|
||||
|
|
@ -326,8 +326,8 @@ void ui::updateExMenu(const uint64_t& down, const uint64_t& held)
|
|||
if(R_SUCCEEDED(fsOpen_SystemSaveData(&sv, FsSaveDataSpaceId_System, mountID, (AccountUid) {0})))
|
||||
{
|
||||
fsdevMountDevice("sv", sv);
|
||||
advModePrep("sv:/", true);
|
||||
data::curData.setType(FsSaveDataType_SystemBcat);
|
||||
advModePrep("sv:/", data::curData().getType(), true);
|
||||
data::curData().setType(FsSaveDataType_SystemBcat);
|
||||
prevState = EX_MNU;
|
||||
mstate = ADV_MDE;
|
||||
}
|
||||
|
|
@ -345,8 +345,8 @@ void ui::updateExMenu(const uint64_t& down, const uint64_t& held)
|
|||
if(R_SUCCEEDED(util::fsOpenDataFileSystemByCurrentProcess(&tromfs)))
|
||||
{
|
||||
fsdevMountDevice("tromfs", tromfs);
|
||||
advModePrep("tromfs:/", false);
|
||||
data::curData.setType(FsSaveDataType_System);
|
||||
advModePrep("tromfs:/", FsSaveDataType_Account, false);
|
||||
data::curData().setType(FsSaveDataType_System);
|
||||
ui::mstate = ADV_MDE;
|
||||
ui::prevState = EX_MNU;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
#include "uiupdate.h"
|
||||
#include "file.h"
|
||||
|
||||
|
||||
void ui::updateUserMenu(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
//Static so they don't get reset every loop
|
||||
|
|
@ -83,10 +82,7 @@ void ui::updateUserMenu(const uint64_t& down, const uint64_t& held)
|
|||
else if(down & KEY_A)
|
||||
{
|
||||
if(data::users[data::selUser].titles.size() > 0)
|
||||
{
|
||||
data::curUser = data::users[data::selUser];
|
||||
mstate = TTL_SEL;
|
||||
}
|
||||
else
|
||||
ui::showPopup("No Saves available for " + data::users[data::selUser].getUsername() + ".", POP_FRAME_DEFAULT);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user