private void OnShown(object sender, EventArgs e) { DialogResult = DialogResult.OK; int modCount = mods.Count; int modIndex = 0; SetTaskCount(modCount); CancellationToken token = tokenSource.Token; var generator = new ModManifestGenerator(); void hashStart(object o, FileHashEventArgs args) { args.Cancel = token.IsCancellationRequested; SetStep($"Checking file {args.FileIndex}/{args.FileCount}: {args.FileName}"); SetProgress(args.FileIndex / (double)args.FileCount); } void hashEnd(object o, FileHashEventArgs args) { args.Cancel = token.IsCancellationRequested; } generator.FileHashStart += hashStart; generator.FileHashEnd += hashEnd; using (var task = new Task(() => { foreach (Tuple <string, ModInfo> i in mods) { string path = Path.Combine("mods", i.Item1); ModInfo info = i.Item2; SetTaskAndStep($"Verifying mod {++modIndex}/{modCount}: {info.Name}", "Loading local manifest..."); List <ModManifest> local = ModManifest.FromFile(Path.Combine(path, "mod.manifest")); List <ModManifestDiff> diff = generator.Verify(path, local); if (diff?.Any(x => x.State != ModManifestState.Unchanged) == true) { Failed.Add(new Tuple <string, ModInfo, List <ModManifestDiff> >(i.Item1, info, diff)); } NextTask(); } })) { task.Start(); while (!task.IsCompleted && !task.IsCanceled) { Application.DoEvents(); } task.Wait(token); } }
private void OnShown(object sender, EventArgs e) { CancellationToken token = tokenSource.Token; var generator = new ModManifestGenerator(); generator.FilesIndexed += (o, args) => { SetTask("Manifest generation complete!"); SetTaskCount(args.FileCount); }; generator.FileHashStart += (o, args) => { args.Cancel = token.IsCancellationRequested; SetTaskAndStep($"Hashing file: {args.FileIndex}/{args.FileCount}", args.FileName); SetProgress(args.FileIndex / (double)args.FileCount); }; generator.FileHashEnd += (o, args) => { args.Cancel = token.IsCancellationRequested; NextTask(); }; using (var task = new Task(() => { manifest = generator.Generate(modPath); if (!token.IsCancellationRequested) { Diff = ModManifestGenerator.Diff(manifest, File.Exists(manifestPath) ? ModManifest.FromFile(manifestPath) : null); } })) { task.Start(); while (!task.IsCompleted && !task.IsCanceled) { Application.DoEvents(); } task.Wait(token); } DialogResult = DialogResult.OK; }