mirror of
https://github.com/J-D-K/JKSV.git
synced 2026-09-07 18:16:00 -05:00
Handle all save data types
This commit is contained in:
2
Makefile
2
Makefile
@@ -38,7 +38,7 @@ INCLUDES := inc
|
||||
EXEFS_SRC := exefs_src
|
||||
APP_TITLE := JKSV
|
||||
APP_AUTHOR := JK
|
||||
APP_VERSION := 05.24.2020
|
||||
APP_VERSION := 05.25.2020
|
||||
ROMFS := romfs
|
||||
ICON := romfs/icon.jpg
|
||||
|
||||
|
||||
11
inc/data.h
11
inc/data.h
@@ -8,6 +8,9 @@
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#define curUser users[data::selUser]
|
||||
#define curData users[data::selUser].titles[data::selData]
|
||||
|
||||
namespace data
|
||||
{
|
||||
extern bool forceMount;
|
||||
@@ -135,8 +138,7 @@ namespace data
|
||||
//Adds title to blacklist
|
||||
void blacklistAdd(data::titledata& t);
|
||||
//Adds title to favorite list
|
||||
void favoriteAdd(data::titledata& t);
|
||||
void favoriteRemove(data::titledata& t);
|
||||
void favoriteTitle(data::titledata& t);
|
||||
|
||||
//User vector
|
||||
extern std::vector<icn> icons;
|
||||
@@ -146,11 +148,6 @@ namespace data
|
||||
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
|
||||
|
||||
@@ -67,6 +67,7 @@ namespace fs
|
||||
class dirList
|
||||
{
|
||||
public:
|
||||
dirList() = default;
|
||||
dirList(const std::string& _path);
|
||||
void reassign(const std::string& _path);
|
||||
void rescan();
|
||||
|
||||
79
src/data.cpp
79
src/data.cpp
@@ -23,6 +23,9 @@ SetLanguage data::sysLang;
|
||||
bool data::incDev = false, data::autoBack = true, data::ovrClk = false, data::holdDel = true, data::holdRest = true, data::holdOver = true;
|
||||
bool data::forceMount = true, data::accSysSave = false, data::sysSaveWrite = false, data::directFsCmd = false, data::skipUser = false;
|
||||
|
||||
//For other save types
|
||||
static bool sysBCATPushed = false, cachePushed = false, tempPushed = false;
|
||||
|
||||
static std::vector<uint64_t> blacklist;
|
||||
static std::vector<uint64_t> favorites;
|
||||
|
||||
@@ -118,13 +121,17 @@ bool data::loadUsersTitles(bool clearUsers)
|
||||
for(data::user& u : data::users)
|
||||
u.titles.clear();
|
||||
if(clearUsers)
|
||||
{
|
||||
data::users.clear();
|
||||
sysBCATPushed = false;
|
||||
cachePushed = false;
|
||||
tempPushed = false;
|
||||
}
|
||||
|
||||
//Push system users
|
||||
users.push_back(data::user(util::u128ToAccountUID(3), "Device Saves", createDeviceIcon()));
|
||||
users.push_back(data::user(util::u128ToAccountUID(2), "BCAT"));
|
||||
users.push_back(data::user(util::u128ToAccountUID(1), "System"));
|
||||
//users.push_back(data::user(util::u128ToAccountUID(4), "Sys. BCAT"));
|
||||
users.emplace_back(util::u128ToAccountUID(3), "Device Saves", createDeviceIcon());
|
||||
users.emplace_back(util::u128ToAccountUID(2), "BCAT");
|
||||
users.emplace_back(util::u128ToAccountUID(1), "System");
|
||||
|
||||
NsApplicationControlData *dat = new NsApplicationControlData;
|
||||
while(R_SUCCEEDED(fsSaveDataInfoReaderRead(&it, &info, 1, &total)) && total != 0)
|
||||
@@ -145,7 +152,30 @@ bool data::loadUsersTitles(bool clearUsers)
|
||||
break;
|
||||
|
||||
case FsSaveDataType_SystemBcat:
|
||||
//info.uid = util::u128ToAccountUID(4);
|
||||
info.uid = util::u128ToAccountUID(4);
|
||||
if(!sysBCATPushed)
|
||||
{
|
||||
sysBCATPushed = true;
|
||||
users.emplace_back(util::u128ToAccountUID(4), "Sys. BCAT");
|
||||
}
|
||||
break;
|
||||
|
||||
case FsSaveDataType_Cache:
|
||||
info.uid = util::u128ToAccountUID(5);
|
||||
if(!cachePushed)
|
||||
{
|
||||
cachePushed = true;
|
||||
users.emplace_back(util::u128ToAccountUID(5), "Cache");
|
||||
}
|
||||
break;
|
||||
|
||||
case FsSaveDataType_Temporary:
|
||||
info.uid = util::u128ToAccountUID(6);
|
||||
if(!tempPushed)
|
||||
{
|
||||
tempPushed = true;
|
||||
users.emplace_back(util::u128ToAccountUID(6), "Temp");
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -155,7 +185,7 @@ bool data::loadUsersTitles(bool clearUsers)
|
||||
int u = getUserIndex(info.uid);
|
||||
if(u == -1)
|
||||
{
|
||||
users.insert(users.end() - 3, data::user(info.uid, ""));
|
||||
users.emplace(users.end() - 3, info.uid, "");
|
||||
u = getUserIndex(info.uid);
|
||||
}
|
||||
|
||||
@@ -346,6 +376,8 @@ data::user::user(const AccountUid& _id, const std::string& _backupName)
|
||||
userSafe = _backupName.empty() ? getIDStr((uint64_t)uID128) : _backupName;
|
||||
userIcon = util::createIconGeneric(_backupName.c_str());
|
||||
}
|
||||
|
||||
titles.reserve(64);
|
||||
}
|
||||
|
||||
data::user::user(const AccountUid& _id, const std::string& _backupName, tex *img) : user(_id, _backupName)
|
||||
@@ -390,30 +422,31 @@ void data::blacklistAdd(titledata& t)
|
||||
blacklist.push_back(tid);
|
||||
}
|
||||
|
||||
void data::favoriteAdd(titledata& t)
|
||||
void data::favoriteTitle(titledata& t)
|
||||
{
|
||||
uint64_t tid = t.getID();
|
||||
for(data::user& _u : data::users)
|
||||
if(!t.getFav())
|
||||
{
|
||||
for(unsigned i = 0; i < _u.titles.size(); i++)
|
||||
if(_u.titles[i].getID() == tid) _u.titles[i].setFav(true);
|
||||
for(data::user& _u : data::users)
|
||||
{
|
||||
for(unsigned i = 0; i < _u.titles.size(); i++)
|
||||
if(_u.titles[i].getID() == tid) _u.titles[i].setFav(true);
|
||||
|
||||
std::sort(_u.titles.begin(), _u.titles.end(), sortTitles);
|
||||
std::sort(_u.titles.begin(), _u.titles.end(), sortTitles);
|
||||
}
|
||||
favorites.push_back(tid);
|
||||
}
|
||||
favorites.push_back(tid);
|
||||
}
|
||||
|
||||
void data::favoriteRemove(data::titledata& t)
|
||||
{
|
||||
uint64_t tid = t.getID();
|
||||
auto ind = std::find(favorites.begin(), favorites.end(), tid);
|
||||
favorites.erase(ind);
|
||||
for(data::user& _u : data::users)
|
||||
else
|
||||
{
|
||||
for(unsigned i = 0; i < _u.titles.size(); i++)
|
||||
if(_u.titles[i].getID() == tid) _u.titles[i].setFav(false);
|
||||
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() == tid) _u.titles[i].setFav(false);
|
||||
|
||||
std::sort(_u.titles.begin(), _u.titles.end(), sortTitles);
|
||||
std::sort(_u.titles.begin(), _u.titles.end(), sortTitles);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include "util.h"
|
||||
#include "file.h"
|
||||
|
||||
#define VER_STRING "v. 05.24.2020"
|
||||
#define VER_STRING "v. 05.25.2020"
|
||||
|
||||
//text mode
|
||||
bool ui::textMode = false;
|
||||
@@ -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)
|
||||
|
||||
@@ -18,7 +18,7 @@ static std::string savePath, sdPath, dev;
|
||||
static int advMenuCtrl, advPrev;
|
||||
|
||||
//Dir listings
|
||||
fs::dirList saveList(""), sdList("sdmc:/");
|
||||
fs::dirList saveList, sdList;
|
||||
|
||||
static bool commit = false;
|
||||
|
||||
|
||||
@@ -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(),
|
||||
data::curData().getTitleSafe().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:/", data::curData().getType(), 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");
|
||||
|
||||
@@ -37,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);
|
||||
@@ -56,7 +56,7 @@ void ui::updateTitleMenu(const uint64_t& down, const uint64_t& held)
|
||||
selRectX = tX - 6;
|
||||
selRectY = y - 6;
|
||||
|
||||
std::string title = data::curData().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)
|
||||
@@ -68,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)
|
||||
@@ -103,26 +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 && fs::mountSave(data::curUser(), data::curData()))
|
||||
else if(down & KEY_A && fs::mountSave(data::curUser, data::curData))
|
||||
{
|
||||
folderMenuPrepare(data::curUser(), data::curData());
|
||||
folderMenuPrepare(data::curUser, data::curData);
|
||||
//Wanna change this sometime
|
||||
ui::folderMenuInfo = util::getInfoString(data::curUser(), data::curData());
|
||||
ui::folderMenuInfo = util::getInfoString(data::curUser, data::curData);
|
||||
|
||||
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::curData());
|
||||
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)
|
||||
{
|
||||
@@ -141,9 +141,7 @@ 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];
|
||||
|
||||
ui::showPopup(data::curUser().getUsername(), POP_FRAME_DEFAULT);
|
||||
ui::showPopup(data::curUser.getUsername(), POP_FRAME_DEFAULT);
|
||||
}
|
||||
else if(down & KEY_R)
|
||||
{
|
||||
@@ -153,13 +151,11 @@ 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];
|
||||
|
||||
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()))
|
||||
@@ -170,11 +166,6 @@ void ui::updateTitleMenu(const uint64_t& down, const uint64_t& held)
|
||||
}
|
||||
}
|
||||
else if(down & KEY_X)
|
||||
{
|
||||
if(!data::curData().getFav())
|
||||
data::favoriteAdd(data::curData());
|
||||
else
|
||||
data::favoriteRemove(data::curData());
|
||||
}
|
||||
data::favoriteTitle(data::curData);
|
||||
}
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ void ui::textUserMenuUpdate(const uint64_t& down, const uint64_t& held)
|
||||
if(data::users[userMenu.getSelected()].titles.size() > 0)
|
||||
{
|
||||
data::selUser = userMenu.getSelected();
|
||||
textTitlePrep(data::curUser());
|
||||
textTitlePrep(data::curUser);
|
||||
mstate = TXT_TTL;
|
||||
}
|
||||
else
|
||||
@@ -122,66 +122,54 @@ void ui::textTitleMenuUpdate(const uint64_t& down, const uint64_t& held)
|
||||
if(down & KEY_A)
|
||||
{
|
||||
data::selData = titleMenu.getSelected();
|
||||
if(fs::mountSave(data::curUser(), data::curData()))
|
||||
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)
|
||||
{
|
||||
data::selData = titleMenu.getSelected();
|
||||
if(ui::confirm(false, ui::confBlacklist.c_str(), data::curData().getTitle().c_str()))
|
||||
data::blacklistAdd(data::curData());
|
||||
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());
|
||||
|
||||
ui::showPopup(data::curUser().getUsername(), POP_FRAME_DEFAULT);
|
||||
textTitlePrep(data::curUser);
|
||||
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());
|
||||
|
||||
ui::showPopup(data::curUser().getUsername(), POP_FRAME_DEFAULT);
|
||||
textTitlePrep(data::curUser);
|
||||
ui::showPopup(data::curUser.getUsername(), POP_FRAME_DEFAULT);
|
||||
}
|
||||
else if(down & KEY_X)
|
||||
{
|
||||
data::selData = titleMenu.getSelected();
|
||||
if(!data::curData().getFav())
|
||||
data::favoriteAdd(data::curData());
|
||||
else
|
||||
data::favoriteRemove(data::curData());
|
||||
|
||||
textTitlePrep(data::curUser());
|
||||
data::favoriteTitle(data::curData);
|
||||
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()))
|
||||
{
|
||||
fsDeleteSaveDataFileSystemBySaveDataSpaceId(FsSaveDataSpaceId_User, tempData.getSaveID());
|
||||
|
||||
data::loadUsersTitles(false);
|
||||
data::curUser() = data::users[data::selUser];
|
||||
ui::textTitlePrep(data::curUser());
|
||||
ui::textTitlePrep(data::curUser);
|
||||
}
|
||||
}
|
||||
else if(down & KEY_B)
|
||||
@@ -207,10 +195,10 @@ void ui::textFolderMenuUpdate(const uint64_t& down, const uint64_t& held)
|
||||
deleteBackup(folderMenu.getSelected() - 1);
|
||||
else if(down & KEY_MINUS)
|
||||
{
|
||||
advModePrep("sv:/", data::curData().getType(), 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 +226,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:/", data::curData().getType(), false);
|
||||
data::curData.setType(FsSaveDataType_Bcat);
|
||||
advModePrep("sdmc:/", data::curData.getType(), false);
|
||||
mstate = ADV_MDE;
|
||||
prevState = EX_MNU;
|
||||
break;
|
||||
@@ -326,8 +314,7 @@ 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:/", data::curData().getType(), true);
|
||||
data::curData().setType(FsSaveDataType_SystemBcat);
|
||||
advModePrep("sv:/", data::curData.getType(), true);
|
||||
prevState = EX_MNU;
|
||||
mstate = ADV_MDE;
|
||||
}
|
||||
@@ -346,7 +333,6 @@ void ui::updateExMenu(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
fsdevMountDevice("tromfs", tromfs);
|
||||
advModePrep("tromfs:/", FsSaveDataType_Account, false);
|
||||
data::curData().setType(FsSaveDataType_System);
|
||||
ui::mstate = ADV_MDE;
|
||||
ui::prevState = EX_MNU;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ void ui::updateUserMenu(const uint64_t& down, const uint64_t& held)
|
||||
static uint8_t clrShft = 0;
|
||||
static bool clrAdd = true;
|
||||
|
||||
static unsigned selRectX = 364, selRectY = 160;
|
||||
static unsigned selRectX = 276, selRectY = 160;
|
||||
|
||||
if(clrAdd)
|
||||
{
|
||||
@@ -30,14 +30,14 @@ void ui::updateUserMenu(const uint64_t& down, const uint64_t& held)
|
||||
clrAdd = true;
|
||||
}
|
||||
|
||||
unsigned x = 368, y = 164;
|
||||
unsigned x = 280, y = 164;
|
||||
unsigned endUser = data::users.size();
|
||||
|
||||
drawBoundBox(selRectX, selRectY, 140, 140, clrShft);
|
||||
|
||||
for(unsigned i = start; i < endUser; y += 136)
|
||||
{
|
||||
unsigned endRow = i + 4;
|
||||
unsigned endRow = i + 5;
|
||||
for(unsigned tX = x; i < endRow; i++, tX += 144)
|
||||
{
|
||||
if(i == endUser)
|
||||
|
||||
Reference in New Issue
Block a user