mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-13 23:15:09 +01:00
435 lines
12 KiB
C++
435 lines
12 KiB
C++
/****************************************************************************
|
|
* Copyright (C) 2010
|
|
* by Dimok
|
|
*
|
|
* This software is provided 'as-is', without any express or implied
|
|
* warranty. In no event will the authors be held liable for any
|
|
* damages arising from the use of this software.
|
|
*
|
|
* Permission is granted to anyone to use this software for any
|
|
* purpose, including commercial applications, and to alter it and
|
|
* redistribute it freely, subject to the following restrictions:
|
|
*
|
|
* 1. The origin of this software must not be misrepresented; you
|
|
* must not claim that you wrote the original software. If you use
|
|
* this software in a product, an acknowledgment in the product
|
|
* documentation would be appreciated but is not required.
|
|
*
|
|
* 2. Altered source versions must be plainly marked as such, and
|
|
* must not be misrepresented as being the original software.
|
|
*
|
|
* 3. This notice may not be removed or altered from any source
|
|
* distribution.
|
|
***************************************************************************/
|
|
#include <unistd.h>
|
|
#include "Channels/channels.h"
|
|
#include "Controls/DeviceHandler.hpp"
|
|
#include "GameCube/GCGames.h"
|
|
#include "CustomPathsSM.hpp"
|
|
#include "settings/SettingsPrompts.h"
|
|
#include "settings/CSettings.h"
|
|
#include "settings/SettingsEnums.h"
|
|
#include "settings/GameTitles.h"
|
|
#include "prompts/PromptWindows.h"
|
|
#include "prompts/ProgressWindow.h"
|
|
#include "language/gettext.h"
|
|
#include "prompts/filebrowser.h"
|
|
#include "themes/CTheme.h"
|
|
#include "FileOperations/fileops.h"
|
|
#include "gecko.h"
|
|
|
|
CustomPathsSM::CustomPathsSM()
|
|
: SettingsMenu(tr("Custom Paths"), &GuiOptions, MENU_NONE)
|
|
{
|
|
int Idx = 0;
|
|
Options->SetName(Idx++, tr("3D Cover Path"));
|
|
Options->SetName(Idx++, tr("2D Cover Path"));
|
|
Options->SetName(Idx++, tr("Full Cover Path"));
|
|
Options->SetName(Idx++, tr("Disc Artwork Path"));
|
|
Options->SetName(Idx++, tr("Theme Path"));
|
|
Options->SetName(Idx++, tr("Titles Path"));
|
|
Options->SetName(Idx++, tr("Update Path"));
|
|
Options->SetName(Idx++, tr("GCT Cheatcodes Path"));
|
|
Options->SetName(Idx++, tr("TXT Cheatcodes Path"));
|
|
Options->SetName(Idx++, tr("DOL Path"));
|
|
Options->SetName(Idx++, tr("Homebrew Apps Path"));
|
|
Options->SetName(Idx++, tr("BCA Codes Path"));
|
|
Options->SetName(Idx++, tr("WIP Patches Path"));
|
|
Options->SetName(Idx++, tr("Languagefiles Path"));
|
|
Options->SetName(Idx++, tr("WDM Files Path"));
|
|
Options->SetName(Idx++, tr("Wiinnertag Path"));
|
|
Options->SetName(Idx++, tr("Nand Emu Path"));
|
|
Options->SetName(Idx++, tr("Nand Emu Channel Path"));
|
|
Options->SetName(Idx++, tr("Main GameCube Path"));
|
|
Options->SetName(Idx++, tr("SD GameCube Path"));
|
|
Options->SetName(Idx++, tr("Devolution Loader Path"));
|
|
Options->SetName(Idx++, tr("Nintendont Loader Path"));
|
|
Options->SetName(Idx++, tr("Cache BNR Files Path"));
|
|
Options->SetName(Idx++, tr("Game Header Cache Files Path"));
|
|
|
|
SetOptionValues();
|
|
}
|
|
|
|
void CustomPathsSM::SetOptionValues()
|
|
{
|
|
int Idx = 0;
|
|
|
|
//! Settings: 3D Cover Path
|
|
Options->SetValue(Idx++, Settings.covers_path);
|
|
|
|
//! Settings: 2D Cover Path
|
|
Options->SetValue(Idx++, Settings.covers2d_path);
|
|
|
|
//! Settings: Full Cover Path
|
|
Options->SetValue(Idx++, Settings.coversFull_path);
|
|
|
|
//! Settings: Disc Artwork Path
|
|
Options->SetValue(Idx++, Settings.disc_path);
|
|
|
|
//! Settings: Theme Path
|
|
Options->SetValue(Idx++, Settings.theme_path);
|
|
|
|
//! Settings: Titles Path
|
|
Options->SetValue(Idx++, Settings.titlestxt_path);
|
|
|
|
//! Settings: Update Path
|
|
Options->SetValue(Idx++, Settings.update_path);
|
|
|
|
//! Settings: GCT Cheatcodes Path
|
|
Options->SetValue(Idx++, Settings.Cheatcodespath);
|
|
|
|
//! Settings: TXT Cheatcodes Path
|
|
Options->SetValue(Idx++, Settings.TxtCheatcodespath);
|
|
|
|
//! Settings: DOL Path
|
|
Options->SetValue(Idx++, Settings.dolpath);
|
|
|
|
//! Settings: Homebrew Apps Path
|
|
Options->SetValue(Idx++, Settings.homebrewapps_path);
|
|
|
|
//! Settings: BCA Codes Path
|
|
Options->SetValue(Idx++, Settings.BcaCodepath);
|
|
|
|
//! Settings: WIP Patches Path
|
|
Options->SetValue(Idx++, Settings.WipCodepath);
|
|
|
|
//! Settings: Languagefiles Path
|
|
Options->SetValue(Idx++, Settings.languagefiles_path);
|
|
|
|
//! Settings: WDM Files Path
|
|
Options->SetValue(Idx++, Settings.WDMpath);
|
|
|
|
//! Settings: Wiinnertag Path
|
|
Options->SetValue(Idx++, Settings.WiinnertagPath);
|
|
|
|
//! Settings: Nand Emu Path
|
|
Options->SetValue(Idx++, Settings.NandEmuPath);
|
|
|
|
//! Settings: Nand Emu Channel Path
|
|
Options->SetValue(Idx++, Settings.NandEmuChanPath);
|
|
|
|
//! Settings: GameCube Games Path
|
|
Options->SetValue(Idx++, Settings.GameCubePath);
|
|
|
|
//! Settings: SD GameCube Games Path
|
|
Options->SetValue(Idx++, Settings.GameCubeSDPath);
|
|
|
|
//! Settings: GameCube Devolution loader.bin Path
|
|
Options->SetValue(Idx++, Settings.DEVOLoaderPath);
|
|
|
|
//! Settings: GameCube Nintendont boot.dol Path
|
|
Options->SetValue(Idx++, Settings.NINLoaderPath);
|
|
|
|
//! Settings: Cache BNR Files Path
|
|
Options->SetValue(Idx++, Settings.BNRCachePath);
|
|
|
|
//! Settings: Game Header Cache Files Path
|
|
Options->SetValue(Idx++, Settings.GameHeaderCachePath);
|
|
}
|
|
|
|
int CustomPathsSM::GetMenuInternal()
|
|
{
|
|
int ret = optionBrowser->GetClickedOption();
|
|
|
|
if (ret < 0)
|
|
return MENU_NONE;
|
|
|
|
int Idx = -1;
|
|
|
|
//! Settings: 3D Cover Path
|
|
if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "3D Cover Path" ));
|
|
ChangePath(Settings.covers_path, sizeof(Settings.covers_path));
|
|
}
|
|
|
|
//! Settings: 2D Cover Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "2D Cover Path" ));
|
|
ChangePath(Settings.covers2d_path, sizeof(Settings.covers2d_path));
|
|
}
|
|
|
|
//! Settings: Full Cover Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Full Cover Path" ));
|
|
ChangePath(Settings.coversFull_path, sizeof(Settings.coversFull_path));
|
|
}
|
|
|
|
//! Settings: Disc Artwork Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Disc Artwork Path" ));
|
|
ChangePath(Settings.disc_path, sizeof(Settings.disc_path));
|
|
}
|
|
|
|
//! Settings: Theme Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Theme Path" ));
|
|
ChangePath(Settings.theme_path, sizeof(Settings.theme_path));
|
|
}
|
|
|
|
//! Settings: Titles Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
char oldPath[100];
|
|
snprintf(oldPath, sizeof(oldPath), "%s", Settings.titlestxt_path);
|
|
|
|
titleTxt->SetText(tr("Titles Path"));
|
|
if (ChangePath(Settings.titlestxt_path, sizeof(Settings.titlestxt_path)))
|
|
{
|
|
if(strlen(oldPath) != strlen(Settings.titlestxt_path) || strcmp(oldPath, Settings.titlestxt_path) != 0)
|
|
{
|
|
if (WindowPrompt(tr("Move File"), tr("Do you want to move the file(s)? Any existing ones will be deleted!"), tr("Yes"), tr("Cancel")) == 1)
|
|
{
|
|
MoveDbFile(oldPath, Settings.titlestxt_path, "wiitdb.xml");
|
|
MoveDbFile(oldPath, Settings.titlestxt_path, "TitlesCache.bin");
|
|
MoveDbFile(oldPath, Settings.titlestxt_path, "wiitdb_offsets.bin");
|
|
MoveDbFile(oldPath, Settings.titlestxt_path, "GameTimestamps.txt");
|
|
|
|
WindowPrompt(tr("Process finished."), 0, tr("OK"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//! Settings: Update Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Update Path" ));
|
|
ChangePath(Settings.update_path, sizeof(Settings.update_path));
|
|
}
|
|
|
|
//! Settings: GCT Cheatcodes Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "GCT Cheatcodes Path" ));
|
|
ChangePath(Settings.Cheatcodespath, sizeof(Settings.Cheatcodespath));
|
|
}
|
|
|
|
//! Settings: TXT Cheatcodes Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "TXT Cheatcodes Path" ));
|
|
ChangePath(Settings.TxtCheatcodespath, sizeof(Settings.TxtCheatcodespath));
|
|
}
|
|
|
|
//! Settings: DOL Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "DOL Path" ));
|
|
ChangePath(Settings.dolpath, sizeof(Settings.dolpath));
|
|
}
|
|
|
|
//! Settings: Homebrew Apps Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Homebrew Apps Path" ));
|
|
ChangePath(Settings.homebrewapps_path, sizeof(Settings.homebrewapps_path));
|
|
}
|
|
|
|
//! Settings: BCA Codes Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "BCA Codes Path" ));
|
|
ChangePath(Settings.BcaCodepath, sizeof(Settings.BcaCodepath));
|
|
}
|
|
|
|
//! Settings: WIP Patches Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "WIP Patches Path" ));
|
|
ChangePath(Settings.WipCodepath, sizeof(Settings.WipCodepath));
|
|
}
|
|
|
|
//! Settings: Languagefiles Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Languagefiles Path" ));
|
|
ChangePath(Settings.languagefiles_path, sizeof(Settings.languagefiles_path));
|
|
}
|
|
|
|
//! Settings: WDM Files Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "WDM Files Path" ));
|
|
ChangePath(Settings.WDMpath, sizeof(Settings.WDMpath));
|
|
}
|
|
|
|
//! Settings: Wiinnertag Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Wiinnertag Path" ));
|
|
ChangePath(Settings.WiinnertagPath, sizeof(Settings.WiinnertagPath));
|
|
}
|
|
|
|
//! Settings: Nand Emu Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
char oldPath[sizeof(Settings.NandEmuPath)];
|
|
snprintf(oldPath, sizeof(oldPath), Settings.NandEmuPath);
|
|
|
|
titleTxt->SetText(tr( "Nand Emu Path" ));
|
|
ChangePath(Settings.NandEmuPath, sizeof(Settings.NandEmuPath));
|
|
if(strncasecmp(DeviceHandler::PathToFSName(Settings.NandEmuPath), "FAT", 3) != 0)
|
|
{
|
|
snprintf(Settings.NandEmuPath, sizeof(Settings.NandEmuPath), oldPath);
|
|
WindowPrompt(tr("Error:"), tr("Nand Emulation only works on FAT/FAT32 partitions!"), tr("OK"));
|
|
}
|
|
}
|
|
|
|
//! Settings: Nand Emu Channel Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
char oldPath[sizeof(Settings.NandEmuChanPath)];
|
|
snprintf(oldPath, sizeof(oldPath), Settings.NandEmuChanPath);
|
|
|
|
titleTxt->SetText(tr( "Nand Emu Channel Path" ));
|
|
int result = ChangePath(Settings.NandEmuChanPath, sizeof(Settings.NandEmuChanPath));
|
|
if(strncasecmp(DeviceHandler::PathToFSName(Settings.NandEmuChanPath), "FAT", 3) != 0)
|
|
{
|
|
snprintf(Settings.NandEmuChanPath, sizeof(Settings.NandEmuChanPath), oldPath);
|
|
WindowPrompt(tr("Error:"), tr("Nand Emulation only works on FAT/FAT32 partitions!"), tr("OK"));
|
|
}
|
|
else if(result == 1)
|
|
{
|
|
Channels::Instance()->GetEmuChannelList();
|
|
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
|
|
}
|
|
}
|
|
|
|
//! Settings: GameCube Games Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Main GameCube Games Path" ));
|
|
if(ChangePath(Settings.GameCubePath, sizeof(Settings.GameCubePath)))
|
|
{
|
|
GCGames::Instance()->LoadAllGames();
|
|
}
|
|
}
|
|
|
|
//! Settings: SD GameCube Games Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
char tmp_path[sizeof(Settings.GameCubeSDPath)];
|
|
snprintf(tmp_path, sizeof(tmp_path), "%s", Settings.GameCubeSDPath);
|
|
|
|
titleTxt->SetText(tr( "SD GameCube Games Path" ));
|
|
if(ChangePath(tmp_path, sizeof(tmp_path)))
|
|
{
|
|
if(strncmp(tmp_path, "sd", 2) != 0)
|
|
{
|
|
WindowPrompt(tr("Error:"), tr("This path must be on SD!"), tr("OK"));
|
|
}
|
|
else
|
|
{
|
|
snprintf(Settings.GameCubeSDPath, sizeof(Settings.GameCubeSDPath), "%s", tmp_path);
|
|
GCGames::Instance()->LoadAllGames();
|
|
}
|
|
}
|
|
}
|
|
|
|
//! Settings: GameCube Devolution loader.bin path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Devolution Loader Path" ));
|
|
ChangePath(Settings.DEVOLoaderPath, sizeof(Settings.DEVOLoaderPath));
|
|
}
|
|
|
|
//! Settings: GameCube Nintendont boot.dol path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Nintendont Loader Path" ));
|
|
ChangePath(Settings.NINLoaderPath, sizeof(Settings.NINLoaderPath));
|
|
}
|
|
|
|
//! Settings: Cache BNR Files Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Cache BNR Files Path" ));
|
|
ChangePath(Settings.BNRCachePath, sizeof(Settings.BNRCachePath));
|
|
}
|
|
|
|
//! Settings: Game Header Cache Files Path
|
|
else if (ret == ++Idx)
|
|
{
|
|
titleTxt->SetText(tr( "Game Header Cache Files Path" ));
|
|
ChangePath(Settings.GameHeaderCachePath, sizeof(Settings.GameHeaderCachePath));
|
|
}
|
|
|
|
//! Global set back of the titleTxt after a change
|
|
titleTxt->SetText(tr( "Custom Paths" ));
|
|
SetOptionValues();
|
|
|
|
return MENU_NONE;
|
|
}
|
|
|
|
int CustomPathsSM::ChangePath(char * SettingsPath, int SizeOfPath)
|
|
{
|
|
char entered[300];
|
|
snprintf(entered, sizeof(entered), SettingsPath);
|
|
|
|
HaltGui();
|
|
GuiWindow * parent = (GuiWindow *) parentElement;
|
|
if(parent) parent->SetState(STATE_DISABLED);
|
|
this->SetState(STATE_DEFAULT);
|
|
this->Remove(optionBrowser);
|
|
ResumeGui();
|
|
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
|
|
if(parent) parent->SetState(STATE_DEFAULT);
|
|
this->Append(optionBrowser);
|
|
|
|
if (result == 1)
|
|
{
|
|
if (entered[strlen(entered)-1] != '/')
|
|
strcat(entered, "/");
|
|
|
|
snprintf(SettingsPath, SizeOfPath, entered);
|
|
WindowPrompt(tr( "Path Changed" ), 0, tr( "OK" ));
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
void CustomPathsSM::MoveDbFile(const char* oldPath, const char* newPath, const char* fileName)
|
|
{
|
|
char srcPath[300], destPath[300];
|
|
memset(srcPath, 0, 300);
|
|
memset(destPath, 0, 300);
|
|
|
|
snprintf(srcPath, sizeof(srcPath), "%s/%s", oldPath, fileName);
|
|
snprintf(destPath, sizeof(destPath), "%s/%s", newPath, fileName);
|
|
|
|
if (CheckFile(srcPath))
|
|
{
|
|
if (CheckFile(destPath))
|
|
RemoveFile(destPath);
|
|
|
|
MoveFile(srcPath, destPath);
|
|
}
|
|
}
|