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; }
public IVideoScanner GetVideoScanner(VideoScannerOptions videoScannerOptions) { return new VideoScanner(videoScannerOptions); }
public VideoScanner(VideoScannerOptions videoScannerOptions, IDirectoryScanner directoryScanner = null) { _videoScannerOptions = videoScannerOptions; _directoryScanner = directoryScanner ?? new DirectoryScanner(); }