public VideoDownloadOption(VideoQualityPreference quality) { IsPlaylist = true; QualityPreference = quality; Format = ""; Size = ""; Label = quality.GetDisplayName(); }
public void OnViewLoaded() { SelectedFormat = !string.IsNullOrWhiteSpace(_settingsService.LastFormat) && AvailableFormats.Contains(_settingsService.LastFormat, StringComparer.OrdinalIgnoreCase) ? _settingsService.LastFormat : AvailableFormats.FirstOrDefault(); SelectedVideoQualityPreference = _settingsService.LastVideoQualityPreference; }
public static string GetDisplayName(this VideoQualityPreference preference) { return(preference switch { VideoQualityPreference.Minimum => "Minimum", VideoQualityPreference.Low => "Low (up to 480p)", VideoQualityPreference.Medium => "Medium (up to 720p)", VideoQualityPreference.High => "High (up to 1080p)", VideoQualityPreference.Maximum => "Maximum", _ => throw new ArgumentOutOfRangeException(nameof(preference)) });
public async Task <VideoDownloadOption?> TryGetBestVideoDownloadOptionAsync( string videoId, string format, VideoQualityPreference qualityPreference) { var options = await GetVideoDownloadOptionsAsync(videoId); // TODO: generalize supported formats // Short-circuit for audio-only formats if (string.Equals(format, "mp3", StringComparison.OrdinalIgnoreCase) || string.Equals(format, "ogg", StringComparison.OrdinalIgnoreCase)) { return(options.FirstOrDefault(o => string.Equals(o.Format, format, StringComparison.OrdinalIgnoreCase))); } var orderedOptions = options .OrderBy(o => o.Quality) .ThenBy(o => o.Framerate) .ToArray(); var preferredOption = qualityPreference switch { VideoQualityPreference.Maximum => orderedOptions .LastOrDefault(o => string.Equals(o.Format, format, StringComparison.OrdinalIgnoreCase)), VideoQualityPreference.High => orderedOptions .Where(o => o.Quality <= VideoQuality.High1080) .LastOrDefault(o => string.Equals(o.Format, format, StringComparison.OrdinalIgnoreCase)), VideoQualityPreference.Medium => orderedOptions .Where(o => o.Quality <= VideoQuality.High720) .LastOrDefault(o => string.Equals(o.Format, format, StringComparison.OrdinalIgnoreCase)), VideoQualityPreference.Low => orderedOptions .Where(o => o.Quality <= VideoQuality.Medium480) .LastOrDefault(o => string.Equals(o.Format, format, StringComparison.OrdinalIgnoreCase)), VideoQualityPreference.Minimum => orderedOptions .FirstOrDefault(o => string.Equals(o.Format, format, StringComparison.OrdinalIgnoreCase)), _ => throw new ArgumentOutOfRangeException(nameof(qualityPreference)) }; return (preferredOption ?? orderedOptions.FirstOrDefault(o => string.Equals(o.Format, format, StringComparison.OrdinalIgnoreCase))); } }
public static DownloadViewModel CreateDownloadViewModel( this IViewModelFactory factory, Video video, string filePath, string format, VideoQualityPreference qualityPreference) { var viewModel = factory.CreateDownloadViewModel(); viewModel.Video = video; viewModel.FilePath = filePath; viewModel.Format = format; viewModel.QualityPreference = qualityPreference; return(viewModel); }
public static string GetDisplayName(this VideoQualityPreference preference) => preference switch {