using ServerManagerTool.Common.Lib;
using ServerManagerTool.Common.Utils;
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using WPFSharp.Globalizer;
namespace ServerManagerTool
{
///
/// Interaction logic for AutoUpdateWindow.xaml
///
public partial class AutoUpdateWindow : Window
{
private readonly GlobalizedApplication _globalizer = GlobalizedApplication.Instance;
private readonly SteamCmdUpdater updater = new SteamCmdUpdater();
private CancellationTokenSource cancelSource;
public AutoUpdateWindow()
{
InitializeComponent();
WindowUtils.RemoveDefaultResourceDictionary(this, Config.Default.DefaultGlobalizationFile);
this.ErrorLabel.Visibility = Visibility.Collapsed;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
cancelSource = new CancellationTokenSource();
updater.UpdateSteamCmdAsync(Config.Default.DataPath, new Progress(async u =>
{
var message = string.IsNullOrWhiteSpace(u.StatusKey) ? string.Empty : _globalizer.GetResourceString(u.StatusKey) ?? u.StatusKey;
this.StatusLabel.Content = message;
this.CompletionProgress.Value = u.CompletionPercent;
if (u.FailureText != null)
{
this.ErrorLabel.Text = u.FailureText;
this.ErrorLabel.Visibility = Visibility.Visible;
await Task.Delay(10000);
Environment.Exit(1);
}
if (u.CompletionPercent >= 100 || u.Cancelled)
{
await Application.Current.Dispatcher.InvokeAsync(() =>
{
var mainWindow = new MainWindow();
mainWindow.Show();
this.Close();
});
}
}), cancelSource.Token);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (cancelSource != null)
cancelSource.Cancel();
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (cancelSource != null)
cancelSource.Cancel();
}
}
}