private void ScanBDROMProgress(object state) { ScanBDROMState currentScanState = (ScanBDROMState)state; try { long finishedBytes = currentScanState.FinishedBytes; if (currentScanState.StreamFile != null) { finishedBytes += currentScanState.StreamFile.Size; } double progress = ((double)finishedBytes / currentScanState.TotalBytes); int progressValue = (int)Math.Round(progress * 100); if (progressValue < 0) { progressValue = 0; } if (progressValue > 100) { progressValue = 100; } TimeSpan elapsedTime = DateTime.Now.Subtract(currentScanState.TimeStarted); TimeSpan remainingTime; if (progress > 0 && progress < 1) { remainingTime = new TimeSpan( (long)((double)elapsedTime.Ticks / progress) - elapsedTime.Ticks); } else { remainingTime = new TimeSpan(0); } String elapsedTimeString = string.Format( "{0:D2}:{1:D2}:{2:D2}", elapsedTime.Hours, elapsedTime.Minutes, elapsedTime.Seconds); String remainingTimeString = string.Format( "{0:D2}:{1:D2}:{2:D2}", remainingTime.Hours, remainingTime.Minutes, remainingTime.Seconds); if (currentScanState.StreamFile != null) { System.Console.Write("Scanning {0,3:d}% - {1,10} {2,12} | {3}\r", progressValue, currentScanState.StreamFile.DisplayName, elapsedTimeString, remainingTimeString); } else { System.Console.Write("Scanning {0,3}% - \t{2,10} | {3}...\r", currentScanState.StreamFile.DisplayName); } } catch { } }
private void ScanBDROMThread( object parameter ) { ScanBDROMState scanState = (ScanBDROMState)parameter; try { TSStreamFile streamFile = scanState.StreamFile; List <TSPlaylistFile> playlists = scanState.PlaylistMap[streamFile.Name]; streamFile.Scan(playlists, true); } catch (Exception ex) { scanState.Exception = ex; } }
private void ScanBDROMWork( object sender, DoWorkEventArgs e) { ScanResult = new ScanBDROMResult(); ScanResult.ScanException = new Exception("Scan is still running."); System.Threading.Timer timer = null; try { List<TSStreamFile> streamFiles = (List<TSStreamFile>)e.Argument; ScanBDROMState 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( ScanBDROMEvent, scanState, 1000, 1000); foreach (TSStreamFile streamFile in streamFiles) { scanState.StreamFile = streamFile; Thread thread = new Thread(ScanBDROMThread); thread.Start(scanState); while (thread.IsAlive) { if (ScanBDROMWorker.CancellationPending) { ScanResult.ScanException = new Exception("Scan was cancelled."); thread.Abort(); return; } Thread.Sleep(0); } 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 { if (timer != null) { timer.Dispose(); } } }
private void ScanBDROMProgress( object state ) { ScanBDROMState scanState = (ScanBDROMState)state; try { long finishedBytes = scanState.FinishedBytes; if (scanState.StreamFile != null) { finishedBytes += scanState.StreamFile.Size; } double progress = ((double)finishedBytes / scanState.TotalBytes); int progressValue = (int)Math.Round(progress * 100); if (progressValue < 0) { progressValue = 0; } if (progressValue > 100) { progressValue = 100; } // progressBarScan.Value = progressValue; TimeSpan elapsedTime = DateTime.Now.Subtract(scanState.TimeStarted); TimeSpan remainingTime; if (progress > 0 && progress < 1) { remainingTime = new TimeSpan( (long)((double)elapsedTime.Ticks / progress) - elapsedTime.Ticks); } else { remainingTime = new TimeSpan(0); } string elapsedTimeString = string.Format(CultureInfo.InvariantCulture, "{0:D2}:{1:D2}:{2:D2}", elapsedTime.Hours, elapsedTime.Minutes, elapsedTime.Seconds); string remainingTimeString = string.Format(CultureInfo.InvariantCulture, "{0:D2}:{1:D2}:{2:D2}", remainingTime.Hours, remainingTime.Minutes, remainingTime.Seconds); if (scanState.StreamFile != null) { System.Console.Error.Write("Scanning {0,3:d}% - {1,10} {2,12} | {3}\r", progressValue, scanState.StreamFile.DisplayName, elapsedTimeString, remainingTimeString); } else { System.Console.Error.Write("Scanning {0,3}% - \t{1,10} | {2}...\r", progressValue, elapsedTimeString, remainingTimeString); } // UpdatePlaylistBitrates(); } catch { } }
public void ScanBDROMWork( object sender, DoWorkEventArgs e ) { ScanResult = new ScanBDROMResult { ScanException = new Exception("Scan is still running.") }; List <TSStreamFile> streamFiles = new List <TSStreamFile>(); List <string> streamNames; System.Console.Error.WriteLine("Preparing to analyze the following:"); // Adapted from ScanBDROM() foreach (TSPlaylistFile playlist in selectedPlaylists) { System.Console.Error.Write("{0} --> ", playlist.Name); streamNames = new List <string>(); foreach (TSStreamClip clip in playlist.StreamClips) { if (!streamFiles.Contains(clip.StreamFile)) { streamNames.Add(clip.StreamFile.Name); streamFiles.Add(clip.StreamFile); } } Console.Error.WriteLine(String.Join(" + ", streamNames)); } System.Threading.Timer timer = null; try { ScanBDROMState scanState = new ScanBDROMState(); foreach (TSStreamFile streamFile in streamFiles) { if (BDInfoSettings.EnableSSIF && streamFile.InterleavedFile != null) { if (streamFile.InterleavedFile.FileInfo != null) { scanState.TotalBytes += streamFile.InterleavedFile.FileInfo.Length; } else { scanState.TotalBytes += streamFile.InterleavedFile.DFileInfo.Length; } } else { if (streamFile.FileInfo != null) { scanState.TotalBytes += streamFile.FileInfo.Length; } else { scanState.TotalBytes += streamFile.DFileInfo.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.Error.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(250); } if (streamFile.FileInfo != null) { scanState.FinishedBytes += streamFile.FileInfo.Length; } else { scanState.FinishedBytes += streamFile.DFileInfo.Length; } if (scanState.Exception != null) { ScanResult.FileExceptions[streamFile.Name] = scanState.Exception; } } ScanResult.ScanException = null; } catch (Exception ex) { ScanResult.ScanException = ex; } finally { System.Console.Error.WriteLine(); timer?.Dispose(); } }
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(); } } }
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(); } } }