2020-02-03 00:01:48 +13:00
using System ;
using System.Collections.Generic ;
2019-04-22 18:41:43 +12:00
using System.Threading.Tasks ;
using System.Windows ;
using System.Windows.Controls ;
2019-12-19 18:41:32 +13:00
using System.IO ;
using Path = System . IO . Path ;
2020-02-03 00:01:48 +13:00
using System.Net.Http ;
2019-04-22 18:41:43 +12:00
namespace ModAssistant.Pages
{
/// <summary>
/// Interaction logic for Options.xaml
/// </summary>
public partial class Options : Page
{
public static Options Instance = new Options ( ) ;
public string InstallDirectory { get ; set ; }
public string InstallType { get ; set ; }
public bool SaveSelection { get ; set ; }
public bool CheckInstalledMods { get ; set ; }
2019-05-04 23:07:52 +12:00
public bool SelectInstalledMods { get ; set ; }
2019-05-08 04:56:54 +12:00
public bool ModelSaberProtocolHandlerEnabled { get ; set ; }
public bool BeatSaverProtocolHandlerEnabled { get ; set ; }
public bool ModSaberProtocolHandlerEnabled { get ; set ; }
2019-12-20 18:25:34 +13:00
public string LogURL { get ; private set ; }
2019-04-22 18:41:43 +12:00
public Options ( )
{
InitializeComponent ( ) ;
InstallDirectory = App . BeatSaberInstallDirectory ;
InstallType = App . BeatSaberInstallType ;
SaveSelection = App . SaveModSelection ;
CheckInstalledMods = App . CheckInstalledMods ;
2019-05-04 23:07:52 +12:00
SelectInstalledMods = App . SelectInstalledMods ;
if ( ! CheckInstalledMods )
SelectInstalled . IsEnabled = false ;
2019-04-22 18:41:43 +12:00
2019-05-08 04:56:54 +12:00
UpdateHandlerStatus ( ) ;
2019-05-05 04:08:54 +12:00
2019-04-22 18:41:43 +12:00
this . DataContext = this ;
}
2019-05-08 04:56:54 +12:00
public void UpdateHandlerStatus ( )
{
ModelSaberProtocolHandlerEnabled = OneClickInstaller . IsRegistered ( "modelsaber" ) ;
BeatSaverProtocolHandlerEnabled = OneClickInstaller . IsRegistered ( "beatsaver" ) ;
ModSaberProtocolHandlerEnabled = OneClickInstaller . IsRegistered ( "modsaber" ) ;
}
private void SelectDirButton_Click ( object sender , RoutedEventArgs e )
2019-04-22 18:41:43 +12:00
{
Utils . GetManualDir ( ) ;
2019-05-25 08:32:34 +12:00
DirectoryTextBlock . Text = InstallDirectory ;
GameTypeTextBlock . Text = InstallType ;
2019-04-22 18:41:43 +12:00
}
2019-12-19 17:13:44 +13:00
private void OpenDirButton_Click ( object sender , RoutedEventArgs e )
{
System . Diagnostics . Process . Start ( InstallDirectory ) ;
}
2019-04-22 18:41:43 +12:00
private void Test_Click ( object sender , RoutedEventArgs e )
{
MessageBox . Show ( Utils . GetSteamDir ( ) ) ;
}
private void SaveSelected_Checked ( object sender , RoutedEventArgs e )
{
Properties . Settings . Default . SaveSelected = true ;
App . SaveModSelection = true ;
Properties . Settings . Default . Save ( ) ;
}
private void SaveSelected_Unchecked ( object sender , RoutedEventArgs e )
{
Properties . Settings . Default . SaveSelected = false ;
App . SaveModSelection = false ;
Properties . Settings . Default . Save ( ) ;
}
private void CheckInstalled_Checked ( object sender , RoutedEventArgs e )
{
Properties . Settings . Default . CheckInstalled = true ;
App . CheckInstalledMods = true ;
CheckInstalledMods = true ;
Properties . Settings . Default . Save ( ) ;
2019-05-04 23:07:52 +12:00
SelectInstalled . IsEnabled = true ;
2019-05-19 03:32:14 +12:00
if ( MainWindow . ModsOpened )
Mods . Instance . PendingChanges = true ;
2019-04-22 18:41:43 +12:00
}
private void CheckInstalled_Unchecked ( object sender , RoutedEventArgs e )
{
Properties . Settings . Default . CheckInstalled = false ;
App . CheckInstalledMods = false ;
CheckInstalledMods = false ;
Properties . Settings . Default . Save ( ) ;
2019-05-04 23:07:52 +12:00
SelectInstalled . IsEnabled = false ;
2019-05-19 03:32:14 +12:00
if ( MainWindow . ModsOpened )
Mods . Instance . PendingChanges = true ;
2019-04-22 18:41:43 +12:00
}
2019-05-08 04:56:54 +12:00
public void ModelSaberProtocolHandler_Checked ( object sender , RoutedEventArgs e )
2019-04-22 18:41:43 +12:00
{
2019-05-08 04:56:54 +12:00
OneClickInstaller . Register ( "modelsaber" ) ;
}
2019-04-22 18:41:43 +12:00
2019-05-08 04:56:54 +12:00
public void ModelSaberProtocolHandler_Unchecked ( object sender , RoutedEventArgs e )
{
OneClickInstaller . Unregister ( "modelsaber" ) ;
2019-04-22 18:41:43 +12:00
}
2019-05-08 04:56:54 +12:00
public void BeatSaverProtocolHandler_Checked ( object sender , RoutedEventArgs e )
2019-04-22 18:41:43 +12:00
{
2019-05-08 04:56:54 +12:00
OneClickInstaller . Register ( "beatsaver" ) ;
}
2019-04-22 18:41:43 +12:00
2019-05-08 04:56:54 +12:00
public void BeatSaverProtocolHandler_Unchecked ( object sender , RoutedEventArgs e )
{
OneClickInstaller . Unregister ( "beatsaver" ) ;
}
2019-05-04 23:07:52 +12:00
private void SelectInstalled_Checked ( object sender , RoutedEventArgs e )
{
Properties . Settings . Default . SelectInstalled = true ;
App . SelectInstalledMods = true ;
SelectInstalledMods = true ;
Properties . Settings . Default . Save ( ) ;
}
private void SelectInstalled_Unchecked ( object sender , RoutedEventArgs e )
{
Properties . Settings . Default . SelectInstalled = false ;
App . SelectInstalledMods = false ;
SelectInstalledMods = false ;
Properties . Settings . Default . Save ( ) ;
}
2019-12-19 18:24:12 +13:00
2019-12-20 18:25:34 +13:00
private async void OpenLogsDirButton_Click ( object sender , RoutedEventArgs e )
{
try
{
MainWindow . Instance . MainText = "Uploading Log..." ;
2020-02-03 00:01:48 +13:00
await Task . Run ( async ( ) = > await UploadLog ( ) ) ;
2019-12-20 18:25:34 +13:00
System . Diagnostics . Process . Start ( LogURL ) ;
Clipboard . SetText ( LogURL ) ;
MainWindow . Instance . MainText = "Log URL Copied To Clipboard!" ;
}
catch ( Exception exception )
{
MainWindow . Instance . MainText = "Uploading Log Failed." ;
MessageBox . Show ( "Could not upload log file to Teknik, please try again or send the file manually.\n ================= \n" + exception , "Uploading log failed!" ) ;
System . Diagnostics . Process . Start ( Path . Combine ( InstallDirectory , "Logs" ) ) ;
}
}
2020-02-03 00:01:48 +13:00
private async Task UploadLog ( )
2019-12-20 18:25:34 +13:00
{
const string DateFormat = "yyyy-mm-dd HH:mm:ss" ;
DateTime now = DateTime . Now ;
2020-02-03 00:01:48 +13:00
var nvc = new List < KeyValuePair < string , string > > ( )
2019-12-20 18:25:34 +13:00
{
2020-02-03 00:01:48 +13:00
new KeyValuePair < string , string > ( "title" , $"_latest.log ({now.ToString(DateFormat)})" ) ,
new KeyValuePair < string , string > ( "expireUnit" , "hour" ) ,
new KeyValuePair < string , string > ( "expireLength" , "5" ) ,
new KeyValuePair < string , string > ( "code" , File . ReadAllText ( Path . Combine ( InstallDirectory , "Logs" , "_latest.log" ) ) ) ,
} ;
var req = new HttpRequestMessage ( HttpMethod . Post , Utils . Constants . TeknikAPIUrl + "Paste" )
{
Content = new FormUrlEncodedContent ( nvc ) ,
} ;
var resp = await Http . HttpClient . SendAsync ( req ) ;
var body = await resp . Content . ReadAsStringAsync ( ) ;
var TeknikResponse = Http . JsonSerializer . Deserialize < Utils . TeknikPasteResponse > ( body ) ;
2019-12-20 18:25:34 +13:00
LogURL = TeknikResponse . result . url ;
2019-12-19 18:24:12 +13:00
}
private async void YeetBSIPAButton_Click ( object sender , RoutedEventArgs e )
{
if ( Mods . Instance . AllModsList = = null )
{
MainWindow . Instance . MainText = "Getting Mod List..." ;
2020-02-03 00:01:48 +13:00
await Mods . Instance . GetAllMods ( ) ;
2019-12-19 18:24:12 +13:00
MainWindow . Instance . MainText = "Finding BSIPA Version..." ;
await Task . Run ( ( ) = > Mods . Instance . GetBSIPAVersion ( ) ) ;
}
2020-02-03 00:04:30 +13:00
foreach ( Mod mod in Mods . InstalledMods )
2019-12-19 18:24:12 +13:00
{
if ( mod . name . ToLower ( ) = = "bsipa" )
{
Mods . Instance . UninstallMod ( mod ) ;
break ;
}
}
MainWindow . Instance . MainText = "BSIPA Uninstalled..." ;
}
2019-12-19 18:41:32 +13:00
private async void YeetModsButton_Click ( object sender , RoutedEventArgs e )
2019-12-19 18:24:12 +13:00
{
2019-12-19 18:41:32 +13:00
if ( System . Windows . Forms . MessageBox . Show ( $"Are you sure you want to remove ALL mods?\nThis cannot be undone." , $"Uninstall All Mods?" , System . Windows . Forms . MessageBoxButtons . YesNo ) = = System . Windows . Forms . DialogResult . Yes )
{
if ( Mods . Instance . AllModsList = = null )
{
MainWindow . Instance . MainText = "Getting Mod List..." ;
2020-02-03 00:01:48 +13:00
await Mods . Instance . CheckInstalledMods ( ) ;
2019-12-19 18:41:32 +13:00
}
foreach ( Mod mod in Mods . InstalledMods )
{
Mods . Instance . UninstallMod ( mod ) ;
}
if ( Directory . Exists ( Path . Combine ( App . BeatSaberInstallDirectory , "Plugins" ) ) )
Directory . Delete ( Path . Combine ( App . BeatSaberInstallDirectory , "Plugins" ) , true ) ;
if ( Directory . Exists ( Path . Combine ( App . BeatSaberInstallDirectory , "Libs" ) ) )
Directory . Delete ( Path . Combine ( App . BeatSaberInstallDirectory , "Libs" ) , true ) ;
if ( Directory . Exists ( Path . Combine ( App . BeatSaberInstallDirectory , "IPA" ) ) )
Directory . Delete ( Path . Combine ( App . BeatSaberInstallDirectory , "IPA" ) , true ) ;
MainWindow . Instance . MainText = "All Mods Uninstalled..." ;
}
2019-12-19 18:24:12 +13:00
}
2019-04-22 18:41:43 +12:00
}
}