Пример #1
0
        public WatchHistoryPageViewModel(HohoemaApp hohoemaApp, PageManager pageManager)
            : base(hohoemaApp, pageManager)
        {
            RemoveHistoryCommand = SelectedItems.ObserveProperty(x => x.Count)
                                   .Select(x => x > 0)
                                   .ToReactiveCommand()
                                   .AddTo(_CompositeDisposable);

            RemoveHistoryCommand.Subscribe(async _ =>
            {
                var selectedItems = SelectedItems.ToArray();

                var action = AsyncInfo.Run <uint>(async(cancelToken, progress) =>
                {
                    foreach (var item in selectedItems)
                    {
                        await RemoveHistory(item.RawVideoId);

                        SelectedItems.Remove(item);

                        await Task.Delay(250);
                    }

                    await UpdateList();

                    _HistoriesResponse = await HohoemaApp.ContentProvider.GetHistory();

                    RemoveAllHistoryCommand.RaiseCanExecuteChanged();
                });

                await PageManager.StartNoUIWork("視聴履歴の削除", selectedItems.Length, () => action);
            })
            .AddTo(_CompositeDisposable);
        }
Пример #2
0
 public SearchResultMylistPageViewModel(
     HohoemaApp hohoemaApp
     , PageManager pageManager
     )
     : base(hohoemaApp, pageManager, useDefaultPageTitle: false)
 {
 }
Пример #3
0
        public SettingsLiveInfoContentViewModel(NicoLiveVideo liveVideo, HohoemaApp hohoemaApp)
        {
            _PlayerSettings = hohoemaApp.UserSettings.PlayerSettings;


            CommentRenderingFPS = _PlayerSettings.ToReactivePropertyAsSynchronized(x => x.CommentRenderingFPS)
                                  .AddTo(_CompositeDisposable);
            CommentDisplayDuration = _PlayerSettings.ToReactivePropertyAsSynchronized(x => x.CommentDisplayDuration, x => x.TotalSeconds, x => TimeSpan.FromSeconds(x))
                                     .AddTo(_CompositeDisposable);
            CommentFontScale = _PlayerSettings.ToReactivePropertyAsSynchronized(x => x.DefaultCommentFontScale)
                               .AddTo(_CompositeDisposable);
            CommentColor = _PlayerSettings.ToReactivePropertyAsSynchronized(x => x.CommentColor)
                           .AddTo(_CompositeDisposable);
            ScrollVolumeFrequency = _PlayerSettings.ToReactivePropertyAsSynchronized(x => x.ScrollVolumeFrequency)
                                    .AddTo(_CompositeDisposable);

            Observable.Merge(
                CommentRenderingFPS.ToUnit(),
                CommentDisplayDuration.ToUnit(),
                CommentFontScale.ToUnit(),
                CommentColor.ToUnit(),
                ScrollVolumeFrequency.ToUnit()
                )
            .SubscribeOnUIDispatcher()
            .Subscribe(_ => _PlayerSettings.Save().ConfigureAwait(false))
            .AddTo(_CompositeDisposable);
        }
Пример #4
0
        public HohoemaViewModelBase(
            HohoemaApp hohoemaApp,
            PageManager pageManager
            )
        {
            PageRequireServiceLevel = HohoemaAppServiceLevel.Offline;

            _NavigationToLock = new SemaphoreSlim(1, 1);
            HohoemaApp        = hohoemaApp;
            PageManager       = pageManager;

            NowSignIn = false;


            _CompositeDisposable           = new CompositeDisposable();
            _NavigatingCompositeDisposable = new CompositeDisposable();

            IsPageAvailable = HohoemaApp.ObserveProperty(x => x.ServiceStatus)
                              .Select(x => x >= PageRequireServiceLevel)
                              .ToReactiveProperty()
                              .AddTo(_CompositeDisposable);

            if (Helpers.DeviceTypeHelper.IsXbox)
            {
                IsForceTVModeEnable = new ReactiveProperty <bool>(true);
            }
            else
            {
                IsForceTVModeEnable = HohoemaApp.UserSettings.AppearanceSettings.ObserveProperty(x => x.IsForceTVModeEnable)
                                      .ToReactiveProperty();
            }

            SubstitutionBackNavigation = new Dictionary <string, Func <bool> >();
        }
Пример #5
0
        public FollowManagePageViewModel(HohoemaApp hohoemaApp, PageManager pageManager)
            : base(hohoemaApp, pageManager)
        {
            Lists = new ObservableCollection <FavoriteListViewModel>();

            NowUpdatingFavList = new ReactiveProperty <bool>();

            UpdateFavListCommand = new DelegateCommand <FavoriteListViewModel>((favListVM) =>
            {
                NowUpdatingFavList.Value = true;
                try
                {
                    favListVM.FollowGroup.SyncFollowItems().ConfigureAwait(false);
                }
                catch
                {
                    Debug.WriteLine($"{favListVM.FollowGroup.FollowItemType} のFollow List更新に失敗");
                }
                finally
                {
                    NowUpdatingFavList.Value = false;
                }
            });

            ChangeRequireServiceLevel(HohoemaAppServiceLevel.LoggedIn);
        }
Пример #6
0
        public NicoAccountIntroductionPageViewModel(HohoemaApp hohoema)
        {
            _HohoemaApp = hohoema;

            IsLoggedIn = _HohoemaApp.ObserveProperty(x => x.IsLoggedIn)
                         .ToReadOnlyReactiveProperty();
        }
Пример #7
0
        protected async Task <bool> CheckSignIn()
        {
            if (IsRequireSignIn)
            {
                var isSignIn = await HohoemaApp.CheckSignedInStatus() == Mntone.Nico2.NiconicoSignInStatus.Success;

                if (!HohoemaApp.IsLoggedIn && !isSignIn)
                {
                    if (!AccountManager.HasPrimaryAccount())
                    {
                        return(false);
                    }
                    else
                    {
                        var result = await HohoemaApp.SignInWithPrimaryAccount();

                        if (result == Mntone.Nico2.NiconicoSignInStatus.Failed)
                        {
                            return(false);
                        }
                    }
                }
            }

            return(HohoemaApp.IsLoggedIn);
        }
Пример #8
0
        public MylistIncrementalSource(string mylistGroupId, HohoemaApp hohoemaApp, PageManager pageManager)
            : base(hohoemaApp, "Mylist:" + mylistGroupId)
        {
            MylistGroupId = mylistGroupId;

            _PageManager = pageManager;
        }
Пример #9
0
        public CommunityPageViewModel(HohoemaApp hohoemaApp, PageManager pageManager)
            : base(hohoemaApp, pageManager)
        {
            IsFollowCommunity = new ReactiveProperty <bool>(mode: ReactivePropertyMode.DistinctUntilChanged)
                                .AddTo(_CompositeDisposable);
            CanChangeFollowCommunityState = new ReactiveProperty <bool>()
                                            .AddTo(_CompositeDisposable);

            IsFollowCommunity
            .Where(x => CommunityId != null)
            .Subscribe(async x =>
            {
                if (_NowProcessCommunity)
                {
                    return;
                }

                _NowProcessCommunity = true;

                CanChangeFollowCommunityState.Value = false;
                if (x)
                {
                    if (await FollowCommunity())
                    {
                        Debug.WriteLine(CommunityName + "のコミュニティをお気に入り登録しました.");
                    }
                    else
                    {
                        // お気に入り登録に失敗した場合は状態を差し戻し
                        Debug.WriteLine(CommunityName + "のコミュニティをお気に入り登録に失敗");
                        IsFollowCommunity.Value = false;
                    }
                }
                else
                {
                    if (await UnfollowCommunity())
                    {
                        Debug.WriteLine(CommunityName + "のコミュニティをお気に入り解除しました.");
                    }
                    else
                    {
                        // お気に入り解除に失敗した場合は状態を差し戻し
                        Debug.WriteLine(CommunityName + "のコミュニティをお気に入り解除に失敗");
                        IsFollowCommunity.Value = true;
                    }
                }

                var isAutoJoinAccept                = CommunityInfo.IsPublic;
                var isJoinRequireUserInfo           = CommunityInfo.option_flag_details.CommunityPrivUserAuth == "1";
                CanChangeFollowCommunityState.Value =
                    IsFollowCommunity.Value == true ||
                    (HohoemaApp.FollowManager.CanMoreAddFollow(FollowItemType.Community) && isAutoJoinAccept && !isJoinRequireUserInfo);

                _NowProcessCommunity = false;

                UpdateCanNotFollowReason();
            })
            .AddTo(_CompositeDisposable);
        }
Пример #10
0
 public FeedVideoIncrementalSource(IFeedGroup feedGroup, HohoemaApp hohoemaApp, PageManager pageManager)
     : base(hohoemaApp, "Feed:" + feedGroup.Label)
 {
     _FeedGroup            = feedGroup;
     _FavFeedManager       = hohoemaApp.FeedManager;
     _NiconicoMediaManager = hohoemaApp.MediaManager;
     _PageManager          = pageManager;
 }
Пример #11
0
        public VideoInfomationPageViewModel(HohoemaApp hohoemaApp, PageManager pageManager)
            : base(hohoemaApp, pageManager)
        {
            ChangeRequireServiceLevel(HohoemaAppServiceLevel.OnlineWithoutLoggedIn);

            NowLoading   = new ReactiveProperty <bool>(false);
            IsLoadFailed = new ReactiveProperty <bool>(false);
        }
Пример #12
0
 public SearchResultLivePageViewModel(
     HohoemaApp app,
     PageManager pageManager
     )
     : base(app, pageManager, useDefaultPageTitle: false)
 {
     ChangeRequireServiceLevel(HohoemaAppServiceLevel.OnlineWithoutLoggedIn);
 }
Пример #13
0
 public CommunityVideoIncrementalSource(string communityId, int videoCount, HohoemaApp hohoemaApp, PageManager pageManager)
     : base()
 {
     HohoemaApp   = hohoemaApp;
     _PageManager = pageManager;
     CommunityId  = communityId;
     VideoCount   = videoCount;
 }
Пример #14
0
        public NicoLiveVideo(string liveId, HohoemaApp hohoemaApp, string communityId = null)
        {
            LiveId       = liveId;
            _CommunityId = communityId;
            HohoemaApp   = hohoemaApp;

            _LiveComments = new ObservableCollection <Chat>();
            LiveComments  = new ReadOnlyObservableCollection <Chat>(_LiveComments);
        }
Пример #15
0
        public VideoInfomationPageViewModel(HohoemaApp hohoemaApp, PageManager pageManager)
            : base(hohoemaApp, pageManager, canActivateBackgroundUpdate: true)
        {
            ChangeRequireServiceLevel(HohoemaAppServiceLevel.OnlineWithoutLoggedIn);

            IsStillLoggedInTwitter = new ReactiveProperty <bool>(Util.TwitterHelper.IsLoggedIn);
            NowLoading             = new ReactiveProperty <bool>(false);
            IsLoadFailed           = new ReactiveProperty <bool>(false);
        }
Пример #16
0
 public VideoSearchSource(VideoSearchOption searchOption, HohoemaApp hohoemaApp, PageManager pageManager)
     : base(hohoemaApp
            , $"{searchOption.SearchTarget} Search: {searchOption.Keyword}"
            )
 {
     _HohoemaApp  = hohoemaApp;
     _PageManager = pageManager;
     SearchOption = searchOption;
 }
 public CategoryRankingLoadingSource(HohoemaApp app, PageManager pageManager, RankingCategory category, RankingTarget target, RankingTimeSpan timeSpan)
     : base()
 {
     _HohoemaApp  = app;
     _PageManager = pageManager;
     Category     = category;
     Target       = target;
     TimeSpan     = timeSpan;
 }
 public SearchResultMylistPageViewModel(
     HohoemaApp hohoemaApp
     , PageManager pageManager
     )
     : base(hohoemaApp, pageManager, useDefaultPageTitle: false)
 {
     SelectedSearchSort   = new ReactivePropertySlim <SearchSortOptionListItem>();
     SelectedSearchTarget = new ReactiveProperty <SearchTarget>();
 }
Пример #19
0
 public CategoryRankingLoadingSource(HohoemaApp app, PageManager pageManager, RankingCategory category, RankingTarget target, RankingTimeSpan timeSpan)
     : base(app, $"Ranking:{category.ToCultulizedText()}")
 {
     _HohoemaApp  = app;
     _PageManager = pageManager;
     _Category    = category;
     _Target      = target;
     _TimeSpan    = timeSpan;
 }
Пример #20
0
        public RankingCategoryPageViewModel(HohoemaApp hohoemaApp, EventAggregator ea, PageManager pageManager, Views.Service.MylistRegistrationDialogService mylistDialogService)
            : base(hohoemaApp, pageManager, mylistDialogService, useDefaultPageTitle: false)
        {
            this.ChangeRequireServiceLevel(HohoemaAppServiceLevel.LoggedIn);

            ContentFinder    = HohoemaApp.ContentFinder;
            _EventAggregator = ea;

            //			RankingSettings = hohoemaApp.UserSettings.RankingSettings;
            IsFailedRefreshRanking = new ReactiveProperty <bool>(false)
                                     .AddTo(_CompositeDisposable);
            CanChangeRankingParameter = new ReactiveProperty <bool>(false)
                                        .AddTo(_CompositeDisposable);



            // ランキングの対象
            RankingTargetItems = new List <RankingTargetListItem>()
            {
                new RankingTargetListItem(RankingTarget.view),
                new RankingTargetListItem(RankingTarget.res),
                new RankingTargetListItem(RankingTarget.mylist)
            };

            SelectedRankingTarget = new ReactiveProperty <RankingTargetListItem>(RankingTargetItems[0], ReactivePropertyMode.DistinctUntilChanged)
                                    .AddTo(_CompositeDisposable);


            // ランキングの集計期間
            RankingTimeSpanItems = new List <RankingTimeSpanListItem>()
            {
                new RankingTimeSpanListItem(RankingTimeSpan.hourly),
                new RankingTimeSpanListItem(RankingTimeSpan.daily),
                new RankingTimeSpanListItem(RankingTimeSpan.weekly),
                new RankingTimeSpanListItem(RankingTimeSpan.monthly),
                new RankingTimeSpanListItem(RankingTimeSpan.total),
            };

            SelectedRankingTimeSpan = new ReactiveProperty <RankingTimeSpanListItem>(RankingTimeSpanItems[0], ReactivePropertyMode.DistinctUntilChanged)
                                      .AddTo(_CompositeDisposable);

            Observable.Merge(
                SelectedRankingTimeSpan.ToUnit(),
                SelectedRankingTarget.ToUnit()
                )
            .SubscribeOnUIDispatcher()
            .Subscribe(async x =>
            {
                // NavigateToが呼ばれた後
                if (RequireCategoryInfo != null || CategoryInfo != null)
                {
                    await ResetList();
                }
            })
            .AddTo(_CompositeDisposable);
        }
Пример #21
0
 public UserVideoIncrementalSource(string userId, UserDetail userDetail, HohoemaApp hohoemaApp, PageManager pageManager)
 {
     UserId        = uint.Parse(userId);
     User          = userDetail;
     HohoemaApp    = hohoemaApp;
     ContentFinder = HohoemaApp.ContentProvider;
     MediaManager  = HohoemaApp.CacheManager;
     PageManager   = pageManager;
     _ResList      = new List <UserVideoResponse>();
 }
Пример #22
0
 public LiveSearchSource(
     LiveSearchPagePayloadContent searchOption,
     HohoemaApp app,
     PageManager pageManager
     )
 {
     HohoemaApp   = app;
     PageManager  = pageManager;
     SearchOption = searchOption;
 }
        public SearchResultCommunityPageViewModel(HohoemaApp app, PageManager pageManager)
            : base(app, pageManager, useDefaultPageTitle: false)
        {
            ChangeRequireServiceLevel(HohoemaAppServiceLevel.OnlineWithoutLoggedIn);

            SelectedSearchSort = new ReactivePropertySlim <CommunitySearchSortOptionListItem>();
            SelectedSearchMode = new ReactivePropertySlim <CommynitySearchModeOptionListItem>();

            SelectedSearchTarget = new ReactiveProperty <SearchTarget>();
        }
Пример #24
0
        public FollowManagePageViewModel(HohoemaApp hohoemaApp, PageManager pageManager)
            : base(hohoemaApp, pageManager)
        {
            Lists = new ObservableCollection <FavoriteListViewModel>();

            UpdateFavListCommand = new DelegateCommand <FavoriteListViewModel>((favListVM) =>
            {
                favListVM.FollowManager.Sync(favListVM.FavType);
            });
        }
        public RankingCategoryPageViewModel(HohoemaApp hohoemaApp, PageManager pageManager)
            : base(hohoemaApp, pageManager, useDefaultPageTitle: false)
        {
            SelectedRankingTarget   = new ReactiveProperty <RankingTargetListItem>(RankingTargetItems.First());
            SelectedRankingTimeSpan = new ReactiveProperty <RankingTimeSpanListItem>(RankingTimeSpanItems.First());

            IsFailedRefreshRanking = new ReactiveProperty <bool>(false)
                                     .AddTo(_CompositeDisposable);
            CanChangeRankingParameter = new ReactiveProperty <bool>(false)
                                        .AddTo(_CompositeDisposable);
        }
Пример #26
0
        public FeedVideoListPageViewModel(HohoemaApp hohoemaApp, PageManager pageManager)
            : base(hohoemaApp, pageManager, isRequireSignIn: true)
        {
            LastUpdate = new ReactiveProperty <DateTime>();

            OpenFeedGroupPageCommand = new DelegateCommand(() =>
            {
                if (FeedGroup != null)
                {
                    PageManager.OpenPage(HohoemaPageType.FeedGroup, FeedGroup.Id);
                }
            });
        }
 public CommunitySearchSource(
     CommunitySearchPagePayloadContent searchOption
     , HohoemaApp app
     , PageManager pageManager
     )
 {
     HohoemaApp    = app;
     PageManager   = pageManager;
     SearchKeyword = searchOption.Keyword;
     Mode          = searchOption.Mode;
     Sort          = searchOption.Sort;
     Order         = searchOption.Order;
 }
Пример #28
0
        protected override async Task NavigatedToAsync(CancellationToken cancelToken, NavigatedToEventArgs e, Dictionary <string, object> viewModelState)
        {
            if (e.Parameter is string)
            {
                var payload      = MylistPagePayload.FromParameterString <MylistPagePayload>(e.Parameter as string);
                var playableList = await HohoemaApp.GetPlayableList(payload.Id, payload.Origin);

                PlayableList.Value = playableList;
                MylistOrigin.Value = playableList.Origin;
            }


            await base.NavigatedToAsync(cancelToken, e, viewModelState);
        }
Пример #29
0
        private async Task TryLogin()
        {
            // Note: NiconicoContextのインスタンスを作成してサインインを試行すると
            // HttpClientのキャッシュ削除がされていない状態で試行されてしまい
            // 正常な結果を得られません。
            // HohoemaApp上で管理しているNiconicoContextのみに限定することで
            // HttpClientのキャッシュが残る挙動に対処しています

            IsAuthoricationFailed.Value = false;
            IsServiceUnavailable.Value  = false;

            var result = await HohoemaApp.SignIn(Mail.Value, Password.Value, withClearAuthenticationCache : true);

            IsValidAccount.Value        = result == Mntone.Nico2.NiconicoSignInStatus.Success;
            IsAuthoricationFailed.Value = result == Mntone.Nico2.NiconicoSignInStatus.Failed;
            IsServiceUnavailable.Value  = result == Mntone.Nico2.NiconicoSignInStatus.ServiceUnavailable;


            if (IsValidAccount.Value)
            {
                AccountManager.SetPrimaryAccountId(Mail.Value);

                if (IsRememberPassword.Value)
                {
                    await AccountManager.AddOrUpdateAccount(Mail.Value, Password.Value);
                }
                else
                {
                    AccountManager.RemoveAccount(Mail.Value);
                }

                // TODO: 初期セットアップ補助ページを開く?

                if (_RedirectInfo != null)
                {
                    try
                    {
                        PageManager.OpenPage(_RedirectInfo.RedirectPageType, _RedirectInfo.RedirectParamter);
                    }
                    catch
                    {
                        PageManager.OpenStartupPage();
                    }
                }
                else
                {
                    PageManager.OpenStartupPage();
                }
            }
        }
Пример #30
0
        public CacheManagementPageViewModel(HohoemaApp app, PageManager pageManager, Views.Service.MylistRegistrationDialogService mylistDialogService)
            : base(app, pageManager, mylistDialogService)
        {
            if (scheduler == null)
            {
                scheduler = new SynchronizationContextScheduler(SynchronizationContext.Current);
            }
            _MediaManager = app.MediaManager;

            OpenCacheSettingsCommand = new DelegateCommand(() =>
            {
                PageManager.OpenPage(HohoemaPageType.Settings, HohoemaSettingsKind.Cache.ToString());
            });
        }