Пример #1
0
        public FeedGroupManagePageViewModel(HohoemaApp hohoemaApp, PageManager pageManager, Services.HohoemaDialogService dialogService)
            : base(hohoemaApp, pageManager)
        {
            _HohoemaDialogService = dialogService;

            FeedGroupItems = new ObservableCollection <FeedNewVideosList>();



            var feedManager = hohoemaApp.FeedManager;

            feedManager.FeedGroupAdded   += FeedManager_FeedGroupAdded;
            feedManager.FeedGroupRemoved += FeedManager_FeedGroupRemoved;
        }
Пример #2
0
        public FeedGroupPageViewModel(HohoemaApp hohoemaApp, PageManager pageManager, Services.HohoemaDialogService dialogService)
            : base(hohoemaApp, pageManager)
        {
            HohoemaDialogService = dialogService;

            IsDeleted = new ReactiveProperty <bool>();

            FeedGroupName = new ReactiveProperty <string>();
            FeedSources   = new ObservableCollection <FeedSourceBookmark>();

            FavItemType        = new ReactiveProperty <Database.BookmarkType>();
            FeedSourceId       = new ReactiveProperty <string>();
            FeedSourceItemName = new ReactiveProperty <string>();
            ExistFeedSource    = new ReactiveProperty <bool>();
            IsPublicFeedSource = new ReactiveProperty <bool>();

            CanUseFeedSource = Observable.CombineLatest(
                ExistFeedSource,
                IsPublicFeedSource
                )
                               .Select(x => x.All(y => y))
                               .ToReactiveProperty();



            FeedSourceId.ToUnit()
            .Subscribe(_ =>
            {
                ExistFeedSource.Value    = false;
                FeedSourceItemName.Value = "";
            });

            RenameApplyCommand = new ReactiveCommand();

            RenameApplyCommand.Subscribe(_ =>
            {
                FeedGroup.Label = FeedGroupName.Value;

                HohoemaApp.FeedManager.UpdateFeedGroup(FeedGroup);
            });
        }
        public RankingCategoryListPageViewModel(HohoemaApp hohoemaApp, PageManager pageManager, Services.HohoemaDialogService dialogService)
            : base(hohoemaApp, pageManager)
        {
            _HohoemaDialogService = dialogService;

            _RankingSettings = HohoemaApp.UserSettings.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));

                foreach (var i in HohoemaApp.UserSettings.RankingSettings.HighPriorityCategory)
                {
                    items.Add(new CategoryWithFav()
                    {
                        Category = i.Category, IsFavorit = true
                    });
                }
                foreach (var i in HohoemaApp.UserSettings.RankingSettings.MiddlePriorityCategory)
                {
                    items.Add(new CategoryWithFav()
                    {
                        Category = i.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);
                }

                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));

                foreach (var i in HohoemaApp.UserSettings.RankingSettings.LowPriorityCategory)
                {
                    items.Add(new CategoryWithFav()
                    {
                        Category = i.Category, IsFavorit = true
                    });
                }
                foreach (var i in HohoemaApp.UserSettings.RankingSettings.MiddlePriorityCategory)
                {
                    items.Add(new CategoryWithFav()
                    {
                        Category = i.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);
                }

                ResetRankingCategoryItems();
            });

            ResetRankingCategoryItems();
        }
Пример #4
0
        public SettingsPageViewModel(
            HohoemaApp hohoemaApp
            , PageManager pageManager
            , ToastNotificationService toastService
            , Services.HohoemaDialogService dialogService
            )
            : base(hohoemaApp, pageManager)
        {
            ToastNotificationService = toastService;
            _NGSettings           = HohoemaApp.UserSettings.NGSettings;
            _RankingSettings      = HohoemaApp.UserSettings.RankingSettings;
            _HohoemaDialogService = dialogService;

            IsLiveAlertEnabled = HohoemaApp.UserSettings.ActivityFeedSettings.ToReactivePropertyAsSynchronized(x => x.IsLiveAlertEnabled)
                                 .AddTo(_CompositeDisposable);

            // NG Video Owner User Id
            NGVideoOwnerUserIdEnable = _NGSettings.ToReactivePropertyAsSynchronized(x => x.NGVideoOwnerUserIdEnable);
            NGVideoOwnerUserIds      = _NGSettings.NGVideoOwnerUserIds
                                       .ToReadOnlyReactiveCollection();

            OpenUserPageCommand = new DelegateCommand <UserIdInfo>(userIdInfo =>
            {
                pageManager.OpenPage(HohoemaPageType.UserInfo, userIdInfo.UserId);
            });

            // NG Keyword on Video Title
            NGVideoTitleKeywordEnable = _NGSettings.ToReactivePropertyAsSynchronized(x => x.NGVideoTitleKeywordEnable);
            NGVideoTitleKeywords      = new ReactiveProperty <string>();
            NGVideoTitleKeywordError  = NGVideoTitleKeywords
                                        .Select(x =>
            {
                if (x == null)
                {
                    return(null);
                }

                var keywords     = x.Split('\r');
                var invalidRegex = keywords.FirstOrDefault(keyword =>
                {
                    Regex regex = null;
                    try
                    {
                        regex = new Regex(keyword);
                    }
                    catch { }
                    return(regex == null);
                });

                if (invalidRegex == null)
                {
                    return(null);
                }
                else
                {
                    return($"Error in \"{invalidRegex}\"");
                }
            })
                                        .ToReadOnlyReactiveProperty();

            // アピアランス

            var currentTheme = App.GetTheme();

            SelectedApplicationTheme = new ReactiveProperty <string>(currentTheme.ToString(), mode: ReactivePropertyMode.DistinctUntilChanged);

            SelectedApplicationTheme.Subscribe(x =>
            {
                var type = (ApplicationTheme)Enum.Parse(typeof(ApplicationTheme), x);
                App.SetTheme(type);

                // 一度だけトースト通知
                if (!ThemeChanged)
                {
                    toastService.ShowText("Hohoemaを再起動するとテーマが適用されます。", "");
                }

                ThemeChanged = true;
                RaisePropertyChanged(nameof(ThemeChanged));
            });

            IsTVModeEnable = HohoemaApp.UserSettings.AppearanceSettings
                             .ToReactivePropertyAsSynchronized(x => x.IsForceTVModeEnable);
            IsXbox = Helpers.DeviceTypeHelper.IsXbox;



            IsDefaultFullScreen = new ReactiveProperty <bool>(ApplicationView.PreferredLaunchWindowingMode == ApplicationViewWindowingMode.FullScreen);
            IsDefaultFullScreen.Subscribe(x =>
            {
                if (x)
                {
                    ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.FullScreen;
                }
                else
                {
                    ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.Auto;
                }
            });

            StartupPageType = HohoemaApp.UserSettings.AppearanceSettings
                              .ToReactivePropertyAsSynchronized(x => x.StartupPageType);


            // キャッシュ
            DefaultCacheQuality                 = HohoemaApp.UserSettings.CacheSettings.ToReactivePropertyAsSynchronized(x => x.DefaultCacheQuality);
            IsAllowDownloadOnMeteredNetwork     = HohoemaApp.UserSettings.CacheSettings.ToReactivePropertyAsSynchronized(x => x.IsAllowDownloadOnMeteredNetwork);
            DefaultCacheQualityOnMeteredNetwork = HohoemaApp.UserSettings.CacheSettings.ToReactivePropertyAsSynchronized(x => x.DefaultCacheQualityOnMeteredNetwork);

            // シェア
            IsLoginTwitter           = new ReactiveProperty <bool>(/*TwitterHelper.IsLoggedIn*/ false);
            TwitterAccountScreenName = new ReactiveProperty <string>(/*TwitterHelper.TwitterUser?.ScreenName ?? ""*/);


            // アバウト
            var version = Windows.ApplicationModel.Package.Current.Id.Version;

#if DEBUG
            VersionText = $"{version.Major}.{version.Minor}.{version.Build} DEBUG";
#else
            VersionText = $"{version.Major}.{version.Minor}.{version.Build}";
#endif


            var dispatcher = Window.Current.CoreWindow.Dispatcher;
            LisenceSummary.Load()
            .ContinueWith(async prevResult =>
            {
                await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                {
                    var lisenceSummary = prevResult.Result;

                    LisenceItems = lisenceSummary.Items
                                   .OrderBy(x => x.Name)
                                   .Select(x => new LisenceItemViewModel(x))
                                   .ToList();
                    RaisePropertyChanged(nameof(LisenceItems));
                });
            });


            IsDebugModeEnabled = new ReactiveProperty <bool>((App.Current as App).IsDebugModeEnabled, mode: ReactivePropertyMode.DistinctUntilChanged);
            IsDebugModeEnabled.Subscribe(isEnabled =>
            {
                (App.Current as App).IsDebugModeEnabled = isEnabled;
            })
            .AddTo(_CompositeDisposable);
        }
 public ShereLiveInfoContentViewModel(NicoLiveVideo liveVideo, Services.HohoemaDialogService dialogService)
 {
     NicoLiveVideo          = liveVideo;
     HohoemaDialogService   = dialogService;
     IsStillLoggedInTwitter = new ReactiveProperty <bool>(false /*!TwitterHelper.IsLoggedIn*/);
 }
Пример #6
0
        /*
         * private void Context_DoneDownload(NicoVideoDownloadContext sender, NiconicoDownloadEventArgs args)
         *      {
         *              var hohoemaApp = Container.Resolve<HohoemaApp>();
         *              var toastService = Container.Resolve<Views.Service.ToastNotificationService>();
         *              var pageManager = Container.Resolve<PageManager>();
         *
         *              try
         *              {
         *                      var videoData = Models.Db.VideoInfoDb.Get(args.RawVideoId);
         *
         *                      if (videoData != null)
         *                      {
         *                              toastService.ShowText(
         *                                      videoData.Title,
         *                                      $"キャッシュが完了、このメッセージをタップして再生開始",
         *                                      toastActivatedAction: () =>
         *                                      {
         *                  hohoemaApp.Playlist.DefaultPlaylist.AddVideo(args.RawVideoId, "", args.Quality);
         *                                      }
         *                                      );
         *                      }
         *              }
         *              catch { }
         *      }
         */


        private async Task RegisterTypes()
        {
            // Service
            var dialogService = new Services.HohoemaDialogService();

            Container.RegisterInstance(dialogService);

            Container.RegisterInstance(new Views.Service.ToastNotificationService());



            // Models
            var secondaryViewMan = new HohoemaViewManager();
            var hohoemaApp       = await HohoemaApp.Create(EventAggregator, secondaryViewMan, dialogService);

            Container.RegisterInstance(secondaryViewMan);
            Container.RegisterInstance(hohoemaApp);
            Container.RegisterInstance(new PageManager(hohoemaApp, NavigationService, hohoemaApp.UserSettings.AppearanceSettings, hohoemaApp.Playlist, secondaryViewMan, dialogService));
            Container.RegisterInstance(hohoemaApp.ContentProvider);
            Container.RegisterInstance(hohoemaApp.Playlist);
            Container.RegisterInstance(hohoemaApp.OtherOwneredMylistManager);
            Container.RegisterInstance(hohoemaApp.FeedManager);
            Container.RegisterInstance(hohoemaApp.CacheManager);
            Container.RegisterInstance(hohoemaApp.UserSettings);
            Container.RegisterInstance(new Models.Niconico.Live.NicoLiveSubscriber(hohoemaApp));

            Container.RegisterInstance(new Microsoft.Toolkit.Uwp.Helpers.LocalObjectStorageHelper());
#if DEBUG
            //			BackgroundUpdater.MaxTaskSlotCount = 1;
#endif
            // TODO: プレイヤーウィンドウ上で管理する
            //			var backgroundTask = MediaBackgroundTask.Create();
            //			Container.RegisterInstance(backgroundTask);


            // ViewModels
            Container.RegisterType <ViewModels.RankingCategoryListPageViewModel>(new ContainerControlledLifetimeManager());

            /*
             * Container.RegisterType<ViewModels.SearchPageViewModel>(new ContainerControlledLifetimeManager());
             * Container.RegisterType<ViewModels.MenuNavigatePageBaseViewModel>(new ContainerControlledLifetimeManager());
             * Container.RegisterType<ViewModels.WatchHistoryPageViewModel>(new ContainerControlledLifetimeManager());
             *          Container.RegisterType<ViewModels.UserVideoPageViewModel>(new ContainerControlledLifetimeManager());
             * Container.RegisterType<ViewModels.MylistPageViewModel>(new ContainerControlledLifetimeManager());
             */
            /*
             *          Container.RegisterType<ViewModels.SearchPageViewModel>(new ContainerControlledLifetimeManager());
             *          //			Container.RegisterType<ViewModels.UserVideoPageViewModel>(new ContainerControlledLifetimeManager());
             *          Container.RegisterType<ViewModels.FeedVideoListPageViewModel>(new ContainerControlledLifetimeManager());
             *          Container.RegisterType<ViewModels.UserMylistPageViewModel>(new ContainerControlledLifetimeManager());
             *          Container.RegisterType<ViewModels.CacheManagementPageViewModel>(new ContainerControlledLifetimeManager());
             * //			Container.RegisterType<ViewModels.PortalPageViewModel>(new ContainerControlledLifetimeManager());
             */

            Resources.Add("IsXbox", Helpers.DeviceTypeHelper.IsXbox);
            Resources.Add("IsMobile", Helpers.DeviceTypeHelper.IsMobile);

            Resources.Add("IsCacheEnabled", hohoemaApp.UserSettings.CacheSettings.IsEnableCache);
            Resources.Add("IsTVModeEnabled", Helpers.DeviceTypeHelper.IsXbox || hohoemaApp.UserSettings.AppearanceSettings.IsForceTVModeEnable);

            //			return Task.CompletedTask;
        }
        public SearchResultTagPageViewModel(
            HohoemaApp hohoemaApp,
            PageManager pageManager,
            Services.HohoemaDialogService dialogService
            )
            : base(hohoemaApp, pageManager, useDefaultPageTitle: false)
        {
            _ContentFinder        = HohoemaApp.ContentProvider;
            _HohoemaDialogService = dialogService;

            FailLoading = new ReactiveProperty <bool>(false)
                          .AddTo(_CompositeDisposable);

            LoadedPage = new ReactiveProperty <int>(1)
                         .AddTo(_CompositeDisposable);


            IsFavoriteTag = new ReactiveProperty <bool>(mode: ReactivePropertyMode.DistinctUntilChanged)
                            .AddTo(_CompositeDisposable);
            CanChangeFavoriteTagState = new ReactiveProperty <bool>()
                                        .AddTo(_CompositeDisposable);

            AddFavoriteTagCommand = CanChangeFavoriteTagState
                                    .ToReactiveCommand()
                                    .AddTo(_CompositeDisposable);

            RemoveFavoriteTagCommand = IsFavoriteTag
                                       .ToReactiveCommand()
                                       .AddTo(_CompositeDisposable);


            IsFavoriteTag.Subscribe(async x =>
            {
                if (_NowProcessFavorite)
                {
                    return;
                }

                _NowProcessFavorite = true;

                CanChangeFavoriteTagState.Value = false;
                if (x)
                {
                    if (await FavoriteTag())
                    {
                        Debug.WriteLine(SearchOption.Keyword + "のタグをお気に入り登録しました.");
                    }
                    else
                    {
                        // お気に入り登録に失敗した場合は状態を差し戻し
                        Debug.WriteLine(SearchOption.Keyword + "のタグをお気に入り登録に失敗");
                        IsFavoriteTag.Value = false;
                    }
                }
                else
                {
                    if (await UnfavoriteTag())
                    {
                        Debug.WriteLine(SearchOption.Keyword + "のタグをお気に入り解除しました.");
                    }
                    else
                    {
                        // お気に入り解除に失敗した場合は状態を差し戻し
                        Debug.WriteLine(SearchOption.Keyword + "のタグをお気に入り解除に失敗");
                        IsFavoriteTag.Value = true;
                    }
                }

                CanChangeFavoriteTagState.Value = IsFavoriteTag.Value == true || HohoemaApp.FollowManager.CanMoreAddFollow(FollowItemType.Tag);


                _NowProcessFavorite = false;
            })
            .AddTo(_CompositeDisposable);

            SelectedSearchSort = new ReactiveProperty <SearchSortOptionListItem>(
                VideoSearchOptionListItems.First(),
                mode: ReactivePropertyMode.DistinctUntilChanged
                );

            SelectedSearchSort
            .Subscribe(_ =>
            {
                var selected = SelectedSearchSort.Value;
                if (SearchOption.Order == selected.Order &&
                    SearchOption.Sort == selected.Sort
                    )
                {
                    return;
                }

                SearchOption.Sort  = SelectedSearchSort.Value.Sort;
                SearchOption.Order = SelectedSearchSort.Value.Order;

                pageManager.Search(SearchOption, forgetLastSearch: true);
            })
            .AddTo(_CompositeDisposable);

            SelectedSearchTarget = new ReactiveProperty <SearchTarget>();
        }