2020-03-13 23:35:20 +01:00
using GameBaseClassLibrary ;
using System ;
2020-03-01 16:07:22 +01:00
using System.Collections.Generic ;
2020-03-13 23:35:20 +01:00
using System.Configuration ;
using System.IO ;
2020-03-01 16:07:22 +01:00
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
2020-04-02 21:45:24 +02:00
using System.Windows.Forms ;
2020-03-13 23:35:20 +01:00
using UWUVCI_AIO_WPF.Classes ;
using UWUVCI_AIO_WPF.Properties ;
using UWUVCI_AIO_WPF.UI.Windows ;
2020-03-01 16:07:22 +01:00
namespace UWUVCI_AIO_WPF
{
class MainViewModel : BaseModel
{
//public GameConfig GameConfiguration { get; set; }
2020-03-01 17:15:54 +01:00
private GameConfig gameConfiguration = new GameConfig ( ) ;
2020-03-01 16:07:22 +01:00
2020-03-13 23:35:20 +01:00
2020-03-01 16:07:22 +01:00
public GameConfig GameConfiguration
{
get { return gameConfiguration ; }
set
{
gameConfiguration = value ;
OnPropertyChanged ( ) ;
}
}
2020-03-01 17:15:54 +01:00
private string romPath ;
public string RomPath
{
get { return romPath ; }
set { romPath = value ;
OnPropertyChanged ( ) ;
}
}
2020-03-01 16:07:22 +01:00
2020-03-13 23:35:20 +01:00
private GameBases gbTemp ;
public GameBases GbTemp
{
get { return gbTemp ; }
set { gbTemp = value ; }
}
private List < string > lGameBasesString = new List < string > ( ) ;
public List < string > LGameBasesString
{
get { return lGameBasesString ; }
set
{
lGameBasesString = value ;
OnPropertyChanged ( ) ;
}
}
private bool pathsSet { get ; set ; } = false ;
2020-03-01 16:52:59 +01:00
public bool PathsSet
{
get { return pathsSet ; }
set
{
pathsSet = value ;
OnPropertyChanged ( ) ;
}
}
2020-03-01 16:07:22 +01:00
2020-04-02 21:45:24 +02:00
private string baseStore ;
public string BaseStore
{
get { return baseStore ; }
set { baseStore = value ;
OnPropertyChanged ( ) ;
}
}
private string injectStore ;
public string InjectStore
{
get { return injectStore ; }
set { injectStore = value ;
OnPropertyChanged ( ) ;
}
}
2020-03-13 23:35:20 +01:00
private List < GameBases > lBases = new List < GameBases > ( ) ;
public List < GameBases > LBases
{
get { return lBases ; }
set { lBases = value ;
OnPropertyChanged ( ) ;
}
}
#region TKLIST
private List < GameBases > lNDS = new List < GameBases > ( ) ;
public List < GameBases > LNDS
{
get { return lNDS ; }
set { lNDS = value ; OnPropertyChanged ( ) ; }
}
private List < GameBases > lN64 = new List < GameBases > ( ) ;
public List < GameBases > LN64
{
get { return lN64 ; }
set { lN64 = value ; OnPropertyChanged ( ) ; }
}
private List < GameBases > lNES = new List < GameBases > ( ) ;
public List < GameBases > LNES
{
get { return lNES ; }
set { lNES = value ; OnPropertyChanged ( ) ; }
}
private List < GameBases > lGBA = new List < GameBases > ( ) ;
public List < GameBases > LGBA
{
get { return lGBA ; }
set { lGBA = value ; OnPropertyChanged ( ) ; }
}
private List < GameBases > lSNES = new List < GameBases > ( ) ;
public List < GameBases > LSNES
{
get { return lSNES ; }
set { lSNES = value ; OnPropertyChanged ( ) ; }
}
2020-04-01 01:48:50 +02:00
private List < GameBases > ltemp = new List < GameBases > ( ) ;
public List < GameBases > Ltemp
{
get { return ltemp ; }
set { ltemp = value ; OnPropertyChanged ( ) ; }
}
2020-03-13 23:35:20 +01:00
#endregion
2020-03-01 16:07:22 +01:00
public MainViewModel ( )
{
2020-04-03 00:49:48 +02:00
toolCheck ( ) ;
2020-03-02 18:44:01 +01:00
2020-03-01 16:07:22 +01:00
GameConfiguration = new GameConfig ( ) ;
2020-04-02 21:45:24 +02:00
if ( ! ValidatePathsStillExist ( ) & & Settings . Default . SetBaseOnce & & Settings . Default . SetOutOnce )
{
MessageBox . Show ( "One of your added Paths seems to not exist anymore. Please check the paths in the Path menu!" , "Issue" , MessageBoxButtons . OK , MessageBoxIcon . Warning ) ;
}
UpdatePathSet ( ) ;
2020-03-13 23:35:20 +01:00
GetAllBases ( ) ;
2020-04-02 21:45:24 +02:00
}
2020-04-03 00:49:48 +02:00
private void toolCheck ( )
{
if ( ToolCheck . DoesToolsFolderExist ( ) )
{
List < MissingTool > missingTools = new List < MissingTool > ( ) ;
missingTools = ToolCheck . CheckForMissingTools ( ) ;
if ( missingTools . Count > 0 )
{
string errorMessage = "Error 002:\nFollowing Tools seem to be missing:\n\n" ;
foreach ( MissingTool m in missingTools )
{
errorMessage + = $"{m.Name} not found under {m.Path}\n\n" ;
}
errorMessage + = "Please add listed files to their corresponding Path.\nThe Programm will be terminated" ;
MessageBox . Show ( errorMessage , "Error 002: \"Missing Tools\"" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
System . Windows . Application . Current . Shutdown ( ) ;
}
}
else
{
string path = $@"{Directory.GetCurrentDirectory()}\Tools" ;
MessageBox . Show ( $"Error: 001\nThe Tools folder seems to be missing.\nPlease make sure that the Tools Folder exists at this location:\n\n{path} \n\nThe Programm will be terminated." , "Error 001: \"Missing Tools folder\"" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
System . Windows . Application . Current . Shutdown ( ) ;
}
}
2020-04-02 21:45:24 +02:00
public void UpdatePathSet ( )
{
PathsSet = Settings . Default . PathsSet ;
if ( BaseStore ! = Settings . Default . BasePath )
{
BaseStore = Settings . Default . BasePath ;
}
if ( InjectStore ! = Settings . Default . BasePath )
{
InjectStore = Settings . Default . OutPath ;
}
2020-03-01 16:52:59 +01:00
}
2020-04-02 21:45:24 +02:00
public bool ValidatePathsStillExist ( )
2020-03-01 16:52:59 +01:00
{
2020-04-02 21:45:24 +02:00
bool ret = false ;
bool basep = false ;
try
{
if ( Directory . Exists ( Settings . Default . BasePath ) )
{
basep = true ;
}
else
{
Settings . Default . BasePath = string . Empty ;
Settings . Default . PathsSet = false ;
Settings . Default . Save ( ) ;
}
if ( Directory . Exists ( Settings . Default . OutPath ) )
{
if ( basep )
{
ret = true ;
}
}
else
{
Settings . Default . OutPath = string . Empty ;
Settings . Default . PathsSet = false ;
Settings . Default . Save ( ) ;
}
}
catch ( Exception )
{
ret = false ;
}
return ret ;
2020-03-01 16:07:22 +01:00
}
2020-03-08 23:25:34 +01:00
2020-03-13 23:35:20 +01:00
public void GetBases ( GameConsoles Console )
{
List < GameBases > lTemp = new List < GameBases > ( ) ;
string vcbpath = $@"bases/bases.vcb{Console.ToString().ToLower()}" ;
lTemp = VCBTool . ReadBasesFromVCB ( vcbpath ) ;
LBases . Clear ( ) ;
GameBases custom = new GameBases ( ) ;
custom . Name = "Custom" ;
custom . Region = Regions . EU ;
LBases . Add ( custom ) ;
foreach ( GameBases gb in lTemp )
{
LBases . Add ( gb ) ;
}
lGameBasesString . Clear ( ) ;
foreach ( GameBases gb in LBases )
{
LGameBasesString . Add ( $"{gb.Name} {gb.Region}" ) ;
}
}
2020-03-08 23:25:34 +01:00
2020-03-13 23:35:20 +01:00
private void GetAllBases ( )
{
LN64 . Clear ( ) ;
LNDS . Clear ( ) ;
LNES . Clear ( ) ;
LSNES . Clear ( ) ;
LGBA . Clear ( ) ;
lNDS = VCBTool . ReadBasesFromVCB ( $@"bases/bases.vcbnds" ) ;
lNES = VCBTool . ReadBasesFromVCB ( $@"bases/bases.vcbnes" ) ;
lSNES = VCBTool . ReadBasesFromVCB ( $@"bases/bases.vcbsnes" ) ;
lN64 = VCBTool . ReadBasesFromVCB ( $@"bases/bases.vcbn64" ) ;
lGBA = VCBTool . ReadBasesFromVCB ( $@"bases/bases.vcbgba" ) ;
CreateSettingIfNotExist ( lNDS , GameConsoles . NDS ) ;
CreateSettingIfNotExist ( lNES , GameConsoles . NES ) ;
CreateSettingIfNotExist ( lSNES , GameConsoles . SNES ) ;
CreateSettingIfNotExist ( lGBA , GameConsoles . GBA ) ;
CreateSettingIfNotExist ( lN64 , GameConsoles . N64 ) ;
}
private void CreateSettingIfNotExist ( List < GameBases > l , GameConsoles console )
{
string file = $@"keys\{console.ToString().ToLower()}.vck" ;
if ( ! File . Exists ( file ) )
{
List < TKeys > temp = new List < TKeys > ( ) ;
foreach ( GameBases gb in l )
{
TKeys tempkey = new TKeys ( ) ;
tempkey . Base = gb ;
temp . Add ( tempkey ) ;
}
KeyFile . ExportFile ( temp , console ) ;
}
}
2020-04-01 01:48:50 +02:00
public void getTempList ( GameConsoles console )
{
switch ( console )
{
case GameConsoles . NDS :
Ltemp = LNDS ;
break ;
case GameConsoles . N64 :
Ltemp = LN64 ;
break ;
case GameConsoles . GBA :
Ltemp = LGBA ;
break ;
case GameConsoles . NES :
Ltemp = LNES ;
break ;
case GameConsoles . SNES :
Ltemp = LSNES ;
break ;
}
}
2020-03-13 23:35:20 +01:00
2020-04-01 01:48:50 +02:00
public void EnterKey ( bool ck )
2020-03-13 23:35:20 +01:00
{
2020-04-01 01:48:50 +02:00
EnterKey ek = new EnterKey ( ck ) ;
2020-03-13 23:35:20 +01:00
ek . ShowDialog ( ) ;
}
2020-04-01 01:48:50 +02:00
public bool checkcKey ( string key )
{
if ( 487391367 = = key . GetHashCode ( ) )
{
Settings . Default . Ckey = key ;
Settings . Default . Save ( ) ;
return true ;
}
return false ;
}
public bool isCkeySet ( )
{
if ( Settings . Default . Ckey . GetHashCode ( ) = = 487391367 )
{
return true ;
}
else
{
return false ;
}
}
2020-03-24 00:18:36 +01:00
public bool checkKey ( string key )
2020-03-13 23:35:20 +01:00
{
if ( GbTemp . KeyHash = = key . GetHashCode ( ) )
{
UpdateKeyInFile ( key , $@"keys\{GetConsoleOfBase(gbTemp).ToString().ToLower()}.vck" , GbTemp , GetConsoleOfBase ( gbTemp ) ) ;
2020-03-24 00:18:36 +01:00
return true ;
2020-03-13 23:35:20 +01:00
}
2020-03-24 00:18:36 +01:00
return false ;
2020-03-13 23:35:20 +01:00
}
public void UpdateKeyInFile ( string key , string file , GameBases Base , GameConsoles console )
{
if ( File . Exists ( file ) )
{
var temp = KeyFile . ReadBasesFromKeyFile ( file ) ;
foreach ( TKeys t in temp )
{
2020-04-01 01:48:50 +02:00
if ( t . Base . Name = = Base . Name & & t . Base . Region = = Base . Region )
2020-03-13 23:35:20 +01:00
{
t . Tkey = key ;
}
}
File . Delete ( file ) ;
KeyFile . ExportFile ( temp , console ) ;
}
}
2020-04-01 01:48:50 +02:00
public bool isKeySet ( GameBases bases )
{
var temp = KeyFile . ReadBasesFromKeyFile ( $@"keys\{GetConsoleOfBase(bases).ToString().ToLower()}.vck" ) ;
foreach ( TKeys t in temp )
{
if ( t . Base . Name = = bases . Name & & t . Base . Region = = bases . Region )
{
if ( t . Tkey ! = null )
{
return true ;
}
}
}
return false ;
}
2020-03-13 23:35:20 +01:00
public GameConsoles GetConsoleOfBase ( GameBases gb )
{
GameConsoles ret = new GameConsoles ( ) ;
bool cont = false ;
foreach ( GameBases b in lNDS )
{
if ( b = = gb )
{
ret = GameConsoles . NDS ;
cont = true ;
}
}
if ( ! cont )
{
foreach ( GameBases b in lN64 )
{
if ( b = = gb )
{
ret = GameConsoles . N64 ;
cont = true ;
}
}
}
if ( ! cont )
{
foreach ( GameBases b in lNES )
{
if ( b = = gb )
{
ret = GameConsoles . NES ;
cont = true ;
}
}
}
if ( ! cont )
{
foreach ( GameBases b in lSNES )
{
if ( b = = gb )
{
ret = GameConsoles . SNES ;
cont = true ;
}
}
}
if ( ! cont )
{
foreach ( GameBases b in lGBA )
{
if ( b = = gb )
{
ret = GameConsoles . GBA ;
cont = true ;
}
}
}
return ret ;
}
2020-04-01 01:48:50 +02:00
public List < bool > getInfoOfBase ( GameBases gb )
{
List < bool > info = new List < bool > ( ) ;
if ( Directory . Exists ( $@"{Settings.Default.BasePath}\{gb.Name}[{gb.Region}]" ) )
{
info . Add ( true ) ;
}
else
{
info . Add ( false ) ;
}
if ( isKeySet ( gb ) )
{
info . Add ( true ) ;
}
else
{
info . Add ( false ) ;
}
if ( isCkeySet ( ) )
{
info . Add ( true ) ;
}
else
{
info . Add ( false ) ;
}
return info ;
}
2020-04-02 21:45:24 +02:00
public void SetInjectPath ( )
{
using ( var dialog = new System . Windows . Forms . FolderBrowserDialog ( ) )
{
System . Windows . Forms . DialogResult result = dialog . ShowDialog ( ) ;
if ( result = = DialogResult . OK )
{
try
{
if ( DirectoryIsEmpty ( dialog . SelectedPath ) )
{
Settings . Default . OutPath = dialog . SelectedPath ;
Settings . Default . SetOutOnce = true ;
Settings . Default . Save ( ) ;
UpdatePathSet ( ) ;
}
else
{
DialogResult r = MessageBox . Show ( "Folder contains Files or Subfolders, do you really want to use this folder as the Inject Folder?" , "Information" , MessageBoxButtons . YesNo , MessageBoxIcon . Warning ) ;
if ( r = = DialogResult . Yes )
{
Settings . Default . OutPath = dialog . SelectedPath ;
Settings . Default . SetOutOnce = true ;
Settings . Default . Save ( ) ;
UpdatePathSet ( ) ;
}
else
{
SetInjectPath ( ) ;
}
}
} catch ( Exception e )
{
Console . WriteLine ( e . Message ) ;
MessageBox . Show ( "An Error occured, please try again!" , "Error" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
}
}
}
ArePathsSet ( ) ;
}
public void SetBasePath ( )
{
using ( var dialog = new System . Windows . Forms . FolderBrowserDialog ( ) )
{
System . Windows . Forms . DialogResult result = dialog . ShowDialog ( ) ;
if ( result = = DialogResult . OK )
{
try
{
if ( DirectoryIsEmpty ( dialog . SelectedPath ) )
{
Settings . Default . BasePath = dialog . SelectedPath ;
Settings . Default . SetBaseOnce = true ;
Settings . Default . Save ( ) ;
UpdatePathSet ( ) ;
}
else
{
DialogResult r = MessageBox . Show ( "Folder contains Files or Subfolders, do you really want to use this folder as the Base Folder?" , "Information" , MessageBoxButtons . YesNo , MessageBoxIcon . Warning ) ;
if ( r = = DialogResult . Yes )
{
Settings . Default . BasePath = dialog . SelectedPath ;
Settings . Default . SetBaseOnce = true ;
Settings . Default . Save ( ) ;
UpdatePathSet ( ) ;
}
else
{
SetBasePath ( ) ;
}
}
}
catch ( Exception e )
{
Console . WriteLine ( e . Message ) ;
MessageBox . Show ( "An Error occured, please try again!" , "Error" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
}
}
}
ArePathsSet ( ) ;
}
public void ArePathsSet ( )
{
if ( ValidatePathsStillExist ( ) )
{
Settings . Default . PathsSet = true ;
Settings . Default . Save ( ) ;
}
UpdatePathSet ( ) ;
}
public bool DirectoryIsEmpty ( string path )
{
int fileCount = Directory . GetFiles ( path ) . Length ;
if ( fileCount > 0 )
{
return false ;
}
string [ ] dirs = Directory . GetDirectories ( path ) ;
foreach ( string dir in dirs )
{
if ( ! DirectoryIsEmpty ( dir ) )
{
return false ;
}
}
return true ;
}
2020-03-01 16:07:22 +01:00
}
}