Ejemplo n.º 1
0
        protected override void OnHohoemaNavigatingFrom(NavigatingFromEventArgs e, Dictionary <string, object> viewModelState, bool suspending)
        {
            RankingSettings.Save().ConfigureAwait(false);

            base.OnHohoemaNavigatingFrom(e, viewModelState, suspending);
        }
Ejemplo n.º 2
0
        public RankingCategoryListPageViewModel(
            Services.PageManager pageManager,
            Services.DialogService dialogService,
            RankingSettings rankingSettings
            )
            : base(pageManager)
        {
            HohoemaDialogService = dialogService;
            RankingSettings      = rankingSettings;


            Func <RankingCategory, bool> checkFavorite = (RankingCategory cat) =>
            {
                return(RankingSettings.HighPriorityCategory.Any(x => x.Category == cat));
            };


            RankingCategoryItems         = new ObservableCollection <RankingCategoryHostListItem>();
            FavoriteRankingCategoryItems = new ObservableCollection <RankingCategoryListPageListItem>();

            SelectedRankingCategory = new ReactiveProperty <RankingCategoryListPageListItem>();

            AddFavRankingCategory = new DelegateCommand(async() =>
            {
                var items = new AdvancedCollectionView();
                items.SortDescriptions.Add(new SortDescription("IsFavorit", SortDirection.Descending));
                items.SortDescriptions.Add(new SortDescription("Category", SortDirection.Ascending));

                var highPriCat = RankingSettings.HighPriorityCategory;
                var lowPriCat  = RankingSettings.LowPriorityCategory;
                foreach (var i in RankingSettings.HighPriorityCategory)
                {
                    items.Add(new CategoryWithFav()
                    {
                        Category = i.Category, IsFavorit = true
                    });
                }

                var middleRankingCategories = Enum.GetValues(typeof(RankingCategory)).Cast <RankingCategory>()
                                              .Where(x => !highPriCat.Any(h => x == h.Category))
                                              .Where(x => !lowPriCat.Any(l => x == l.Category))
                ;
                foreach (var category in middleRankingCategories)
                {
                    items.Add(new CategoryWithFav()
                    {
                        Category = category
                    });
                }
                items.Refresh();

                var choiceItems = await HohoemaDialogService.ShowMultiChoiceDialogAsync(
                    "優先表示にするカテゴリを選択",
                    items.Cast <CategoryWithFav>().Select(x => new RankingCategoryInfo(x.Category)),
                    RankingSettings.HighPriorityCategory.ToArray(),
                    x => x.DisplayLabel
                    );

                if (choiceItems == null)
                {
                    return;
                }

                // choiceItemsに含まれるカテゴリをMiddleとLowから削除
                RankingSettings.ResetFavoriteCategory();

                // HighにchoiceItemsを追加(重複しないよう注意)
                foreach (var cat in choiceItems)
                {
                    RankingSettings.AddFavoritCategory(cat.Category);
                }

                await RankingSettings.Save();

                ResetRankingCategoryItems();
            });



            AddDislikeRankingCategory = new DelegateCommand(async() =>
            {
                var items = new AdvancedCollectionView();
                items.SortDescriptions.Add(new SortDescription("IsFavorit", SortDirection.Descending));
                items.SortDescriptions.Add(new SortDescription("Category", SortDirection.Ascending));

                var highPriCat = RankingSettings.HighPriorityCategory;
                var lowPriCat  = RankingSettings.LowPriorityCategory;
                foreach (var i in lowPriCat)
                {
                    items.Add(new CategoryWithFav()
                    {
                        Category = i.Category, IsFavorit = true
                    });
                }
                var middleRankingCategories = Enum.GetValues(typeof(RankingCategory)).Cast <RankingCategory>()
                                              .Where(x => !highPriCat.Any(h => x == h.Category))
                                              .Where(x => !lowPriCat.Any(l => x == l.Category))
                ;
                foreach (var category in middleRankingCategories)
                {
                    items.Add(new CategoryWithFav()
                    {
                        Category = category
                    });
                }
                items.Refresh();

                var choiceItems = await HohoemaDialogService.ShowMultiChoiceDialogAsync(
                    "非表示にするカテゴリを選択",
                    items.Cast <CategoryWithFav>().Select(x => new RankingCategoryInfo(x.Category)),
                    RankingSettings.LowPriorityCategory,
                    x => x.DisplayLabel
                    );

                if (choiceItems == null)
                {
                    return;
                }

                // choiceItemsに含まれるカテゴリをMiddleとLowから削除
                RankingSettings.ResetDislikeCategory();

                // HighにchoiceItemsを追加(重複しないよう注意)
                foreach (var cat in choiceItems)
                {
                    RankingSettings.AddDislikeCategory(cat.Category);
                }

                await RankingSettings.Save();

                ResetRankingCategoryItems();
            });

            ResetRankingCategoryItems();
        }
Ejemplo n.º 3
0
        public RankingCategoryListPageViewModel(
            ApplicationLayoutManager applicationLayoutManager,
            Services.PageManager pageManager,
            Services.DialogService dialogService,
            RankingSettings rankingSettings,
            IEventAggregator eventAggregator,
            AppFlagsRepository appFlagsRepository,
            RankingProvider rankingProvider
            )
        {
            ApplicationLayoutManager = applicationLayoutManager;
            PageManager          = pageManager;
            HohoemaDialogService = dialogService;
            RankingSettings      = rankingSettings;
            _eventAggregator     = eventAggregator;
            _appFlagsRepository  = appFlagsRepository;
            _rankingProvider     = rankingProvider;


            // TODO: ログインユーザーが成年であればR18ジャンルを表示するように
            _RankingGenreItemsSource = new List <RankingGenreItem>();

            FavoriteItems = new ObservableCollection <RankingItem>(GetFavoriteRankingItems());
            _favoriteRankingGenreGroupItem = new FavoriteRankingGenreGroupItem()
            {
                Label     = "FavoriteRankingTag".Translate(),
                IsDisplay = true,
                Items     = new AdvancedCollectionView(FavoriteItems),
            };
            _RankingGenreItemsSource.Add(_favoriteRankingGenreGroupItem);


            var sourceGenreItems = Enum.GetValues(typeof(RankingGenre)).Cast <RankingGenre>()
                                   .Where(x => x != RankingGenre.R18)
                                   .Select(x =>
            {
                var acv = new AdvancedCollectionView(new ObservableCollection <RankingItem>(GetGenreTagRankingItems(x, RankingSettings)), isLiveShaping: true)
                {
                    Filter = (item) => (item as RankingItem).IsDisplay,
                };
                acv.ObserveFilterProperty(nameof(RankingItem.IsDisplay));

                return(new RankingGenreItem()
                {
                    Genre = x,
                    Label = x.Translate(),
                    IsDisplay = !RankingSettings.IsHiddenGenre(x),
                    Items = acv
                });
            });

            foreach (var genreItem in sourceGenreItems)
            {
                _RankingGenreItemsSource.Add(genreItem);
            }


            foreach (var item in _RankingGenreItemsSource)
            {
                if (item.Genre == null)
                {
                    _RankingGenreItems.Add(item);
                }
                else if (!RankingSettings.IsHiddenGenre(item.Genre.Value))
                {
                    _RankingGenreItems.Add(item);
                }
            }


            {
                RankingGenreItems = new CollectionViewSource()
                {
                    Source          = _RankingGenreItems,
                    ItemsPath       = new Windows.UI.Xaml.PropertyPath(nameof(RankingGenreItem.Items)),
                    IsSourceGrouped = true,
                };
            }

            _eventAggregator.GetEvent <Events.RankingGenreShowRequestedEvent>()
            .Subscribe((args) =>
            {
                // Tagの指定が無い場合はジャンル自体の非表示として扱う
                var genreItem = _RankingGenreItemsSource.First(x => x.Genre == args.RankingGenre);
                if (string.IsNullOrEmpty(args.Tag))
                {
                    genreItem.IsDisplay = true;
                    RankingSettings.RemoveHiddenGenre(args.RankingGenre);
                    _ = RankingSettings.Save();

                    _RankingGenreItems.Clear();
                    foreach (var item in _RankingGenreItemsSource)
                    {
                        if (item.Genre == null)
                        {
                            _RankingGenreItems.Add(item);
                        }
                        else if (!RankingSettings.IsHiddenGenre(item.Genre.Value))
                        {
                            _RankingGenreItems.Add(item);
                        }
                    }

                    System.Diagnostics.Debug.WriteLine($"Genre Show: {args.RankingGenre}");
                }
                else
                {
                    var sameTagItem = genreItem.Items.SourceCollection.Cast <RankingItem>().FirstOrDefault(x => x.Tag == args.Tag);
                    if (sameTagItem != null)
                    {
                        sameTagItem.IsDisplay = true;
                        RankingSettings.RemoveHiddenTag(args.RankingGenre, args.Tag);
                        _ = RankingSettings.Save();

                        System.Diagnostics.Debug.WriteLine($"Tag Show: {args.Tag}");
                    }
                }
            })
            .AddTo(_CompositeDisposable);

            _eventAggregator.GetEvent <Events.RankingGenreHiddenRequestedEvent>()
            .Subscribe((args) =>
            {
                // Tagの指定が無い場合はジャンル自体の非表示として扱う
                var genreItem = _RankingGenreItemsSource.First(x => x.Genre == args.RankingGenre);
                if (string.IsNullOrEmpty(args.Tag))
                {
                    genreItem.IsDisplay = false;
                    RankingSettings.AddHiddenGenre(args.RankingGenre);
                    _ = RankingSettings.Save();

                    _RankingGenreItems.Clear();
                    foreach (var item in _RankingGenreItemsSource)
                    {
                        if (item.Genre == null)
                        {
                            _RankingGenreItems.Add(item);
                        }
                        else if (!RankingSettings.IsHiddenGenre(item.Genre.Value))
                        {
                            _RankingGenreItems.Add(item);
                        }
                    }

                    System.Diagnostics.Debug.WriteLine($"Genre Hidden: {args.RankingGenre}");
                }
                else
                {
                    var sameTagItem = genreItem.Items.SourceCollection.Cast <RankingItem>().FirstOrDefault(x => x.Tag == args.Tag);
                    if (sameTagItem != null)
                    {
                        sameTagItem.IsDisplay = false;
                        RankingSettings.AddHiddenTag(sameTagItem.Genre.Value, sameTagItem.Tag, sameTagItem.Label);
                        _ = RankingSettings.Save();
                        System.Diagnostics.Debug.WriteLine($"Tag Hidden: {args.Tag}");
                    }
                }
            })
            .AddTo(_CompositeDisposable);

            _eventAggregator.GetEvent <Events.RankingGenreFavoriteRequestedEvent>()
            .Subscribe((args) =>
            {
                if (false == FavoriteItems.Any(x => x.Genre == args.RankingGenre && x.Tag == args.Tag))
                {
                    var addedItem = new RankingItem()
                    {
                        Genre      = args.RankingGenre,
                        IsDisplay  = true,
                        IsFavorite = true,
                        Label      = args.Label,
                        Tag        = args.Tag
                    };

                    FavoriteItems.Add(addedItem);
                    RankingSettings.AddFavoriteTag(addedItem.Genre.Value, addedItem.Tag, addedItem.Label);
                    _ = RankingSettings.Save();
                    System.Diagnostics.Debug.WriteLine($"Favorite added: {args.Label}");
                }
            })
            .AddTo(_CompositeDisposable);

            _eventAggregator.GetEvent <Events.RankingGenreUnFavoriteRequestedEvent>()
            .Subscribe((args) =>
            {
                var unFavoriteItem = FavoriteItems.FirstOrDefault(x => x.Genre == args.RankingGenre && x.Tag == args.Tag);
                if (unFavoriteItem != null)
                {
                    FavoriteItems.Remove(unFavoriteItem);
                    RankingSettings.RemoveFavoriteTag(unFavoriteItem.Genre.Value, unFavoriteItem.Tag);
                    _ = RankingSettings.Save();
                    System.Diagnostics.Debug.WriteLine($"Favorite removed: {args.RankingGenre} {args.Tag}");
                }
            })
            .AddTo(_CompositeDisposable);
        }