public void Extract(ExtractOptions options, CancellationToken cancellationToken) { using (var stream = new FileStream(options.SourcePbp, FileMode.Open, FileAccess.Read)) { var pbpStreamReader = new PbpStreamReader(stream); var ext = ".bin"; if (pbpStreamReader.Discs.Count > 1) { foreach (var disc in pbpStreamReader.Discs.Where(d => options.Discs.Contains(d.Index))) { var gameInfo = options.GetGameInfo(disc.DiscID); if (gameInfo == null) { //var mainGameId = (string)pbpStreamReader.SFOData.Entries.FirstOrDefault(x => x.Key == SFOKeys.DISC_ID)?.Value; options.FileNameFormat = "%FILENAME%"; gameInfo = new GameInfo(); } var title = GetFilename(options.FileNameFormat, options.SourcePbp, disc.DiscID, gameInfo.MainGameID, gameInfo.GameName, gameInfo.Title, gameInfo.Region ); Notify?.Invoke(PopstationEventEnum.Info, $"Using Title '{title}'"); var discName = options.DiscName.Replace("{0}", disc.Index.ToString()); var isoPath = Path.Combine(options.OutputPath, $"{title} {discName}{ext}"); ExtractISO(disc, isoPath, options, cancellationToken); if (cancellationToken.IsCancellationRequested) { break; } } } else { var disc = pbpStreamReader.Discs[0]; var gameInfo = options.GetGameInfo(disc.DiscID); if (gameInfo == null) { //var mainGameId = (string)pbpStreamReader.SFOData.Entries.FirstOrDefault(x => x.Key == SFOKeys.DISC_ID)?.Value; options.FileNameFormat = "%FILENAME%"; gameInfo = new GameInfo(); } var title = GetFilename(options.FileNameFormat, options.SourcePbp, disc.DiscID, gameInfo.MainGameID, gameInfo.GameName, gameInfo.Title, gameInfo.Region ); var isoPath = Path.Combine(options.OutputPath, $"{title}{ext}"); ExtractISO(disc, isoPath, options, cancellationToken); } Notify?.Invoke(PopstationEventEnum.ExtractComplete, null); } }
public void Extract(ExtractOptions options, CancellationToken cancellationToken) { using (var stream = new FileStream(options.SourcePbp, FileMode.Open, FileAccess.Read)) { var pbpStreamReader = new PbpReader(stream); if (options.GenerateResourceFolders) { var disc = pbpStreamReader.Discs[0]; var gameInfo = options.FindGame(disc.DiscID); EnsureResourcePathExists(options, gameInfo); return; } if (options.ExtractResources) { var disc = pbpStreamReader.Discs[0]; var gameInfo = options.FindGame(disc.DiscID); EnsureResourcePathExists(options, gameInfo); if (string.IsNullOrEmpty(options.ResourceFoldersPath)) { options.ResourceFoldersPath = Path.GetDirectoryName(options.SourcePbp); } ExtractResources(stream, (type, extension) => GetResourcePath(options, gameInfo, type, extension)); return; } var ext = ".bin"; if (pbpStreamReader.Discs.Count > 1) { foreach (var disc in pbpStreamReader.Discs.Where(d => options.Discs.Contains(d.Index))) { var gameInfo = options.FindGame(disc.DiscID); if (gameInfo == null) { //var mainGameId = (string)pbpStreamReader.SFOData.Entries.FirstOrDefault(x => x.Key == SFOKeys.DISC_ID)?.Value; options.FileNameFormat = "%FILENAME%"; gameInfo = new GameEntry(); } var title = GetFilename(options.FileNameFormat, options.SourcePbp, disc.DiscID, gameInfo.SaveFolderName, gameInfo.GameName, gameInfo.SaveDescription, gameInfo.Format ); Notify?.Invoke(PopstationEventEnum.Info, $"Using Title '{title}'"); var discName = options.DiscName.Replace("{0}", disc.Index.ToString()); var isoPath = Path.Combine(options.OutputPath, $"{title} {discName}{ext}"); ExtractISO(disc, isoPath, options, cancellationToken); if (cancellationToken.IsCancellationRequested) { break; } } } else { var disc = pbpStreamReader.Discs[0]; var gameInfo = options.FindGame(disc.DiscID); if (gameInfo == null) { //var mainGameId = (string)pbpStreamReader.SFOData.Entries.FirstOrDefault(x => x.Key == SFOKeys.DISC_ID)?.Value; options.FileNameFormat = "%FILENAME%"; gameInfo = new GameEntry(); } var title = GetFilename(options.FileNameFormat, options.SourcePbp, disc.DiscID, gameInfo.SaveFolderName, gameInfo.GameName, gameInfo.SaveDescription, gameInfo.Format ); var isoPath = Path.Combine(options.OutputPath, $"{title}{ext}"); ExtractISO(disc, isoPath, options, cancellationToken); } Notify?.Invoke(PopstationEventEnum.ExtractComplete, null); } }