/// <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); } }); }
/// <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(); }); } }); }