mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-18 17:29:17 +01:00
147 lines
4.0 KiB
C++
147 lines
4.0 KiB
C++
|
#include <dirent.h>
|
||
|
#include <unistd.h>
|
||
|
|
||
|
#include "FileOperations/fileops.h"
|
||
|
#include "Controls/DeviceHandler.hpp"
|
||
|
#include "wad/nandtitle.h"
|
||
|
#include "system/IosLoader.h"
|
||
|
#include "menu/menus.h"
|
||
|
#include "wpad.h"
|
||
|
#include "usbloader/wbfs.h"
|
||
|
#include "usbloader/GameList.h"
|
||
|
#include "settings/GameTitles.h"
|
||
|
#include "xml/WiiTDB.hpp"
|
||
|
|
||
|
static int FindGamePartition()
|
||
|
{
|
||
|
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
|
||
|
// Loop through all WBFS partitions first to check them in case IOS249 Rev < 18
|
||
|
for(int i = 0; i < usbHandle->GetPartitionCount(); ++i)
|
||
|
{
|
||
|
if(strncmp(usbHandle->GetFSName(i), "WBFS", 4) != 0)
|
||
|
continue;
|
||
|
|
||
|
if (WBFS_OpenPart(i) == 0)
|
||
|
{
|
||
|
Settings.partition = i;
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
if(IosLoader::IsWaninkokoIOS() && NandTitles.VersionOf(TITLE_ID(1, IOS_GetVersion())) < 18)
|
||
|
return -1;
|
||
|
|
||
|
// Loop through FAT/NTFS/EXT partitions, and find the first partition with games on it (if there is one)
|
||
|
for(int i = 0; i < usbHandle->GetPartitionCount(); ++i)
|
||
|
{
|
||
|
if(strncmp(usbHandle->GetFSName(i), "NTFS", 4) != 0 &&
|
||
|
strncmp(usbHandle->GetFSName(i), "FAT", 3) != 0 &&
|
||
|
strncmp(usbHandle->GetFSName(i), "LINUX", 5) != 0)
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (WBFS_OpenPart(i) != 0)
|
||
|
continue;
|
||
|
|
||
|
u32 count;
|
||
|
// Get the game count...
|
||
|
WBFS_GetCount(&count);
|
||
|
|
||
|
if (count > 0)
|
||
|
{
|
||
|
Settings.partition = i;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
WBFS_Close();
|
||
|
}
|
||
|
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
static int PartitionChoice()
|
||
|
{
|
||
|
int ret = -1;
|
||
|
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
|
||
|
|
||
|
int choice = WindowPrompt(tr( "No WBFS or FAT/NTFS/EXT partition found" ),
|
||
|
tr( "You need to select or format a partition" ), tr( "Select" ), tr( "Format" ), tr( "Return" ));
|
||
|
|
||
|
if (choice == 0)
|
||
|
{
|
||
|
Sys_LoadMenu();
|
||
|
}
|
||
|
else if(choice == 1)
|
||
|
{
|
||
|
int part_num = SelectPartitionMenu();
|
||
|
if(part_num >= 0)
|
||
|
{
|
||
|
if(IosLoader::IsWaninkokoIOS() && NandTitles.VersionOf(TITLE_ID(1, IOS_GetVersion())) < 18 &&
|
||
|
(strncmp(usbHandle->GetFSName(part_num), "NTFS", 4) == 0 ||
|
||
|
strncmp(usbHandle->GetFSName(part_num), "FAT", 3) == 0 ||
|
||
|
strncmp(usbHandle->GetFSName(part_num), "LINUX", 5) == 0))
|
||
|
{
|
||
|
WindowPrompt(tr("Warning:"), tr("You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."), tr("OK"));
|
||
|
}
|
||
|
|
||
|
ret = WBFS_OpenPart(part_num);
|
||
|
|
||
|
Settings.partition = part_num;
|
||
|
Settings.Save();
|
||
|
}
|
||
|
}
|
||
|
else if(choice == 2)
|
||
|
{
|
||
|
while(ret < 0 || ret == -666)
|
||
|
{
|
||
|
int part_num = SelectPartitionMenu();
|
||
|
if(part_num >= 0)
|
||
|
ret = FormatingPartition(tr( "Formatting, please wait..." ), part_num);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
/****************************************************************************
|
||
|
* MountGamePartition
|
||
|
***************************************************************************/
|
||
|
int MountGamePartition(bool ShowGUI)
|
||
|
{
|
||
|
gprintf("MountGamePartition()\n");
|
||
|
|
||
|
s32 wbfsinit = MountWBFS(ShowGUI);
|
||
|
if (wbfsinit < 0)
|
||
|
{
|
||
|
if(ShowGUI) WindowPrompt(tr( "Error !" ), tr( "USB Device not found" ), tr( "OK" ));
|
||
|
Sys_LoadMenu();
|
||
|
}
|
||
|
|
||
|
s32 ret = WBFS_OpenPart(Settings.partition);
|
||
|
if(ret < 0)
|
||
|
ret = FindGamePartition();
|
||
|
|
||
|
if (ret < 0 && ShowGUI)
|
||
|
ret = PartitionChoice();
|
||
|
|
||
|
if(ret < 0)
|
||
|
Sys_LoadMenu();
|
||
|
|
||
|
gprintf("\tDisc_Init\n");
|
||
|
ret = Disc_Init();
|
||
|
if (ret < 0)
|
||
|
{
|
||
|
if(ShowGUI)
|
||
|
WindowPrompt(tr( "Error !" ), tr( "Could not initialize DIP module!" ), tr( "OK" ));
|
||
|
Sys_LoadMenu();
|
||
|
}
|
||
|
|
||
|
gprintf("\tOpenXMLDatabase\n");
|
||
|
|
||
|
GameTitles.LoadTitlesFromWiiTDB(Settings.titlestxt_path);
|
||
|
|
||
|
return ret;
|
||
|
}
|