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(); } }