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();
}
}
}