public void ScanBDROM()
{
ScanResult = new ScanBDROMResult();
ScanResult.ScanException = new Exception("Scan is still running.");
System.Threading.Timer timer = null;
try
{
this.scanState = new ScanBDROMState();
foreach (TSStreamFile streamFile in streamFiles)
{
if (BDInfoSettings.EnableSSIF &&
streamFile.InterleavedFile != null)
{
scanState.TotalBytes += streamFile.InterleavedFile.FileInfo.Length;
}
else
{
scanState.TotalBytes += streamFile.FileInfo.Length;
}
if (!scanState.PlaylistMap.ContainsKey(streamFile.Name))
{
scanState.PlaylistMap[streamFile.Name] = new List<TSPlaylistFile>();
}
foreach (TSPlaylistFile playlist in BDROM.PlaylistFiles.Values)
{
playlist.ClearBitrates();
foreach (TSStreamClip clip in playlist.StreamClips)
{
if (clip.Name == streamFile.Name)
{
if (!scanState.PlaylistMap[streamFile.Name].Contains(playlist))
{
scanState.PlaylistMap[streamFile.Name].Add(playlist);
}
}
}
}
}
timer = new System.Threading.Timer(ScanBDROMProgress, scanState, 1000, 1000);
System.Console.WriteLine("\n{0,16}{1,-15}{2,-13}{3}","", "File", "Elapsed", "Remaining");
foreach (TSStreamFile streamFile in streamFiles)
{
scanState.StreamFile = streamFile;
Thread thread = new Thread(ScanBDROMThread);
thread.Start(scanState);
while (thread.IsAlive)
{
Thread.Sleep(100);
}
scanState.FinishedBytes += streamFile.FileInfo.Length;
if (scanState.Exception != null)
{
ScanResult.FileExceptions[streamFile.Name] = scanState.Exception;
}
}
ScanResult.ScanException = null;
}
catch (Exception ex)
{
ScanResult.ScanException = ex;
}
finally
{
System.Console.WriteLine();
if (timer != null)
{
timer.Dispose();
}
}
}
static void Main(string[] args) { var options = new MyOptions(); // Parse in 'strict mode', success or quit if(CommandLine.Parser.Default.ParseArguments(args, options)) { validatePath(options.input); validatePath(options.output); runner run = new runner(); run.InitBDROM(options.input); //If mpsl specified, select playlist in a different way if (options.playlistsToScan != null) { try { System.Console.WriteLine("-m or --mpls specified, running in non-interactive mode..."); System.Console.Write("Atempting to find "); System.Console.Write(String.Join<String>(", ", options.playlistsToScan) + Environment.NewLine); run.SelectPlayList(options.playlistsToScan); } catch (Exception ex) { System.Console.WriteLine("ERROR: " + ex.Message); Environment.Exit(-1); } } else { run.SelectPlayList(); } run.AddStreamFilesInPlaylists(); run.ScanBDROM(); run.GenerateReport(options.output); } }