Пример #1
0
        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 { }
        }
Пример #2
0
        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;
            }
        }
Пример #3
0
        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();
                }
            }
        }
Пример #4
0
        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 { }
        }
Пример #5
0
        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();
            }
        }
Пример #6
0
        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();
                }
            }
        }
Пример #7
0
        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();
                }
            }
        }