private async Task DownloadVersion(BLVersion v, VersionDownloader downloader, string dlPath, CancellationTokenSource cancelSource) { try { ViewModels.LauncherModel.Default.CurrentState = ViewModels.LauncherModel.StateChange.isInitializing; await downloader.Download(v.DisplayName, v.UUID, 1, dlPath, (current, total) => { if (ViewModels.LauncherModel.Default.CurrentState == ViewModels.LauncherModel.StateChange.isInitializing) { ViewModels.LauncherModel.Default.CurrentState = ViewModels.LauncherModel.StateChange.isDownloading; System.Diagnostics.Debug.WriteLine("Actual download started"); if (total.HasValue) ViewModels.LauncherModel.Default.TotalProgress = total.Value; } ViewModels.LauncherModel.Default.CurrentProgress = current; }, cancelSource.Token); System.Diagnostics.Debug.WriteLine("Download complete"); ViewModels.LauncherModel.Default.CurrentState = ViewModels.LauncherModel.StateChange.None; } catch (TaskCanceledException e) { ViewModels.LauncherModel.Default.CurrentState = ViewModels.LauncherModel.StateChange.None; throw e; } catch (Exception e) { ViewModels.LauncherModel.Default.CurrentState = ViewModels.LauncherModel.StateChange.None; System.Diagnostics.Debug.WriteLine("Download failed:\n" + e.ToString()); ErrorScreenShow.errormsg("Error_AppDownloadFailed_Title", "Error_AppDownloadFailed", e); throw e; } }
private async Task<bool> Download(BLVersion v, bool RunAfterwards) { System.Diagnostics.Debug.WriteLine("Download start"); bool wasCanceled = false; cancelSource = new CancellationTokenSource(); ViewModels.LauncherModel.Default.ShowProgressBar = true; ViewModels.LauncherModel.Default.AllowCancel = true; ViewModels.LauncherModel.Default.CancelCommand = new RelayCommand((o) => Cancel()); try { string dlPath = "Minecraft-" + v.Name + ".Appx"; VersionDownloader downloader = LauncherModel.Default.VersionDownloader; if (v.IsBeta) await BetaAuthenticate(); await DownloadVersion(v, downloader, dlPath, cancelSource); await ExtractPackage(v, dlPath, cancelSource); } catch (TaskCanceledException) { wasCanceled = true; } catch (Exception ex) { ErrorScreenShow.exceptionmsg(ex); wasCanceled = true; } if (!RunAfterwards || wasCanceled) ViewModels.LauncherModel.Default.ShowProgressBar = false; ViewModels.LauncherModel.Default.CurrentState = ViewModels.LauncherModel.StateChange.None; ViewModels.LauncherModel.Default.AllowCancel = false; ViewModels.LauncherModel.Default.CancelCommand = null; cancelSource = null; v.UpdateInstallStatus(); return wasCanceled; }
public ChannelController() { _versionDownloader = new VersionDownloader(); }