Ejemplo n.º 1
0
        private async Task UpdateAnimesFromFavorited()
        {
            //TODO: https://github.com/JaoHundred/ANT/issues/80


            //TODO:testar mais algumas vezes, na primeira tentativa no dispositivo real
            //foram feitas trocas de aplicativo enquanto essa função continuava funcionando
            //ao terminar não foi completado todos as atualizações da lista, mas o processamento não parou
            //depois que terminou, ao clicar mais vezes em atualizar o restante que não tinha sido atualizado foi atualizando
            try
            {
                var    db     = App.liteDB.GetCollection <FavoritedAnime>();
                var    animes = _collection as List <FavoritedAnime>;
                double total  = animes.Count;

                for (int i = 0; i < animes.Count; i++)
                {
                    double result = (double)i / total;
                    MessagingCenter.Send <ProgressPopupViewModel, double>(this, string.Empty, result);

                    if (_cancelationToken != null && _cancelationToken.IsCancellationRequested)
                    {
                        _cancelationToken.Token.ThrowIfCancellationRequested();
                    }

                    var favoriteAnime = animes[i];

                    if ((favoriteAnime.LastUpdateDate == null) ||
                        (favoriteAnime.LastUpdateDate != null && favoriteAnime.LastUpdateDate != DateTime.Today))
                    {
                        await App.DelayRequest(4);

                        Anime anime = await App.Jikan.GetAnime(favoriteAnime.Anime.MalId);

                        anime.RequestCached = true;

                        int  lastEpisode     = favoriteAnime.LastEpisodeSeen;
                        bool hasNotification = favoriteAnime.CanGenerateNotifications;

                        //TODO:linha dos episódios comentados pelo motivo do MAL estar instável e isso gerar uma carga desnecessária
                        //a informação importante é apenas os dados do anime
                        favoriteAnime = new FavoritedAnime(anime /*, await anime.GetAllEpisodesAsync(_cancelationToken)*/);
                        favoriteAnime.LastUpdateDate  = DateTime.Today;
                        favoriteAnime.IsFavorited     = true;
                        favoriteAnime.LastEpisodeSeen = lastEpisode;
                        favoriteAnime.NextStreamDate  = await favoriteAnime.NextEpisodeDateAsync();


                        //TODO:linha abaixo de testes, remover quando conseguir corrigir o problema da https://github.com/JaoHundred/ANT/issues/80
                        //favoriteAnime.Anime.Airing = false;

                        //se está exibindo e possui data de estreia
                        favoriteAnime.CanGenerateNotifications =
                            favoriteAnime.Anime.Airing && favoriteAnime.NextStreamDate != null ? hasNotification : false;

                        db.Update(favoriteAnime.Anime.MalId, favoriteAnime);
                    }
                }
            }
            catch (JikanRequestException ex)
            {
                ex.SaveExceptionData();
            }
            catch (OperationCanceledException ex)
            { }
            catch (Exception ex)
            {
                ex.SaveExceptionData();
            }
            finally
            {
                App.liteDB.Checkpoint();
            }
        }
Ejemplo n.º 2
0
        private async Task FavoriteAnimesFromCatalogue()
        {
            try
            {
                var favoriteCollection = App.liteDB.GetCollection <FavoritedAnime>();
                var collection         = _collection as IList <FavoritedAnime>;

                for (int i = 0; i < collection.Count; i++)
                {
                    double result = (double)i / collection.Count;
                    MessagingCenter.Send <ProgressPopupViewModel, double>(this, string.Empty, result);

                    if (favoriteCollection.FindById(collection[i].Anime.MalId) != null)
                    {
                        continue;
                    }

                    await App.DelayRequest(4);

                    if (_cancelationToken != null && _cancelationToken.IsCancellationRequested)
                    {
                        _cancelationToken.Token.ThrowIfCancellationRequested();
                    }

                    Anime anime = await App.Jikan.GetAnime(collection[i].Anime.MalId);

                    anime.RequestCached = true;

                    var favoritedAnime = new FavoritedAnime(anime /*, await anime.GetAllEpisodesAsync(_cancelationToken)*/);
                    favoritedAnime.IsFavorited    = true;
                    favoritedAnime.LastUpdateDate = DateTime.Today;
                    favoritedAnime.NextStreamDate = await favoritedAnime.NextEpisodeDateAsync();

                    int uniqueId = 0;

                    if (favoriteCollection.Count() > 0)
                    {
                        uniqueId = favoriteCollection.Max(p => p.UniqueNotificationID);

                        if (uniqueId == int.MaxValue)
                        {
                            uniqueId = 0;
                        }
                        else if (uniqueId < int.MaxValue)
                        {
                            uniqueId += 1;
                        }
                    }

                    favoritedAnime.UniqueNotificationID = uniqueId;

                    favoritedAnime.CanGenerateNotifications = favoritedAnime.Anime.Airing && favoritedAnime.NextStreamDate != null;

                    collection[i].IsFavorited = true;

                    favoriteCollection.Upsert(favoritedAnime.Anime.MalId, favoritedAnime);
                }
            }
            catch (JikanRequestException ex)
            {
                ex.SaveExceptionData();
            }
            catch (OperationCanceledException ex)
            { }
            catch (Exception ex)
            {
                ex.SaveExceptionData();
            }
        }