示例#1
0
        private async Task UpdateCharactersFromFavorited()
        {
            //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 <FavoritedAnimeCharacter>();
                var    characters = _collection as List <FavoritedAnimeCharacter>;
                double total      = characters.Count;

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

                    await App.DelayRequest(4);

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

                    var chara = db.FindById(characters[i].Character.MalId);

                    Character character = await App.Jikan.GetCharacter(chara.Character.MalId);

                    character.RequestCached = true;

                    await App.DelayRequest(4);

                    CharacterPictures characterPictures = await App.Jikan.GetCharacterPictures(chara.Character.MalId);

                    characterPictures.RequestCached = true;

                    chara             = new FavoritedAnimeCharacter(character, characterPictures.Pictures.ToList());
                    chara.IsFavorited = true;

                    db.Update(chara.Character.MalId, chara);
                }
            }
            catch (JikanRequestException ex)
            {
                ex.SaveExceptionData();
            }
            catch (OperationCanceledException ex)
            { }
            catch (Exception ex)
            {
                ex.SaveExceptionData();
            }
        }
示例#2
0
        public async Task LoadAsync(object param)
        {
            var characterId = (long)param;

            IsLoading = true;
            CanEnable = !IsLoading;

            try
            {
                FavoritedAnimeCharacter animeCharacter = App.liteDB.GetCollection <FavoritedAnimeCharacter>().FindById(characterId);

                if (animeCharacter == null)
                {
                    await App.DelayRequest();

                    Character character = await App.Jikan.GetCharacter(characterId);

                    await App.DelayRequest();

                    var characterPictures = await App.Jikan.GetCharacterPictures(characterId);

                    animeCharacter = new FavoritedAnimeCharacter(character, characterPictures.Pictures.ToList());
                }

                CharacterContext = animeCharacter;
            }
            catch (JikanRequestException ex)
            {
                ex.SaveExceptionData();
            }
            catch (OperationCanceledException ex)
            {
                Console.WriteLine($"Tasks canceladas {Environment.NewLine} " +
                                  $"{ex.Message}");
            }
            catch (Exception ex)
            {
                ex.SaveExceptionData();
            }
            finally
            {
                IsLoading = false;
                CanEnable = !IsLoading;
            }
        }