Exemplo n.º 1
0
 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;
        }
Exemplo n.º 3
0
 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))
     });
Exemplo n.º 4
0
        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)));
        }
    }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 public static string GetDisplayName(this VideoQualityPreference preference) => preference switch
 {