/// <summary>
        /// Load the movie's subtitles asynchronously
        /// </summary>
        /// <param name="movie">The movie</param>
        private async Task LoadSubtitles(MovieJson movie)
        {
            Logger.Debug(
                $"Load subtitles for movie: {movie.Title}");
            Movie            = movie;
            LoadingSubtitles = true;
            await Task.Run(() =>
            {
                try
                {
                    var languages = _subtitlesService.GetSubLanguages().ToList();

                    var imdbId = 0;
                    if (int.TryParse(new string(movie.ImdbCode
                                                .SkipWhile(x => !char.IsDigit(x))
                                                .TakeWhile(char.IsDigit)
                                                .ToArray()), out imdbId))
                    {
                        var subtitles = _subtitlesService.SearchSubtitlesFromImdb(
                            languages.Select(lang => lang.SubLanguageID).Aggregate((a, b) => a + "," + b),
                            imdbId.ToString());
                        DispatcherHelper.CheckBeginInvokeOnUI(() =>
                        {
                            movie.AvailableSubtitles =
                                new ObservableCollection <Subtitle>(subtitles.OrderBy(a => a.LanguageName)
                                                                    .Select(sub => new Subtitle
                            {
                                Sub = sub
                            }).GroupBy(x => x.Sub.LanguageName,
                                       (k, g) =>
                                       g.Aggregate(
                                           (a, x) =>
                                           (Convert.ToDouble(x.Sub.Rating, CultureInfo.InvariantCulture) >=
                                            Convert.ToDouble(a.Sub.Rating, CultureInfo.InvariantCulture))
                                                        ? x
                                                        : a)));
                            movie.AvailableSubtitles.Insert(0, new Subtitle
                            {
                                Sub = new OSDBnet.Subtitle
                                {
                                    LanguageName = LocalizationProviderHelper.GetLocalizedValue <string>("NoneLabel")
                                }
                            });

                            movie.SelectedSubtitle = movie.AvailableSubtitles.FirstOrDefault();
                            LoadingSubtitles       = false;
                        });
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error(
                        $"Failed loading subtitles for : {movie.Title}. {ex.Message}");
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        LoadingSubtitles = false;
                    });
                }
            });
        }
        /// <summary>
        /// Initializes a new instance of the ApplicationSettingsViewModel class.
        /// </summary>
        /// <param name="userService">User service</param>
        /// <param name="subtitlesService">Subtitles service</param>
        public ApplicationSettingsViewModel(IUserService userService, ISubtitlesService subtitlesService)
        {
            _userService = userService;
            Version      = Constants.AppVersion;

            RefreshCacheSize();
            RegisterCommands();
            SubtitlesColor = Color.FromRgb(255, 255, 255);

            Task.Run(async() =>
            {
                DownloadLimit = await _userService.GetDownloadLimit();
                UploadLimit   = await _userService.GetUploadLimit();
                var defaultSubtitleLanguage = await _userService.GetDefaultSubtitleLanguage();
                DefaultHdQuality            = await _userService.GetDefaultHdQuality();
                try
                {
                    AvailableSubtitlesLanguages = new ObservableRangeCollection <string>();
                    var languages = (await subtitlesService.GetSubLanguages()).Select(a => a.LanguageName)
                                    .OrderBy(a => a)
                                    .ToList();
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        languages.Insert(0,
                                         LocalizationProviderHelper.GetLocalizedValue <string>("NoneLabel"));
                        AvailableSubtitlesLanguages.AddRange(
                            new ObservableRangeCollection <string>(languages));
                        DefaultSubtitleLanguage = AvailableSubtitlesLanguages.Any(a => a == defaultSubtitleLanguage)
                            ? defaultSubtitleLanguage
                            : LocalizationProviderHelper.GetLocalizedValue <string>("NoneLabel");
                    });
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                }
            });
        }
예제 #3
0
        /// <summary>
        /// Initializes a new instance of the ApplicationSettingsViewModel class.
        /// </summary>
        /// <param name="userService">User service</param>
        /// <param name="subtitlesService">Subtitles service</param>
        public ApplicationSettingsViewModel(IUserService userService, ISubtitlesService subtitlesService)
        {
            _userService = userService;
            Version      = Constants.AppVersion;

            RefreshCacheSize();
            RegisterCommands();
            SubtitlesColor         = Color.FromRgb(255, 255, 255);
            ShowTraktDialogCommand = new RelayCommand(async() =>
            {
                await Messenger.Default.SendAsync(new ShowTraktDialogMessage());
            });

            Task.Run(async() =>
            {
                try
                {
                    SubtitleSizes = new ObservableCollection <SubtitleSize>
                    {
                        new SubtitleSize
                        {
                            Label = LocalizationProviderHelper.GetLocalizedValue <string>("Bigger"),
                            Size  = 6
                        },
                        new SubtitleSize
                        {
                            Label = LocalizationProviderHelper.GetLocalizedValue <string>("Big"),
                            Size  = 12
                        },
                        new SubtitleSize
                        {
                            Label = LocalizationProviderHelper.GetLocalizedValue <string>("Normal"),
                            Size  = 16
                        },
                        new SubtitleSize
                        {
                            Label = LocalizationProviderHelper.GetLocalizedValue <string>("Small"),
                            Size  = 18
                        },
                        new SubtitleSize
                        {
                            Label = LocalizationProviderHelper.GetLocalizedValue <string>("Smaller"),
                            Size  = 20
                        }
                    };

                    SelectedSubtitleSize        = SubtitleSizes.FirstOrDefault(a => a.Size == 16);
                    DownloadLimit               = await _userService.GetDownloadLimit();
                    UploadLimit                 = await _userService.GetUploadLimit();
                    var defaultSubtitleLanguage = await _userService.GetDefaultSubtitleLanguage();
                    DefaultHdQuality            = await _userService.GetDefaultHdQuality();
                    LoadingSubtitles            = true;
                    AvailableSubtitlesLanguages = new ObservableRangeCollection <string>();
                    var languages               = (await subtitlesService.GetSubLanguages()).Select(a => a.LanguageName)
                                                  .OrderBy(a => a)
                                                  .ToList();
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        languages.Insert(0,
                                         LocalizationProviderHelper.GetLocalizedValue <string>("NoneLabel"));
                        AvailableSubtitlesLanguages.AddRange(
                            new ObservableRangeCollection <string>(languages));
                        DefaultSubtitleLanguage = AvailableSubtitlesLanguages.Any(a => a == defaultSubtitleLanguage)
                            ? defaultSubtitleLanguage
                            : LocalizationProviderHelper.GetLocalizedValue <string>("NoneLabel");
                        LoadingSubtitles = false;
                    });
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        LoadingSubtitles = false;
                        AvailableSubtitlesLanguages.Insert(0,
                                                           LocalizationProviderHelper.GetLocalizedValue <string>("NoneLabel"));
                        DefaultSubtitleLanguage = AvailableSubtitlesLanguages.FirstOrDefault();
                    });
                }
            });
        }