コード例 #1
0
        public Playlist Build(PlaylistConfiguration playlistConfiguration)
        {
            var videoScannerOptions = new VideoScannerOptions
            {
                Blacklist = _blacklistStore.Load(GetBlacklistPath(playlistConfiguration)),
                EligibleFileTypes = playlistConfiguration.PlaylistGeneratorSettings.EligibleFileTypes
            };

            var videoScanner = _videoScannerProvider.GetVideoScanner(videoScannerOptions);

            var videoPoolsByName = playlistConfiguration
                .PoolConfigurations
                .ToDictionary(configuration => configuration.Name, configuration => new Pool(configuration, videoScanner, _randomProvider));

            var playlist = new Playlist();

            while (playlist.Videos.Count < playlistConfiguration.MaxVideos && videoPoolsByName.Any(x => x.Value.HasVideosRemaining))
            {
                foreach (var poolName in playlistConfiguration.Sequence)
                {
                    if (playlist.Videos.Count >= playlistConfiguration.MaxVideos)
                        break;

                    var pool = videoPoolsByName[poolName.Name];
                    if (!pool.HasVideosRemaining)
                    {
                        if(pool.ShouldReload)
                            pool.ReinitializePool();
                        else
                            continue;
                    }

                    playlist.Videos.Add(pool.GetNextVideoDirectory().GetNextVideo());
                }
            }

            return playlist;
        }
コード例 #2
0
 public IVideoScanner GetVideoScanner(VideoScannerOptions videoScannerOptions)
 {
     return new VideoScanner(videoScannerOptions);
 }
コード例 #3
0
 public VideoScanner(VideoScannerOptions videoScannerOptions, IDirectoryScanner directoryScanner = null)
 {
     _videoScannerOptions = videoScannerOptions;
     _directoryScanner = directoryScanner ?? new DirectoryScanner();
 }