2010-11-13 23:34:53 +01:00
/****************************************************************************
* 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 "UninstallSM.hpp"
# include "FileOperations/fileops.h"
2012-02-09 22:18:16 +01:00
# include "GameCube/GCGames.h"
# include "Channels/channels.h"
2010-11-13 23:34:53 +01:00
# include "settings/CSettings.h"
# include "settings/CGameSettings.h"
# include "settings/CGameStatistics.h"
# include "settings/GameTitles.h"
# include "prompts/PromptWindows.h"
# include "language/gettext.h"
# include "usbloader/wbfs.h"
2010-12-12 17:31:13 +01:00
# include "usbloader/GameList.h"
# include "wstring.hpp"
2010-11-13 23:34:53 +01:00
UninstallSM : : UninstallSM ( struct discHdr * header )
2011-07-26 00:28:22 +02:00
: SettingsMenu ( tr ( " Uninstall Menu " ) , & GuiOptions , MENU_NONE )
2010-11-13 23:34:53 +01:00
{
2011-07-26 00:28:22 +02:00
DiscHeader = header ;
2010-11-13 23:34:53 +01:00
2011-07-26 00:28:22 +02:00
int Idx = 0 ;
2010-11-13 23:34:53 +01:00
2012-02-09 22:18:16 +01:00
if ( DiscHeader - > type = = TYPE_GAME_WII_IMG
| | DiscHeader - > type = = TYPE_GAME_GC_IMG
| | DiscHeader - > type = = TYPE_GAME_EMUNANDCHAN )
2011-12-22 23:44:48 +01:00
{
Options - > SetName ( Idx + + , " %s " , tr ( " Uninstall Game " ) ) ;
}
2011-07-26 00:28:22 +02:00
Options - > SetName ( Idx + + , " %s " , tr ( " Reset Playcounter " ) ) ;
Options - > SetName ( Idx + + , " %s " , tr ( " Delete Cover Artwork " ) ) ;
Options - > SetName ( Idx + + , " %s " , tr ( " Delete Disc Artwork " ) ) ;
Options - > SetName ( Idx + + , " %s " , tr ( " Delete Cheat TXT " ) ) ;
Options - > SetName ( Idx + + , " %s " , tr ( " Delete Cheat GCT " ) ) ;
2010-11-13 23:34:53 +01:00
2011-07-26 00:28:22 +02:00
SetOptionValues ( ) ;
2010-11-13 23:34:53 +01:00
}
void UninstallSM : : SetOptionValues ( )
{
2011-07-26 00:28:22 +02:00
int Idx = 0 ;
2010-11-13 23:34:53 +01:00
2012-02-09 22:18:16 +01:00
if ( DiscHeader - > type = = TYPE_GAME_WII_IMG
| | DiscHeader - > type = = TYPE_GAME_GC_IMG
| | DiscHeader - > type = = TYPE_GAME_EMUNANDCHAN )
2011-12-22 23:44:48 +01:00
{
//! Settings: Uninstall Game
Options - > SetValue ( Idx + + , " " ) ;
}
2010-11-13 23:34:53 +01:00
2011-07-26 00:28:22 +02:00
//! Settings: Reset Playcounter
Options - > SetValue ( Idx + + , " " ) ;
2010-11-13 23:34:53 +01:00
2011-07-26 00:28:22 +02:00
//! Settings: Delete Cover Artwork
Options - > SetValue ( Idx + + , " " ) ;
2010-11-13 23:34:53 +01:00
2011-07-26 00:28:22 +02:00
//! Settings: Delete Disc Artwork
Options - > SetValue ( Idx + + , " " ) ;
2010-11-13 23:34:53 +01:00
2011-07-26 00:28:22 +02:00
//! Settings: Delete Cheat TXT
Options - > SetValue ( Idx + + , " " ) ;
2010-11-13 23:34:53 +01:00
2011-07-26 00:28:22 +02:00
//! Settings: Delete Cheat GCT
Options - > SetValue ( Idx + + , " " ) ;
2010-11-13 23:34:53 +01:00
}
int UninstallSM : : GetMenuInternal ( )
{
2011-07-26 00:28:22 +02:00
int ret = optionBrowser - > GetClickedOption ( ) ;
if ( ret < 0 )
return MENU_NONE ;
int Idx = - 1 ;
//! Settings: Uninstall Game
2012-02-09 22:18:16 +01:00
if ( ( DiscHeader - > type = = TYPE_GAME_WII_IMG
| | DiscHeader - > type = = TYPE_GAME_GC_IMG
| | DiscHeader - > type = = TYPE_GAME_EMUNANDCHAN )
& & ret = = + + Idx )
2011-07-26 00:28:22 +02:00
{
int choice = WindowPrompt ( GameTitles . GetTitle ( DiscHeader ) , tr ( " What should be deleted for this game title: " ) , tr ( " Game Only " ) , tr ( " Uninstall all " ) , tr ( " Cancel " ) ) ;
if ( choice = = 0 )
return MENU_NONE ;
char GameID [ 7 ] ;
snprintf ( GameID , sizeof ( GameID ) , " %s " , ( char * ) DiscHeader - > id ) ;
std : : string Title = GameTitles . GetTitle ( DiscHeader ) ;
GameSettings . Remove ( DiscHeader - > id ) ;
GameSettings . Save ( ) ;
GameStatistics . Remove ( DiscHeader - > id ) ;
GameStatistics . Save ( ) ;
2012-02-09 22:18:16 +01:00
2011-07-26 00:28:22 +02:00
int ret = 0 ;
2012-02-09 22:18:16 +01:00
char filepath [ 512 ] ;
2011-07-26 00:28:22 +02:00
2012-02-09 22:18:16 +01:00
if ( DiscHeader - > type = = TYPE_GAME_WII_IMG )
{
ret = WBFS_RemoveGame ( ( u8 * ) GameID ) ;
if ( ret > = 0 )
{
wString oldFilter ( gameList . GetCurrentFilter ( ) ) ;
gameList . ReadGameList ( ) ;
gameList . FilterList ( oldFilter . c_str ( ) ) ;
}
}
else if ( DiscHeader - > type = = TYPE_GAME_GC_IMG )
2011-07-26 00:28:22 +02:00
{
2012-02-09 22:18:16 +01:00
GCGames : : Instance ( ) - > RemoveGame ( GameID ) ;
// Reload list
GCGames : : Instance ( ) - > LoadGameList ( Settings . GameCubePath ) ;
}
else if ( DiscHeader - > type = = TYPE_GAME_EMUNANDCHAN & & DiscHeader - > tid ! = 0 )
{
// Remove ticket
snprintf ( filepath , sizeof ( filepath ) , " %s/ticket/%08x/%08x.tik " , Settings . NandEmuChanPath , ( u32 ) ( DiscHeader - > tid > > 32 ) , ( u32 ) DiscHeader - > tid ) ;
RemoveFile ( filepath ) ;
// Remove contents / data
snprintf ( filepath , sizeof ( filepath ) , " %s/title/%08x/%08x/ " , Settings . NandEmuChanPath , ( u32 ) ( DiscHeader - > tid > > 32 ) , ( u32 ) DiscHeader - > tid ) ;
RemoveDirectory ( filepath ) ;
Channels : : Instance ( ) - > GetEmuChannelList ( ) ;
2011-07-26 00:28:22 +02:00
}
if ( choice = = 2 )
{
snprintf ( filepath , sizeof ( filepath ) , " %s%s.png " , Settings . covers_path , GameID ) ;
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
snprintf ( filepath , sizeof ( filepath ) , " %s%s.png " , Settings . covers2d_path , GameID ) ;
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
2011-10-25 21:51:50 +02:00
snprintf ( filepath , sizeof ( filepath ) , " %s%s.png " , Settings . coversFull_path , GameID ) ;
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
2011-07-26 00:28:22 +02:00
snprintf ( filepath , sizeof ( filepath ) , " %s%s.png " , Settings . disc_path , GameID ) ;
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
snprintf ( filepath , sizeof ( filepath ) , " %s%s.txt " , Settings . TxtCheatcodespath , GameID ) ;
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
snprintf ( filepath , sizeof ( filepath ) , " %s%s.gct " , Settings . Cheatcodespath , GameID ) ;
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
}
if ( ret < 0 )
WindowPrompt ( tr ( " Can't delete: " ) , Title . c_str ( ) , tr ( " OK " ) ) ;
else
WindowPrompt ( tr ( " Successfully deleted: " ) , Title . c_str ( ) , tr ( " OK " ) ) ;
return MENU_DISCLIST ;
}
//! Settings: Reset Playcounter
else if ( ret = = + + Idx )
{
int result = WindowPrompt ( tr ( " Are you sure? " ) , 0 , tr ( " Yes " ) , tr ( " Cancel " ) ) ;
if ( result = = 1 )
{
GameStatistics . SetPlayCount ( DiscHeader - > id , 0 ) ;
GameStatistics . Save ( ) ;
}
}
//! Settings: Delete Cover Artwork
else if ( ret = = + + Idx )
{
int choice = WindowPrompt ( tr ( " Delete " ) , tr ( " Are you sure? " ) , tr ( " Yes " ) , tr ( " No " ) ) ;
if ( choice ! = 1 )
return MENU_NONE ;
char GameID [ 7 ] ;
snprintf ( GameID , sizeof ( GameID ) , " %s " , ( char * ) DiscHeader - > id ) ;
char filepath [ 200 ] ;
snprintf ( filepath , sizeof ( filepath ) , " %s%s.png " , Settings . covers_path , GameID ) ;
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
snprintf ( filepath , sizeof ( filepath ) , " %s%s.png " , Settings . covers2d_path , GameID ) ;
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
2011-10-25 21:51:50 +02:00
snprintf ( filepath , sizeof ( filepath ) , " %s%s.png " , Settings . coversFull_path , GameID ) ;
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
2011-07-26 00:28:22 +02:00
}
//! Settings: Delete Disc Artwork
else if ( ret = = + + Idx )
{
char GameID [ 7 ] ;
snprintf ( GameID , sizeof ( GameID ) , " %s " , ( char * ) DiscHeader - > id ) ;
char filepath [ 200 ] ;
snprintf ( filepath , sizeof ( filepath ) , " %s%s.png " , Settings . disc_path , GameID ) ;
int choice = WindowPrompt ( tr ( " Delete " ) , filepath , tr ( " Yes " ) , tr ( " No " ) ) ;
if ( choice = = 1 )
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
}
//! Settings: Delete Cheat TXT
else if ( ret = = + + Idx )
{
char GameID [ 7 ] ;
snprintf ( GameID , sizeof ( GameID ) , " %s " , ( char * ) DiscHeader - > id ) ;
char filepath [ 200 ] ;
snprintf ( filepath , sizeof ( filepath ) , " %s%s.txt " , Settings . TxtCheatcodespath , GameID ) ;
int choice = WindowPrompt ( tr ( " Delete " ) , filepath , tr ( " Yes " ) , tr ( " No " ) ) ;
if ( choice = = 1 )
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
}
//! Settings: Delete Cheat GCT
else if ( ret = = + + Idx )
{
char GameID [ 7 ] ;
snprintf ( GameID , sizeof ( GameID ) , " %s " , ( char * ) DiscHeader - > id ) ;
char filepath [ 200 ] ;
snprintf ( filepath , sizeof ( filepath ) , " %s%s.gct " , Settings . Cheatcodespath , GameID ) ;
int choice = WindowPrompt ( tr ( " Delete " ) , filepath , tr ( " Yes " ) , tr ( " No " ) ) ;
if ( choice = = 1 )
if ( CheckFile ( filepath ) ) remove ( filepath ) ;
}
SetOptionValues ( ) ;
return MENU_NONE ;
2010-11-13 23:34:53 +01:00
}