/// <summary> /// Search shows asynchronously /// </summary> public override async Task LoadShowsAsync(bool reset = false) { await LoadingSemaphore.WaitAsync(CancellationLoadingShows.Token); StopLoadingShows(); if (reset) { Shows.Clear(); Page = 0; VerticalScroll = 0d; } var watch = Stopwatch.StartNew(); Page++; if (Page > 1 && Shows.Count == MaxNumberOfShows) { Page--; LoadingSemaphore.Release(); return; } Logger.Info( $"Loading search page {Page} with criteria: {SearchFilter}"); HasLoadingFailed = false; try { IsLoadingShows = true; var result = await ShowService.SearchShowsAsync(SearchFilter, Page, MaxNumberOfShows, Genre, Rating * 10, CancellationLoadingShows.Token); Shows.AddRange(result.shows.Except(Shows, new ShowLightComparer())); IsLoadingShows = false; IsShowFound = Shows.Any(); CurrentNumberOfShows = Shows.Count; MaxNumberOfShows = result.nbShows; UserService.SyncShowHistory(Shows); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading search 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 search page {Page} with criteria {SearchFilter} in {elapsedMs} milliseconds."); LoadingSemaphore.Release(); } }
/// <summary> /// Search shows asynchronously /// </summary> /// <param name="searchFilter">The parameter of the search</param> public async Task SearchShowsAsync(string searchFilter) { var watch = Stopwatch.StartNew(); if (SearchFilter != searchFilter) { // We start an other search StopLoadingShows(); Shows.Clear(); Page = 0; CurrentNumberOfShows = 0; MaxNumberOfShows = 0; IsLoadingShows = false; } Page++; if (Page > 1 && Shows.Count == MaxNumberOfShows) { return; } Logger.Info( $"Loading shows search page {Page} with criteria: {searchFilter}"); HasLoadingFailed = false; try { SearchFilter = searchFilter; IsLoadingShows = true; var result = await ShowService.SearchShowsAsync(searchFilter, Page, MaxNumberOfShows, Genre, Rating * 10, CancellationLoadingShows.Token) .ConfigureAwait(false); DispatcherHelper.CheckBeginInvokeOnUI(async() => { Shows.AddRange(result.shows); IsLoadingShows = false; IsShowFound = Shows.Any(); CurrentNumberOfShows = Shows.Count; MaxNumberOfShows = result.nbShows; await UserService.SyncShowHistoryAsync(Shows).ConfigureAwait(false); }); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading shows search 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 shows search page {Page} with criteria {searchFilter} in {elapsedMs} milliseconds."); } }