/// <summary> /// Search movies asynchronously /// </summary> /// <param name="searchFilter">The parameter of the search</param> public async Task SearchMoviesAsync(string searchFilter) { if (SearchFilter != searchFilter) { // We start an other search StopLoadingMovies(); Movies.Clear(); Page = 0; } var watch = Stopwatch.StartNew(); Page++; Logger.Info( $"Loading page {Page} with criteria: {searchFilter}"); HasLoadingFailed = false; try { SearchFilter = searchFilter; IsLoadingMovies = true; var movies = await MovieService.SearchMoviesAsync(searchFilter, Page, MaxMoviesPerPage, Genre, Rating, CancellationLoadingMovies.Token); Movies = new ObservableCollection <MovieShort>(Movies.Union(movies.Item1, new MovieShortComparer())); IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count; MaxNumberOfMovies = movies.Item2; await MovieHistoryService.SetMovieHistoryAsync(movies.Item1); await MovieService.DownloadCoverImageAsync(movies.Item1, CancellationLoadingMovies); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading page {Page} with criteria {searchFilter}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded page {Page} with criteria {searchFilter} in {elapsedMs} milliseconds."); } }
/// <summary> /// When a movie has been seen, save this information in user data /// </summary> public async Task HasSeenMovie() { await MovieHistoryService.SetHasBeenSeenMovieAsync(Movie); Messenger.Default.Send(new ChangeHasBeenSeenMovieMessage()); Messenger.Default.Send(new StopPlayingMovieMessage()); }
/// <summary> /// Load favorites movies /// </summary> public override async Task LoadMoviesAsync() { IsLoadingMovies = true; var favoritesMovies = await MovieHistoryService.GetFavoritesMoviesAsync(); var movies = favoritesMovies.ToList(); var moviesToAdd = movies.Except(Movies, new MovieShortComparer()).ToList(); var moviesToRemove = Movies.Except(movies, new MovieShortComparer()).ToList(); foreach (var movie in moviesToAdd) { Movies.Add(movie); } foreach (var movie in moviesToRemove) { Movies.Remove(movie); } IsLoadingMovies = false; await MovieService.DownloadCoverImageAsync(moviesToAdd); IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count(); MaxNumberOfMovies = movies.Count(); }
/// <summary> /// Search movies asynchronously /// </summary> /// <param name="searchFilter">The parameter of the search</param> public async Task SearchMoviesAsync(string searchFilter) { if (SearchFilter != searchFilter) { // We start an other search StopLoadingMovies(); Movies.Clear(); Page = 0; } var watch = Stopwatch.StartNew(); Page++; Logger.Info( $"Loading page {Page} with criteria: {searchFilter}"); HasLoadingFailed = false; try { SearchFilter = searchFilter; IsLoadingMovies = true; var movies = await MovieService.SearchMoviesAsync(searchFilter, Page, MaxMoviesPerPage, Genre, Rating, CancellationLoadingMovies.Token).ConfigureAwait(false); DispatcherHelper.CheckBeginInvokeOnUI(async() => { Movies.Clear(); Movies.AddRange(movies.Item1); IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count; MaxNumberOfMovies = movies.Item2; await MovieHistoryService.SetMovieHistoryAsync(movies.Item1).ConfigureAwait(false); }); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading page {Page} with criteria {searchFilter}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded page {Page} with criteria {searchFilter} in {elapsedMs} milliseconds."); } }
/// <summary> /// Register commands /// </summary> /// <returns></returns> private void RegisterCommands() { SetFavoriteMovieCommand = new RelayCommand <MovieShort>(async movie => { await MovieHistoryService.SetFavoriteMovieAsync(movie); Messenger.Default.Send(new ChangeFavoriteMovieMessage(movie)); }); }
/// <summary> /// Load movies asynchronously /// </summary> public override async Task LoadMoviesAsync() { var watch = Stopwatch.StartNew(); Page++; if (Page > 1 && Movies.Count == MaxNumberOfMovies) { return; } Logger.Info( $"Loading page {Page}..."); HasLoadingFailed = false; try { IsLoadingMovies = true; var movies = await MovieService.GetGreatestMoviesAsync(Page, MaxMoviesPerPage, Rating, CancellationLoadingMovies.Token, Genre).ConfigureAwait(false); DispatcherHelper.CheckBeginInvokeOnUI(async() => { var moviesList = movies.Item1.ToList(); Movies.AddRange(moviesList); IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count; MaxNumberOfMovies = movies.Item2; await MovieHistoryService.SetMovieHistoryAsync(movies.Item1).ConfigureAwait(false); }); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading page {Page}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded page {Page} in {elapsedMs} milliseconds."); } }
/// <summary> /// Load next page /// </summary> public override async Task LoadMoviesAsync() { if (Page == LastPage) { return; } Page++; IsLoadingMovies = true; try { var movieResults = await MovieService.GetRecentMoviesAsync(Page, MaxMoviesPerPage, CancellationLoadNextPageToken.Token); var movies = movieResults.Item1.ToList(); MaxNumberOfMovies = movieResults.Item2; foreach (var movie in movies) { Movies.Add(movie); } if (!movies.Any()) { LastPage = Page; } IsLoadingMovies = false; await MovieHistoryService.ComputeMovieHistoryAsync(movies); await MovieService.DownloadCoverImageAsync(movies); } catch { Page--; } finally { IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count(); if (!IsMovieFound) { Page = 0; } } }
/// <summary> /// Load movies asynchronously /// </summary> public override async Task LoadMoviesAsync() { var watch = Stopwatch.StartNew(); Page++; Logger.Info( $"Loading page {Page}..."); HasLoadingFailed = false; try { IsLoadingMovies = true; var movies = await MovieService.GetGreatestMoviesAsync(Page, MaxMoviesPerPage, Rating, CancellationLoadingMovies.Token, Genre); Movies = new ObservableCollection <MovieShort>(Movies.Union(movies.Item1, new MovieShortComparer())); IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count; MaxNumberOfMovies = movies.Item2; await MovieHistoryService.SetMovieHistoryAsync(movies.Item1); await MovieService.DownloadCoverImageAsync(movies.Item1, CancellationLoadingMovies); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading page {Page}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded page {Page} in {elapsedMs} milliseconds."); } }
/// <summary> /// Load movies asynchronously /// </summary> public override async Task LoadMoviesAsync() { var watch = Stopwatch.StartNew(); Logger.Info( "Loading movies..."); HasLoadingFailed = false; try { IsLoadingMovies = true; var movies = await MovieHistoryService.GetFavoritesMoviesAsync(Genre, Rating).ConfigureAwait(false); DispatcherHelper.CheckBeginInvokeOnUI(() => { var moviesList = movies.ToList(); Movies.Clear(); Movies.AddRange(moviesList); IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count; MaxNumberOfMovies = Movies.Count; }); } catch (Exception exception) { Logger.Error( $"Error while loading page {Page}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded movies in {elapsedMs} milliseconds."); } }
/// <summary> /// Register messages /// </summary> private void RegisterMessages() { Messenger.Default.Register <ChangeLanguageMessage>( this, async message => { foreach (var movie in Movies.ToList()) { await Task.Delay(1000); await MovieService.TranslateMovieShortAsync(movie); } }); Messenger.Default.Register <ChangeFavoriteMovieMessage>( this, async message => { await MovieHistoryService.ComputeMovieHistoryAsync(Movies); }); }
/// <summary> /// Load movies /// </summary> public override async Task LoadMoviesAsync() { var watch = Stopwatch.StartNew(); Logger.Info( "Loading movies..."); HasLoadingFailed = false; try { IsLoadingMovies = true; var movies = await MovieHistoryService.GetFavoritesMoviesAsync(Genre, Rating); Movies = new ObservableCollection <MovieShort>(movies); IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count; MaxNumberOfMovies = Movies.Count; await MovieService.DownloadCoverImageAsync(Movies, CancellationLoadingMovies); } catch (Exception exception) { Logger.Error( $"Error while loading page {Page}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded movies in {elapsedMs} milliseconds."); } }
/// <summary> /// Search movies /// </summary> /// <param name="searchFilter">The parameter of the search</param> public async Task SearchMoviesAsync(string searchFilter) { if (SearchFilter != searchFilter) { // We start an other search StopSearchingMovies(); Movies.Clear(); Page = 0; } SearchFilter = searchFilter; Page++; var lastPage = int.MaxValue; if (!LastPageFilterMapping.ContainsKey(searchFilter) || (LastPageFilterMapping.TryGetValue(searchFilter, out lastPage) && Page < lastPage)) { try { IsLoadingMovies = true; var movieResults = await MovieService.SearchMoviesAsync(searchFilter, Page, MaxMoviesPerPage, CancellationSearchToken.Token); var movies = movieResults.Item1.ToList(); MaxNumberOfMovies = movieResults.Item2; foreach (var movie in movies) { Movies.Add(movie); } IsLoadingMovies = false; await MovieHistoryService.ComputeMovieHistoryAsync(movies); await MovieService.DownloadCoverImageAsync(movies); if (!LastPageFilterMapping.ContainsKey(searchFilter) && !movies.Any()) { LastPageFilterMapping.Add(searchFilter, Page); } } catch { Page--; } finally { IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count(); if (!IsMovieFound) { Page = 0; } } } }