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; } })); } })); }
private async void FindAndValidateModFile(Mod currentMod) { var fileBrowser = new OpenFileDialog() { Title = $"Find {currentMod.ModName} | {currentMod.FileName}", InitialDirectory = "Downloads", Filter = "Mod Archive (*.zip;*.7zip;*.7z;*.rar;*.gzip)|*.zip;*.7zip;*.7z;*.rar;*.gzip", }; if (fileBrowser.ShowDialog() != DialogResult.OK) { return; } var archivePath = fileBrowser.FileName; var validationResult = false; MissingMods.Where(x => x == currentMod).First().IsIndeterminateProcess = true; await Task.Factory.StartNew(() => { validationResult = Validation.IsMatchingModArchive(currentMod, archivePath).Result; }); if (validationResult) { MissingMods.Where(x => x == currentMod).First().IsIndeterminateProcess = false; MissingMods.Remove(currentMod); NoMissingMods = MissingMods.Count == 0; } else { MissingMods.Where(x => x == currentMod).First().IsIndeterminateProcess = false; } // Show in UI }