public override async Task LoadAsync() { Ocupado = true; try { LiteCollection <PokemonLTB> pokemonsDB = _dataBase.GetCollection <PokemonLTB>(); if (pokemonsDB.Count() == 0) { var pokemonsAPI = await _pokemonService.GetPokemonsAsync(); foreach (var pokemon in pokemonsAPI) { PokemonLTB pokeLTB = new PokemonLTB { Id = pokemon.Id, Name = pokemon.Name.ToUpper(), Height = pokemon.Height }; pokemonsDB.Upsert(pokeLTB); using (Stream stream = GetImageStreamFromUrl(pokemon.Sprites.FrontDefault.AbsoluteUri)) { if (stream != null) { //Verfica se ja existe a imagem,se existir apaga if (_dataBase.FileStorage.Exists(pokemon.Id.ToString())) { _dataBase.FileStorage.Delete(pokemon.Id.ToString()); } _dataBase.FileStorage.Upload(pokemon.Id.ToString(), pokemon.Name, stream); } } } pokemonsDB = _dataBase.GetCollection <PokemonLTB>(); } Pokemons.Clear(); foreach (var pokemon in pokemonsDB.FindAll()) { pokemon.Image = ImageSource.FromStream(() => _dataBase.FileStorage.FindById(pokemon.Id.ToString()).OpenRead()); Pokemons.Add(pokemon); } } catch (Exception ex) { Debug.WriteLine("Erro", ex.Message); } finally { Ocupado = false; } }
private async Task GravarPokemons() { Ocupado = true; var pokemonsAPI = await _pokemonService.GetPokemonsAsync(); Pokemons.Clear(); var existingList = Barrel.Current.Get <List <PokemonLTB> >(_key) ?? new List <PokemonLTB>(); foreach (var pokemon in pokemonsAPI) { var isExist = existingList.Any(e => e.Id == pokemon.Id); PokemonLTB pokeLTB = new PokemonLTB { Id = pokemon.Id, Name = pokemon.Name.ToUpper(), Height = pokemon.Height, ImageByte = GetImageStreamFromUrl(pokemon.Sprites.FrontDefault.AbsoluteUri) }; if (!isExist) { existingList.Add(pokeLTB); } Pokemons.Add(pokeLTB); } existingList = existingList.ToList(); Barrel.Current.Add(_key, existingList, TimeSpan.FromDays(30)); Ocupado = false; }