RC2Launcher-Ace/Bobocraft 2 Launcher v11 actually fixed countdown/Bobocraft 2 Launcher Update Assistant/MainWindow.xaml.cs

226 lines
7.2 KiB
C#

using Bobocraft_2_Launcher_Update_Assistant;
using System;
using System.ComponentModel;
using System.Configuration;
using System.Diagnostics;
using System.Diagnostics.Eventing.Reader;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace Bobocraft_2_Launcher_Update_Assistant
{
enum LauncherStatus
{
ready,
failed,
downloadingGame,
downloadingUpdate,
awaitingInput
}
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private string rootPath;
private string versionFile;
private string launcherVersionFile;
private string tempZip;
private string launcherExe;
private string launcherPath;
private string configFile;
private bool isNewInstall;
private string chosenUserName;
private string launcherVersionFileLink;
private string launcherZipLink;
private LauncherStatus _status;
internal LauncherStatus Status
{
get => _status;
set
{
_status = value;
switch (_status)
{
case LauncherStatus.ready:
PlayButton.Content = "Play Bobocraft 2";
break;
case LauncherStatus.failed:
PlayButton.Content = "Install/Update Failed - Retry";
break;
case LauncherStatus.downloadingGame:
PlayButton.Content = "Installing Mod";
break;
case LauncherStatus.downloadingUpdate:
PlayButton.Content = "Updating";
break;
case LauncherStatus.awaitingInput:
PlayButton.Content = "Done";
break;
default:
break;
}
}
}
public MainWindow()
{
InitializeComponent();
launcherPath = Directory.GetCurrentDirectory();
rootPath = launcherPath;
launcherExe = Path.Combine(rootPath, "Bobocraft 2 Launcher.exe");
versionFile = Path.Combine(rootPath, "version.txt");
launcherVersionFile = Path.Combine(rootPath, "launcherversion.txt");
tempZip = Path.Combine(rootPath, "temp");
launcherVersionFileLink = "https://drive.google.com/uc?export=download&id=1MnPRLYIwUUQ_QBPMol8TQmQkaISoTldD";
launcherZipLink = "https://cloud.norbipeti.eu/s/YWYN2mQL4p7ptWn/download/asd.zip";
}
private void CheckForLauncherUpdates()
{
if (File.Exists(launcherVersionFile))
{
Version localLauncherVersion = new Version(File.ReadAllText(launcherVersionFile));
LauncherVersionText.Text = localLauncherVersion.ToString();
try
{
WebClient webClient = new WebClient();
Version onlineLauncherVersion = new Version(webClient.DownloadString(launcherVersionFileLink));
if (onlineLauncherVersion.IsDifferentThan(localLauncherVersion))
{
UpdateLauncher(onlineLauncherVersion);
}
else
{
ProcessStartInfo process = new ProcessStartInfo(@launcherExe);
Process.Start(process);
this.Close();
}
}
catch (Exception ex)
{
Status = LauncherStatus.failed;
MessageBox.Show($"Error checking for launcher updates: {ex}");
}
}
else
{
UpdateLauncher(Version.zero);
}
}
private void UpdateLauncher(Version _onlinelauncherVersion)
{
try
{
WebClient webClient = new WebClient();
Status = LauncherStatus.downloadingUpdate;
_onlinelauncherVersion = new Version(webClient.DownloadString(launcherVersionFileLink));
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadLauncherCompletedCallback);
webClient.DownloadFileAsync(new Uri(launcherZipLink), tempZip, _onlinelauncherVersion);
}
catch (Exception ex)
{
Status = LauncherStatus.failed;
MessageBox.Show($"Error downloading launcher update: {ex}");
}
}
private void DownloadLauncherCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
try
{
string onlineLauncherVersion = ((Version)e.UserState).ToString();
ZipFile.ExtractToDirectory(tempZip, rootPath, true);
ProcessStartInfo process = new ProcessStartInfo(@launcherExe);
File.WriteAllText(launcherVersionFile, onlineLauncherVersion);
File.Delete(tempZip);
Process.Start(process);
this.Close();
}
catch (Exception ex)
{
Status = LauncherStatus.failed;
MessageBox.Show($"Error updating launcher: {ex}");
}
}
private void PlayButton_Click(object sender, RoutedEventArgs e)
{
}
private void Window_ContentRendered(object sender, EventArgs e)
{
CheckForLauncherUpdates();
}
}
struct Version
{
internal static Version zero = new Version(0, 0, 0);
private short major;
private short minor;
private short subMinor;
internal Version(short _major, short _minor, short _subMinor)
{
major = _major;
minor = _minor;
subMinor = _subMinor;
}
internal Version(string _version)
{
string[] versionStrings = _version.Split('.');
if (versionStrings.Length != 3)
{
major = 0;
minor = 0;
subMinor = 0;
return;
}
major = short.Parse(versionStrings[0]);
minor = short.Parse(versionStrings[1]);
subMinor = short.Parse(versionStrings[2]);
}
internal bool IsDifferentThan(Version _otherVersion)
{
if (major != _otherVersion.major)
{
return true;
}
else
{
if (minor != _otherVersion.minor)
{
return true;
}
else
{
if (subMinor != _otherVersion.subMinor)
{
return true;
}
}
}
return false;
}
public override string ToString()
{
return $"{major}.{minor}.{subMinor}";
}
}
}