Esempio n. 1
0
        private async Task OnFavorite()
        {
            //TODO: o usuário pode escolher desativar pela tela de FavoritedView e AnimeSpecsView as notificações
            string lang         = default;
            var    bdCollection = App.liteDB.GetCollection <FavoritedAnime>();

            var taskResult = Task.Run(async() =>
            {
                if (bdCollection.Exists(p => p.Anime.MalId == AnimeContext.Anime.MalId))
                {
                    AnimeContext.IsFavorited = false;

                    bdCollection.Delete(AnimeContext.Anime.MalId);
                    lang = Lang.Lang.RemovedFromFavorite;
                }
                else
                {
                    AnimeContext.IsFavorited    = true;
                    AnimeContext.LastUpdateDate = DateTime.Today;

                    AnimeContext.NextStreamDate = await AnimeContext.NextEpisodeDateAsync();

                    int uniqueId = 0;

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

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

                    AnimeContext.UniqueNotificationID = uniqueId;

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

                    bdCollection.Upsert(AnimeContext.Anime.MalId, AnimeContext);
                    lang = Lang.Lang.AddedToFavorite;
                }

                if (OtherViewModelFunc != null)
                {
                    //atualiza a coleção observável de CatalogueViewModel
                    await OtherViewModelFunc.Invoke();
                }
            });


            await taskResult;

            DependencyService.Get <IToast>().MakeToastMessageShort(lang);

#if DEBUG
            Console.WriteLine("Animes favoritados no momento");
            foreach (var anime in bdCollection.FindAll())
            {
                Console.WriteLine(anime.Anime.Title);
            }
#endif
        }