private void DownloadUpdate(object sender, ExtendedMod e) { if (e.CurrentDownloadProgress == 100) { _installBase.ModpackMods.Where(x => x.Md5 == e.Md5).ToList() .ForEach(x => x.FilePath = e.FilePath); var matchingMods = MissingMods.Where(x => x.Md5 == e.Md5).ToList(); foreach (var matchingMod in matchingMods) { Application.Current.Dispatcher.BeginInvoke((Action) delegate { _missingModsLocked = true; if (MissingMods.IndexOf(matchingMod) != -1) { MissingMods.RemoveAt(MissingMods.IndexOf(matchingMod)); RemainingMissingModCount--; } _missingModsLocked = false; }); } } else { var missingMods = MissingMods.ToList(); foreach (var matchingMissingMod in missingMods.Where(x => x.Md5 == e.Md5).ToList()) { Application.Current.Dispatcher.BeginInvoke((Action) delegate { _missingModsLocked = true; var index = MissingMods.IndexOf(matchingMissingMod); if (index == -1) { return; } MissingMods[MissingMods.IndexOf(matchingMissingMod)].CurrentDownloadProgress = e.CurrentDownloadProgress; _missingModsLocked = false; }); } } }
/// <summary> /// Initializes the NXMWorker pipe listener. /// </summary> private void InitializeDownloadHandle() { if (NoMissingMods) { return; } var nexusProtocol = new NexusProtocol(); // Start capturing piped messages from the NXMWorker, handle any progress reports. nexusProtocol.StartRecievingProtocolValues(new Progress <CaptureProtocolValuesProgress>(async x => { var matchingMods = MissingMods.Where(y => y.NexusModId == x.ModId); if (!matchingMods.Any()) { return; } var matchingMod = matchingMods.First(); if (matchingMod != null) { WindowNotificationControls.MoveToFront(); // Start downloading the mod file. await NexusMod.DownloadModFile(matchingMod, x.FileId, new Progress <DownloadModFileProgress>(downloadProgress => { MissingMods[MissingMods.IndexOf(matchingMod)].CurrentDownloadPercentage = downloadProgress.CurrentDownloadPercentage; if (downloadProgress.IsDownloadComplete) { Modpack.UpdateModArchivePaths(matchingMod, downloadProgress.DownloadLocation); MissingMods.Remove(matchingMod); NoMissingMods = MissingMods.Count == 0; } })); } })); }