Inheritance: BDInfo.BDROM
        /// <summary>
        /// Scans a bluray folder and returns a BDInfo object
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        private BDInfo scanWorker(string path)
        {
            logger.Info("Scanning bluray structure: {0}", path);
            BDInfo bluray = new BDInfo(path.ToUpper());

            bluray.Scan();
            return(bluray);
        }
        /// <summary>
        /// Returns wether a choice was made and changes the file path
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns>True if playback should continue, False if user cancelled.</returns>
        private bool GetLengthFromPlaylist(string filePath)
        {
            try
            {
                //bool ChecklistToPlay = false;
                Func <string, BDInfo> scanner = scanWorker;
                IAsyncResult          result  = scanner.BeginInvoke(filePath, null, scanner);
                BDInfo bluray = scanner.EndInvoke(result);

                // Put the bluray info into a member variable (for later use)
                currentMediaInfo = bluray;

                List <TSPlaylistFile> allPlayLists = bluray.PlaylistFiles.Values.Where(p => p.IsValid).OrderByDescending(p => p.TotalLength).Distinct().ToList();

                // find movie lenght from selection
                logger.Info("Found {0} playlists, showing selection dialog.", allPlayLists.Count);

                // first make an educated guess about what the real features are (more than one chapter, no loops and longer than one hour)
                // todo: make a better filter on the playlists containing the real features
                List <TSPlaylistFile> playLists = allPlayLists.Where(p => (p.Chapters.Count > 1 || p.TotalLength >= MinimalFullFeatureLength) && !p.HasLoops).ToList();

                // if the filter yields zero results just list all playlists
                if (playLists.Count == 0)
                {
                    playLists = allPlayLists;
                }

                // Take first movie Length
                TSPlaylistFile playList = playLists[0];
                _duration = (int)playList.TotalLength * 1000;

                // put the choosen playlist into our member variable for later use
                currentPlaylistFile = playLists[0];

                return(true);
            }
            catch (Exception e)
            {
                logger.Error("Exception while reading bluray structure {0} {1}", e.Message, e.StackTrace);
                return(false);
            }
        }
 /// <summary>
 /// Scans a bluray folder and returns a BDInfo object
 /// </summary>
 /// <param name="path"></param>
 /// <returns></returns>
 private BDInfo scanWorker(string path)
 {
     logger.Info("Scanning bluray structure: {0}", path);
     BDInfo bluray = new BDInfo(path.ToUpper());
     bluray.Scan();
     return bluray;
 }
        /// <summary>
        /// Returns wether a choice was made and changes the file path
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns>True if playback should continue, False if user cancelled.</returns>
        private bool GetLengthFromPlaylist(string filePath)
        {
            try {
            //bool ChecklistToPlay = false;
            Func<string, BDInfo> scanner = scanWorker;
            IAsyncResult result = scanner.BeginInvoke(filePath, null, scanner);
            BDInfo bluray = scanner.EndInvoke(result);

            // Put the bluray info into a member variable (for later use)
            currentMediaInfo = bluray;

            List<TSPlaylistFile> allPlayLists = bluray.PlaylistFiles.Values.Where(p => p.IsValid).OrderByDescending(p => p.TotalLength).Distinct().ToList();

            // find movie lenght from selection
            logger.Info("Found {0} playlists, showing selection dialog.", allPlayLists.Count);

            // first make an educated guess about what the real features are (more than one chapter, no loops and longer than one hour)
            // todo: make a better filter on the playlists containing the real features
            List<TSPlaylistFile> playLists = allPlayLists.Where(p => (p.Chapters.Count > 1 || p.TotalLength >= MinimalFullFeatureLength) && !p.HasLoops).ToList();

            // if the filter yields zero results just list all playlists
            if (playLists.Count == 0) {
                playLists = allPlayLists;
            }

            // Take first movie Length
            TSPlaylistFile playList = playLists[0];
            _duration = (int)playList.TotalLength * 1000;

            // put the choosen playlist into our member variable for later use
            currentPlaylistFile = playLists[0];

            return true;
            }
            catch (Exception e) {
            logger.Error("Exception while reading bluray structure {0} {1}", e.Message, e.StackTrace);
            return false;
            }
        }