mirror of
https://github.com/J-D-K/JKSV.git
synced 2026-10-02 14:17:03 -05:00
Add dev menu + dump all
This commit is contained in:
@@ -11,7 +11,8 @@ namespace sys
|
||||
void debugWrite(const std::string& out);
|
||||
|
||||
//Uh oh
|
||||
extern bool devMode;
|
||||
extern bool sysSave;
|
||||
extern bool devMenu;
|
||||
}
|
||||
|
||||
#endif // SYS_H
|
||||
|
||||
@@ -8,6 +8,9 @@ namespace util
|
||||
//Returns string with date + time
|
||||
std::string getDateTime();
|
||||
|
||||
//Creates user dir
|
||||
void makeUserDir(data::user& u);
|
||||
|
||||
//Creates Dir 'JKSV/[user]/[title]
|
||||
void makeTitleDir(data::user& u, data::titledata& t);
|
||||
|
||||
|
||||
@@ -114,13 +114,13 @@ namespace data
|
||||
if(R_FAILED(res) || total == 0)
|
||||
break;
|
||||
|
||||
if((info.SaveDataType == FsSaveDataType_SaveData) || sys::devMode)
|
||||
if((info.SaveDataType == FsSaveDataType_SaveData) || sys::sysSave)
|
||||
{
|
||||
int u = getUserIndex(info.userID);
|
||||
if(u == -1)
|
||||
{
|
||||
user newUser;
|
||||
if(newUser.init(info.userID) || (sys::devMode && newUser.initNoChk(info.userID)))
|
||||
if(newUser.init(info.userID) || (sys::sysSave && newUser.initNoChk(info.userID)))
|
||||
{
|
||||
users.push_back(newUser);
|
||||
|
||||
@@ -167,7 +167,8 @@ namespace data
|
||||
res = nsGetApplicationControlData(1, id, dat, sizeof(NsApplicationControlData), &outSz);
|
||||
if(R_FAILED(res) || outSz < sizeof(dat->nacp))
|
||||
{
|
||||
printf("nsGetAppCtrlData Failed: 0x%08X\n", (unsigned)res);
|
||||
if(!sys::sysSave)
|
||||
printf("nsGetAppCtrlData Failed: 0x%08X\n", (unsigned)res);
|
||||
delete dat;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace fs
|
||||
if(r == -1)
|
||||
return false;
|
||||
}
|
||||
else if(sys::devMode && open.getType() == FsSaveDataType_SystemSaveData)
|
||||
else if(sys::sysSave && open.getType() == FsSaveDataType_SystemSaveData)
|
||||
{
|
||||
res = fsMount_SystemSaveData(&sv, open.getID());
|
||||
if(R_FAILED(res))
|
||||
|
||||
@@ -43,7 +43,7 @@ int main(int argc, const char *argv[])
|
||||
gfx::clearBufferColor(0x3B3B3BFF);
|
||||
gfx::drawText("JKSV - 6/13/2018", 16, 16, 64, 0xFFFFFFFF);
|
||||
gfx::drawRectangle(16, 64, 1248, 1, 0xFFFFFFFF);
|
||||
gfx::drawRectangle(384, 64, 1, 592, 0xFFFFFFFF);
|
||||
gfx::drawRectangle(448, 64, 1, 592, 0xFFFFFFFF);
|
||||
gfx::drawRectangle(16, 656, 1248, 1, 0xFFFFFFFF);
|
||||
|
||||
ui::runApp(down, held);
|
||||
|
||||
31
src/sys.cpp
31
src/sys.cpp
@@ -10,7 +10,27 @@ static std::fstream deb;
|
||||
|
||||
namespace sys
|
||||
{
|
||||
bool devMode = false;
|
||||
bool sysSave = false;
|
||||
bool devMenu = false;
|
||||
|
||||
void loadCfg()
|
||||
{
|
||||
std::fstream devIn("0x4A4B.dev", std::ios::in | std::ios::binary);
|
||||
if(devIn.is_open())
|
||||
{
|
||||
uint8_t byte = 0;
|
||||
devIn.read((char *)&byte, 1);
|
||||
devIn.close();
|
||||
|
||||
sysSave = byte >> 7 & 1;
|
||||
devMenu = byte >> 6 & 1;
|
||||
|
||||
if(sysSave)
|
||||
printf("System save dumping enabled.\n");
|
||||
if(devMenu)
|
||||
printf("DevMenu enabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
bool init()
|
||||
{
|
||||
@@ -46,14 +66,7 @@ namespace sys
|
||||
mkdir("sdmc:/JKSV", 0777);
|
||||
chdir("sdmc:/JKSV");
|
||||
|
||||
deb.open("deb.txt", std::ios::out);
|
||||
|
||||
std::fstream chk("0x4A4B.dev", std::ios::in);
|
||||
if(chk.is_open())
|
||||
{
|
||||
devMode = true;
|
||||
chk.close();
|
||||
}
|
||||
loadCfg();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
87
src/ui.cpp
87
src/ui.cpp
@@ -23,12 +23,13 @@ enum menuState
|
||||
{
|
||||
USR_SEL,
|
||||
TTL_SEL,
|
||||
FLD_SEL
|
||||
FLD_SEL,
|
||||
DEV_MNU
|
||||
};
|
||||
|
||||
static int mstate = USR_SEL;
|
||||
|
||||
static ui::menu userMenu, titleMenu, folderMenu;
|
||||
static ui::menu userMenu, titleMenu, folderMenu, devMenu;
|
||||
static gfx::tex buttonA, buttonB, buttonX, buttonY;
|
||||
|
||||
namespace ui
|
||||
@@ -129,14 +130,14 @@ namespace ui
|
||||
else
|
||||
length = start + 15;
|
||||
|
||||
uint32_t rectClr = 0x00 << 24 | ((0x88 + clrSh) & 0xFF) << 16 | ((0xbb + clrSh) & 0xFF) << 8 | 0xFF;
|
||||
uint32_t rectClr = 0x00 << 24 | ((0x88 + clrSh) & 0xFF) << 16 | ((0xBB + clrSh) & 0xFF) << 8 | 0xFF;
|
||||
|
||||
for(int i = start; i < length; i++)
|
||||
{
|
||||
if(i == selected)
|
||||
gfx::drawRectangle(x, y + ((i - start) * 36), rectWidth, 32, rectClr);
|
||||
|
||||
gfx::drawText(opt[i], x, y + ((i - start) * 36), 32, 0xFFFFFFFF);
|
||||
gfx::drawText(opt[i], x, y + ((i - start) * 36), 38, 0xFFFFFFFF);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -513,21 +514,26 @@ namespace ui
|
||||
folderMenu.addOpt(list.getItem(i));
|
||||
}
|
||||
|
||||
void devMenuPrepare()
|
||||
{
|
||||
devMenu.addOpt("Dump all saves");
|
||||
}
|
||||
|
||||
void drawMenus()
|
||||
{
|
||||
switch(mstate)
|
||||
{
|
||||
case USR_SEL:
|
||||
userMenu.print(16, 88, 364);
|
||||
userMenu.print(16, 88, 424);
|
||||
break;
|
||||
|
||||
case TTL_SEL:
|
||||
titleMenu.print(16, 88, 364);
|
||||
titleMenu.print(16, 88, 424);
|
||||
break;
|
||||
|
||||
case FLD_SEL:
|
||||
titleMenu.print(16, 88, 364);
|
||||
folderMenu.print(390, 88, 874);
|
||||
titleMenu.print(16, 88, 424);
|
||||
folderMenu.print(456, 88, 808);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -539,12 +545,17 @@ namespace ui
|
||||
if(down & KEY_A)
|
||||
{
|
||||
data::curUser = data::users[userMenu.getSelected()];
|
||||
|
||||
mkdir(data::curUser.getUsername().c_str(), 777);
|
||||
util::makeUserDir(data::curUser);
|
||||
titleMenuPrepare(data::curUser);
|
||||
|
||||
mstate = TTL_SEL;
|
||||
}
|
||||
else if(down & KEY_MINUS && sys::devMenu)
|
||||
{
|
||||
devMenu.reset();
|
||||
devMenuPrepare();
|
||||
mstate = DEV_MNU;
|
||||
}
|
||||
|
||||
drawMenus();
|
||||
|
||||
@@ -578,7 +589,7 @@ namespace ui
|
||||
|
||||
unsigned startX = 1056;
|
||||
|
||||
if(sys::devMode)
|
||||
if(sys::sysSave)
|
||||
{
|
||||
std::string drawType = "Type: ";
|
||||
switch(data::curUser.titles[titleMenu.getSelected()].getType())
|
||||
@@ -676,7 +687,7 @@ namespace ui
|
||||
}
|
||||
}
|
||||
else
|
||||
ui::showMessage("NEIN NEIN NEIN.");
|
||||
ui::showMessage("NEIN! NEIN! NEIN!");
|
||||
}
|
||||
else if(down & KEY_X)
|
||||
{
|
||||
@@ -718,6 +729,54 @@ namespace ui
|
||||
gfx::drawText("Back", startX += 38, 668, 32, 0xFFFFFFFF);
|
||||
}
|
||||
|
||||
void showDevMenu(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
devMenu.handleInput(down, held);
|
||||
|
||||
if(down & KEY_A)
|
||||
{
|
||||
switch(devMenu.getSelected())
|
||||
{
|
||||
case 0:
|
||||
ui::progBar userProg(data::users.size());
|
||||
for(unsigned i = 0; i < data::users.size(); i++)
|
||||
{
|
||||
data::curUser = data::users[i];
|
||||
util::makeUserDir(data::curUser);
|
||||
for(unsigned j = 0; j < data::curUser.titles.size(); j++)
|
||||
{
|
||||
data::curData = data::curUser.titles[j];
|
||||
if(fs::mountSave(data::curUser, data::curData))
|
||||
{
|
||||
util::makeTitleDir(data::curUser, data::curData);
|
||||
|
||||
std::string to = util::getTitleDir(data::curUser, data::curData) + util::getDateTime();
|
||||
mkdir(to.c_str(), 777);
|
||||
to += "/";
|
||||
|
||||
std::string root = "sv:/";
|
||||
|
||||
fs::copyDirToDir(root, to);
|
||||
|
||||
fsdevUnmountDevice("sv");
|
||||
}
|
||||
|
||||
userProg.draw("Dumping " + data::curUser.getUsername() + "...");
|
||||
|
||||
gfx::handleBuffs();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(down & KEY_B)
|
||||
mstate = USR_SEL;
|
||||
|
||||
devMenu.print(16, 88, 424);
|
||||
|
||||
gfx::handleBuffs();
|
||||
}
|
||||
|
||||
void runApp(const uint64_t& down, const uint64_t& held)
|
||||
{
|
||||
switch(mstate)
|
||||
@@ -733,6 +792,10 @@ namespace ui
|
||||
case FLD_SEL:
|
||||
showFolderMenu(down, held);
|
||||
break;
|
||||
|
||||
case DEV_MNU:
|
||||
showDevMenu(down, held);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,11 @@ namespace util
|
||||
return std::string(ret);
|
||||
}
|
||||
|
||||
void makeUserDir(data::user& u)
|
||||
{
|
||||
mkdir(u.getUsername().c_str(), 0777);
|
||||
}
|
||||
|
||||
void makeTitleDir(data::user& u, data::titledata& t)
|
||||
{
|
||||
std::string path = u.getUsername() + "/" + t.getTitleSafe();
|
||||
|
||||
Reference in New Issue
Block a user