2019-04-22 18:41:43 +12:00
using System ;
using System.Collections.Generic ;
using System.Collections.ObjectModel ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using System.Windows ;
using System.Windows.Controls ;
using System.Windows.Data ;
using System.Windows.Documents ;
using System.Windows.Input ;
using System.Windows.Media ;
using System.Windows.Media.Imaging ;
using System.Windows.Navigation ;
using System.Net ;
using System.IO ;
using System.Web.Script.Serialization ;
using System.Runtime.Serialization ;
using ModAssistant.Pages ;
2019-04-30 04:34:41 +12:00
using System.Reflection ;
2019-04-22 18:41:43 +12:00
namespace ModAssistant
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public static MainWindow Instance ;
2019-05-19 03:32:14 +12:00
public static bool ModsOpened = false ;
public static string GameVersion ;
2019-04-22 18:41:43 +12:00
public string MainText
{
get
{
return MainTextBlock . Text ;
}
set
{
Dispatcher . Invoke ( new Action ( ( ) = > { MainWindow . Instance . MainTextBlock . Text = value ; } ) ) ;
}
}
public MainWindow ( )
{
InitializeComponent ( ) ;
Instance = this ;
2019-05-04 23:07:52 +12:00
VersionText . Text = App . Version ;
2019-04-30 04:34:41 +12:00
2019-05-21 20:22:39 +12:00
if ( Utils . isVoid ( ) )
{
Main . Content = Invalid . Instance ;
MainWindow . Instance . ModsButton . IsEnabled = false ;
MainWindow . Instance . OptionsButton . IsEnabled = false ;
MainWindow . Instance . IntroButton . IsEnabled = false ;
MainWindow . Instance . AboutButton . IsEnabled = false ;
MainWindow . Instance . GameVersionsBox . IsEnabled = false ;
return ;
}
2019-05-19 03:32:14 +12:00
Main . Content = Intro . Instance ;
List < string > versions ;
string json = string . Empty ;
HttpWebRequest request = ( HttpWebRequest ) WebRequest . Create ( Utils . Constants . BeatModsAPIUrl + "version" ) ;
request . AutomaticDecompression = DecompressionMethods . GZip ;
request . UserAgent = "ModAssistant/" + App . Version ;
versions = null ;
try
2019-04-22 18:41:43 +12:00
{
2019-05-19 03:32:14 +12:00
using ( HttpWebResponse response = ( HttpWebResponse ) request . GetResponse ( ) )
using ( Stream stream = response . GetResponseStream ( ) )
using ( StreamReader reader = new StreamReader ( stream ) )
{
2019-05-21 20:22:39 +12:00
JavaScriptSerializer serializer = new JavaScriptSerializer ( ) ;
2019-05-19 03:32:14 +12:00
versions = serializer . Deserialize < string [ ] > ( reader . ReadToEnd ( ) ) . ToList ( ) ;
}
2019-05-21 20:22:39 +12:00
GameVersion = GetGameVersion ( versions ) ;
2019-05-19 03:32:14 +12:00
GameVersionsBox . ItemsSource = versions ;
GameVersionsBox . SelectedValue = GameVersion ;
}
catch ( Exception e )
{
2019-05-19 03:50:22 +12:00
GameVersionsBox . IsEnabled = false ;
2019-05-19 03:32:14 +12:00
MessageBox . Show ( "Could not load game versions, Mods tab will be unavailable.\n" + e ) ;
2019-04-22 18:41:43 +12:00
}
2019-05-19 03:32:14 +12:00
if ( ! String . IsNullOrEmpty ( GameVersion ) & & Properties . Settings . Default . Agreed )
{
MainWindow . Instance . ModsButton . IsEnabled = true ;
}
2019-04-22 18:41:43 +12:00
}
2019-05-21 20:22:39 +12:00
private string GetGameVersion ( List < string > versions )
{
if ( App . BeatSaberInstallType = = "Steam" )
{
string steamVersion = Utils . GetSteamVersion ( ) ;
if ( ! String . IsNullOrEmpty ( steamVersion ) & & versions . Contains ( steamVersion ) )
return steamVersion ;
}
string versionsString = String . Join ( "," , versions . ToArray ( ) ) ;
if ( Properties . Settings . Default . AllGameVersions ! = versionsString )
{
Properties . Settings . Default . AllGameVersions = versionsString ;
Properties . Settings . Default . Save ( ) ;
Utils . ShowMessageBoxAsync ( "It looks like there's been a game update.\n\nPlease double check that the correct version is selected at the bottom left corner!" , "New Game Version Detected!" ) ;
return versions [ 0 ] ;
}
if ( ! String . IsNullOrEmpty ( Properties . Settings . Default . GameVersion ) & & versions . Contains ( Properties . Settings . Default . GameVersion ) )
return Properties . Settings . Default . GameVersion ;
return versions [ 0 ] ;
}
2019-04-22 18:41:43 +12:00
private void ModsButton_Click ( object sender , RoutedEventArgs e )
{
Main . Content = Mods . Instance ;
2019-05-19 03:32:14 +12:00
if ( ! ModsOpened )
{
Mods . Instance . LoadMods ( ) ;
ModsOpened = true ;
return ;
}
if ( Mods . Instance . PendingChanges )
{
Mods . Instance . LoadMods ( ) ;
Mods . Instance . PendingChanges = false ;
}
2019-04-22 18:41:43 +12:00
}
private void IntroButton_Click ( object sender , RoutedEventArgs e )
{
Main . Content = Intro . Instance ;
}
private void AboutButton_Click ( object sender , RoutedEventArgs e )
{
Main . Content = About . Instance ;
}
private void OptionsButton_Click ( object sender , RoutedEventArgs e )
{
Main . Content = Options . Instance ;
}
private void InstallButton_Click ( object sender , RoutedEventArgs e )
{
Mods . Instance . InstallMods ( ) ;
}
private void InfoButton_Click ( object sender , RoutedEventArgs e )
{
Mods . ModListItem mod = ( ( Mods . ModListItem ) Mods . Instance . ModsListView . SelectedItem ) ;
string infoUrl = mod . ModInfo . link ;
if ( String . IsNullOrEmpty ( infoUrl ) )
{
MessageBox . Show ( mod . ModName + " does not have an info page" ) ;
}
else
{
System . Diagnostics . Process . Start ( infoUrl ) ;
}
}
2019-05-19 03:32:14 +12:00
private void GameVersionsBox_SelectionChanged ( object sender , SelectionChangedEventArgs e )
{
string oldGameVersion = GameVersion ;
GameVersion = ( sender as ComboBox ) . SelectedItem . ToString ( ) ;
if ( String . IsNullOrEmpty ( oldGameVersion ) ) return ;
Properties . Settings . Default . GameVersion = GameVersion ;
Properties . Settings . Default . Save ( ) ;
if ( ModsOpened )
{
Mods . Instance . LoadMods ( ) ;
}
}
2019-04-22 18:41:43 +12:00
}
}