PlombirLauncher/Launcher-UI/Views/LoadingWindow.axaml.cs

75 lines
2.1 KiB
C#

using System;
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.VisualTree;
using Plombir;
using LauncherGUI.ViewModels;
using System.Threading;
namespace LauncherGUI.Views;
public partial class LoadingWindow : Window
{
private Launcher ln;
private Task? _buildingTask;
private readonly MainWindowViewModel _mainWindowVM;
// Tokens for controlling download task.
CancellationTokenSource tokenSource = new CancellationTokenSource();
public LoadingWindow(MainWindowViewModel mainWindowVM)
{
_mainWindowVM = mainWindowVM;
ln = new Launcher(_mainWindowVM.SelectedVersion ?? "1.20.1", _mainWindowVM.RuntimeLocation ?? "./runtime");
InitializeComponent();
DataContext = new LoadingWindowViewModel();
}
public async Task InitLoading()
{
var viewModel = DataContext as LoadingWindowViewModel;
if (viewModel == null)
{
throw new InvalidOperationException("No DataContext set");
}
Task updateGui = new Task(async () =>
{
while (ln.DownloadStatus != "Finished!")
{
viewModel.Progress = ln.DownloadProgress;
viewModel.LoadingStatus = ln.DownloadStatus ?? "Looking at qubits...";
await Task.Delay(1000);
}
viewModel.Progress = 100;
});
updateGui.Start();
_buildingTask = ln.BuildLauncher(tokenSource.Token);
await _buildingTask;
}
public async Task RunMinecraft(bool IsLicensed)
{
var session = ln.CreateOfflineSession(_mainWindowVM.Usernick);
if (IsLicensed)
{
session = ln.CreateLicensedSession(_mainWindowVM.UUID, _mainWindowVM.AccsesToken, _mainWindowVM.Usernick);
}
await ln.RunLauncher(session);
}
private void onStopDownloadClick(object sender, RoutedEventArgs e)
{
var button = sender as Button;
tokenSource.Cancel();
System.Console.WriteLine("Loading disabled gracefully.");
Close();
}
}