public void ProgressIsZeroAfterAddingOneSubprogress() { IProgressReporter parentProgress = new FakeProgressReporter(); ProgressReporter progress = new ProgressReporter(parentProgress); progress.AddSubProgress(1); Assert.AreEqual(0, parentProgress.Progress); Assert.AreEqual(0, progress.Progress); Assert.AreEqual(0, progress[0].Progress); }
private void ExtractFiles(IEnumerable <string> folders, string searchPattern, IExtractor extractor, ProgressReporter progress) { List <ExtractionPaths> paths = EnumerateFiles(folders, searchPattern).ToList(); progress.AddSubProgress(paths.Count); for (int i = 0; i < paths.Count; ++i) { extractor.Extract(paths[i], progress[i]); } }
/// <summary> /// Starts the extraction process from the original game's files. /// </summary> /// <param name="progress">ProgressReporter to report the progress to.</param> public void Extract(ProgressReporter progress) { SafeNativeMethods.SetDllDirectory("libs/"); progress.AddSubProgress(5, weight: 1); progress.AddSubProgress(1, weight: 10); // there are 5k SMK files in the MFF file. var dbiExtractor = new DbiExtractor(); var cdMusicExtractor = new CompactDiscMusicExtractor(); var mdbExtractor = new MdbExtractor(); var zipMdbExtractor = new ZippedMdbExtractor(mdbExtractor); var smkExtractor = new SmackerVideoExtractor(); var mffExtractor = new MffExtractor(smkExtractor); Directory.CreateDirectory(m_tempFilesPath); Parallel.Invoke ( () => cdMusicExtractor.Extract ( new ExtractionPaths { OriginalFileName = $@"{m_originalFilesPath[0]}:\", OriginalFilePath = $@"{m_originalFilesPath[0]}:\", OutputDirectory = Path.Combine(m_newFilesPath, "Music"), TempDirectory = m_tempFilesPath }, progress[0] ), () => ExtractFiles(GetMdbFolders(), "*.mdb", mdbExtractor, progress[1]), () => ExtractFiles(GetMdbFolders(), "*.zip", zipMdbExtractor, progress[2]), () => ExtractFiles(GetDbiFolders(), "*.dbi", dbiExtractor, progress[3]), () => ExtractFiles(GetSmkImageFolders(), "*.smk", smkExtractor, progress[4]), () => ExtractFiles(GetMffFolders(), "*.ff", mffExtractor, progress[5]) ); Directory.Delete(m_tempFilesPath, recursive: true); }
public void ProgressAfterReportingOneSubprogress() { IProgressReporter parentProgress = new FakeProgressReporter(); ProgressReporter progress = new ProgressReporter(parentProgress); progress.AddSubProgress(1); progress[0].Report(40); Assert.AreEqual(40, parentProgress.Progress); Assert.AreEqual(40, progress.Progress); Assert.AreEqual(40, progress[0].Progress); }
public void ProgressAfterReportingTwoLevelsOfSubprogress() { IProgressReporter parentProgress = new FakeProgressReporter(); ProgressReporter progress = new ProgressReporter(parentProgress); progress.AddSubProgress(1); progress[0].AddSubProgress(1); progress[0][0].Report(45); Assert.AreEqual(45, parentProgress.Progress); Assert.AreEqual(45, progress.Progress); Assert.AreEqual(45, progress[0].Progress); Assert.AreEqual(45, progress[0][0].Progress); }
public void ProgressAfterReportingTwoSubprogress() { IProgressReporter parentProgress = new FakeProgressReporter(); ProgressReporter progress = new ProgressReporter(parentProgress); progress.AddSubProgress(2); progress[0].Report(100); progress[1].Report(50); Assert.AreEqual(75, parentProgress.Progress); Assert.AreEqual(75, progress.Progress); Assert.AreEqual(100, progress[0].Progress); Assert.AreEqual(50, progress[1].Progress); }
public void Extract(ExtractionPaths paths, ProgressReporter progress = null) { char driveLetter = Path.GetFullPath(paths.OriginalFilePath)[0]; if (!m_drive.Open(driveLetter)) { throw new InvalidOperationException($"Cannot open drive {driveLetter}"); } if (!m_drive.Refresh()) { throw new InvalidOperationException($"Cannot refresh drive {driveLetter}"); } var audioTracks = GetAudioTracks().ToList(); progress?.AddSubProgress(audioTracks.Count); for (int i = 0; i < audioTracks.Count; i++) { ReadAudioTrack(audioTracks[i], paths, progress?[i]); } }