Example #1
0
        /// <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();
            }
        }
Example #2
0
        /// <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.");
            }
        }