2010-12-31 00:49:22 +01:00
# 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...
2011-02-02 19:30:15 +01:00
WBFS_GetCount ( i , & count ) ;
2010-12-31 00:49:22 +01:00
if ( count > 0 )
{
Settings . partition = i ;
return 0 ;
}
2011-02-02 19:30:15 +01:00
WBFS_Close ( i ) ;
2010-12-31 00:49:22 +01:00
}
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 ( ) ;
}
2011-02-02 19:30:15 +01:00
s32 ret = - 1 ;
if ( Settings . MultiplePartitions )
ret = WBFS_OpenAll ( ) ;
else
2011-02-05 11:36:55 +01:00
ret = WBFS_OpenPart ( Settings . partition ) ;
2010-12-31 00:49:22 +01:00
if ( ret < 0 )
ret = FindGamePartition ( ) ;
if ( ret < 0 & & ShowGUI )
ret = PartitionChoice ( ) ;
if ( ret < 0 )
Sys_LoadMenu ( ) ;
gprintf ( " \t Disc_Init \n " ) ;
ret = Disc_Init ( ) ;
if ( ret < 0 )
{
if ( ShowGUI )
WindowPrompt ( tr ( " Error ! " ) , tr ( " Could not initialize DIP module! " ) , tr ( " OK " ) ) ;
Sys_LoadMenu ( ) ;
}
2011-02-02 19:30:15 +01:00
gprintf ( " LoadTitlesFromWiiTDB \n " ) ;
2011-05-28 21:52:00 +02:00
//! Clear list if available
GameTitles . Clear ( ) ;
2010-12-31 00:49:22 +01:00
2011-05-28 21:52:00 +02:00
//! gameList is loaded in GameTitles.LoadTitlesFromWiiTDB after cache file load
//! for speed up purpose. If titles override active, load game list here.
if ( Settings . titlesOverride )
GameTitles . LoadTitlesFromWiiTDB ( Settings . titlestxt_path ) ;
else
gameList . LoadUnfiltered ( ) ;
2010-12-31 00:49:22 +01:00
return ret ;
}