Exemple #1
0
        protected override async void Execute(object parameter)
        {
            var currentMethod = System.Reflection.MethodBase.GetCurrentMethod();

            //Microsoft.AppCenter.Analytics.Analytics.TrackEvent($"{currentMethod.DeclaringType.Name}#{currentMethod.Name}");

            if (parameter is IVideoContentProvider provider)
            {
                string ownerName = null;
                if (string.IsNullOrEmpty(ownerName))
                {
                    if (provider.ProviderType == OwnerType.User)
                    {
                        var user = _nicoVideoOwnerRepository.Get(provider.ProviderId);
                        if (user?.ScreenName is not null)
                        {
                            ownerName = user.ScreenName;
                        }
                        else
                        {
                            ownerName = await UserProvider.GetUserNameAsync(provider.ProviderId);
                        }
                    }
                    else if (provider.ProviderType == OwnerType.Channel)
                    {
                        ownerName = await ChannelProvider.GetChannelNameWithCacheAsync(provider.ProviderId);
                    }
                }

                NgSettings.AddHiddenVideoOwnerId(provider.ProviderId.ToString(), ownerName);
            }
        }
Exemple #2
0
        public UserInfoPageViewModel(
            UserProvider userProvider,
            NGSettings ngSettings,
            Models.NiconicoSession niconicoSession,
            SubscriptionManager subscriptionManager,
            UserMylistManager userMylistManager,
            Services.HohoemaPlaylist hohoemaPlaylist,
            PageManager pageManager,
            ExternalAccessService externalAccessService,
            NiconicoFollowToggleButtonService followToggleButtonService,
            Commands.Subscriptions.CreateSubscriptionGroupCommand createSubscriptionGroupCommand
            )
            : base(pageManager)
        {
            HasOwnerVideo = true;


            MylistGroups   = new ObservableCollection <MylistGroupListItem>();
            VideoInfoItems = new ObservableCollection <VideoInfoControlViewModel>();

            OpenUserVideoPageCommand = VideoInfoItems.ObserveProperty(x => x.Count)
                                       .Select(x => x > 0)
                                       .ToReactiveCommand()
                                       .AddTo(_CompositeDisposable);

            OpenUserVideoPageCommand.Subscribe(x =>
            {
                PageManager.OpenPage(HohoemaPageType.UserVideo, UserId);
            })
            .AddTo(_CompositeDisposable);

            IsNGVideoOwner = new ReactiveProperty <bool>(false, ReactivePropertyMode.DistinctUntilChanged);

            IsNGVideoOwner.Subscribe(isNgVideoOwner =>
            {
                if (isNgVideoOwner)
                {
                    NgSettings.AddNGVideoOwnerId(UserId, UserName);
                    IsNGVideoOwner.Value = true;
                    Debug.WriteLine(UserName + "をNG動画投稿者として登録しました。");
                }
                else
                {
                    NgSettings.RemoveNGVideoOwnerId(UserId);
                    IsNGVideoOwner.Value = false;
                    Debug.WriteLine(UserName + "をNG動画投稿者の指定を解除しました。");
                }
            });
            NiconicoSession                = niconicoSession;
            SubscriptionManager            = subscriptionManager;
            UserMylistManager              = userMylistManager;
            ExternalAccessService          = externalAccessService;
            FollowToggleButtonService      = followToggleButtonService;
            CreateSubscriptionGroupCommand = createSubscriptionGroupCommand;
            UserProvider = userProvider;
            NgSettings   = ngSettings;
        }
Exemple #3
0
        protected override bool CanExecute(object parameter)
        {
            if (parameter is Interfaces.IVideoContent video)
            {
                if (video.ProviderId != null)
                {
                    return(NgSettings.IsNgVideoOwnerId(video.ProviderId) == null);
                }
            }

            return(false);
        }
Exemple #4
0
        protected override bool CanExecute(object parameter)
        {
            if (parameter is IVideoContentProvider provider)
            {
                if (provider.ProviderId != null)
                {
                    return(!NgSettings.IsHiddenVideoOwnerId(provider.ProviderId));
                }
            }

            return(false);
        }
        protected override void OnHohoemaNavigatingFrom(NavigatingFromEventArgs e, Dictionary <string, object> viewModelState, bool suspending)
        {
            if (suspending)
            {
                //				viewModelState[nameof(CurrentSettingsKind)] = CurrentSettingsKind.Value.Kind.ToString();
            }
            else
            {
                // Note: ページアンロード中にPivotのSelectedItemが操作されると
                // Xaml側で例外がスローされてしまうようなので
                // サスペンド処理時はCurrentSettingsContentを変更しない
                //CurrentSettingsContent.Value = null;
            }

            // フィルタ
            // NG VideoTitleを複数行NG動画タイトル文字列から再構成
            NgSettings.NGVideoTitleKeywords.Clear();
            foreach (var ngKeyword in NGVideoTitleKeywords.Value.Split('\r'))
            {
                if (!string.IsNullOrWhiteSpace(ngKeyword))
                {
                    NgSettings.NGVideoTitleKeywords.Add(new NGKeyword()
                    {
                        Keyword = ngKeyword
                    });
                }
            }

            NgSettings.Save().ConfigureAwait(false);


            // TVMode有効フラグをXaml側に反映されるようリソースに書き込み
            // 汚いやり方かもしれない
            App.Current.Resources["IsTVModeEnabled"] = Services.Helpers.DeviceTypeHelper.IsXbox || AppearanceSettings.IsForceTVModeEnable;

            /*
             * RankingSettings.GetFile().ContinueWith(async prevTask =>
             * {
             *  await HohoemaApp.PushToRoamingData(prevTask.Result);
             * });
             * NgSettings.GetFile().ContinueWith(async prevTask =>
             * {
             *  await HohoemaApp.PushToRoamingData(prevTask.Result);
             * });
             */

            base.OnHohoemaNavigatingFrom(e, viewModelState, suspending);
        }
Exemple #6
0
        private void UpdateSelfZoning()
        {
            try
            {
                if (_VideoInfo != null)
                {
                    SelfZoningInfo      = NgSettings.IsNgVideo(_VideoInfo);
                    IsSelfZoningContent = SelfZoningInfo != null;

                    RaisePropertyChanged(nameof(SelfZoningInfo));
                    RaisePropertyChanged(nameof(IsSelfZoningContent));
                }
            }
            catch
            {
                IsLoadFailed.Value = true;
                return;
            }
        }
        protected override async void Execute(object parameter)
        {
            if (parameter is Interfaces.IVideoContent)
            {
                var content = parameter as Interfaces.IVideoContent;

                string ownerName = null;
                if (string.IsNullOrEmpty(ownerName))
                {
                    if (content.ProviderType == NicoVideoUserType.User)
                    {
                        try
                        {
                            var userInfo = await UserProvider.GetUser(content.ProviderId);

                            ownerName = userInfo.ScreenName;
                        }
                        catch
                        {
                            return;
                        }
                    }
                    else if (content.ProviderType == NicoVideoUserType.Channel)
                    {
                        var channelInfo = await ChannelProvider.GetChannelInfo(content.ProviderId);

                        ownerName = channelInfo.Name;

                        var channel = Database.NicoVideoOwnerDb.Get(content.ProviderId)
                                      ?? new Database.NicoVideoOwner()
                        {
                            OwnerId  = channelInfo.ChannelId.ToString(),
                            UserType = NicoVideoUserType.Channel,
                        };
                        channel.ScreenName = channelInfo.ScreenName ?? channel.ScreenName;
                        Database.NicoVideoOwnerDb.AddOrUpdate(channel);
                    }
                }

                NgSettings.AddNGVideoOwnerId(content.ProviderId.ToString(), ownerName);
            }
        }
        public override void OnNavigatedFrom(INavigationParameters parameters)
        {
            // フィルタ
            // NG VideoTitleを複数行NG動画タイトル文字列から再構成
            NgSettings.NGVideoTitleKeywords.Clear();
            foreach (var ngKeyword in NGVideoTitleKeywords.Value.Split('\r'))
            {
                if (!string.IsNullOrWhiteSpace(ngKeyword))
                {
                    NgSettings.NGVideoTitleKeywords.Add(new NGKeyword()
                    {
                        Keyword = ngKeyword
                    });
                }
            }

            NgSettings.Save().ConfigureAwait(false);

            base.OnNavigatedFrom(parameters);
        }
Exemple #9
0
        public override void OnNavigatedFrom(INavigationParameters parameters)
        {
            // フィルタ
            // NG VideoTitleを複数行NG動画タイトル文字列から再構成
            NgSettings.NGVideoTitleKeywords.Clear();
            foreach (var ngKeyword in NGVideoTitleKeywords.Value.Split('\r'))
            {
                if (!string.IsNullOrWhiteSpace(ngKeyword))
                {
                    NgSettings.NGVideoTitleKeywords.Add(new NGKeyword()
                    {
                        Keyword = ngKeyword
                    });
                }
            }

            NgSettings.Save().ConfigureAwait(false);


            // TVMode有効フラグをXaml側に反映されるようリソースに書き込み
            // 汚いやり方かもしれない
            App.Current.Resources["IsTVModeEnabled"] = Services.Helpers.DeviceTypeHelper.IsXbox || AppearanceSettings.IsForceTVModeEnable;

            /*
             * RankingSettings.GetFile().ContinueWith(async prevTask =>
             * {
             *  await HohoemaApp.PushToRoamingData(prevTask.Result);
             * });
             * NgSettings.GetFile().ContinueWith(async prevTask =>
             * {
             *  await HohoemaApp.PushToRoamingData(prevTask.Result);
             * });
             */

            base.OnNavigatedFrom(parameters);
        }
Exemple #10
0
        protected override async void Execute(object parameter)
        {
            if (parameter is Interfaces.IVideoContent)
            {
                var content = parameter as Interfaces.IVideoContent;


                var ownerName = content.ProviderName;
                if (string.IsNullOrEmpty(ownerName))
                {
                    if (content.ProviderType == Mntone.Nico2.Videos.Thumbnail.UserType.User)
                    {
                        try
                        {
                            var userInfo = await UserProvider.GetUser(content.ProviderId);

                            ownerName = userInfo.ScreenName;
                        }
                        catch
                        {
                            return;
                        }
                    }
                    else if (content.ProviderType == Mntone.Nico2.Videos.Thumbnail.UserType.Channel)
                    {
                        var channelInfo = await ChannelProvider.GetChannelInfo(content.ProviderId);

                        ownerName = channelInfo.Name;

                        var channel = Database.NicoVideoOwnerDb.Get(content.ProviderId)
                                      ?? new Database.NicoVideoOwner()
                        {
                            OwnerId  = channelInfo.ChannelId.ToString(),
                            UserType = Mntone.Nico2.Videos.Thumbnail.UserType.Channel,
                        };
                        channel.ScreenName = channelInfo.ScreenName ?? channel.ScreenName;
                        Database.NicoVideoOwnerDb.AddOrUpdate(channel);
                    }
                }

                var dialog = new MessageDialog(
                    $"この変更は投稿者({ownerName} さん)のアプリ内ユーザー情報ページから取り消すことができます。",

                    $"『{ownerName}』さんの投稿動画を非表示にしますか?"
                    );

                dialog.Commands.Add(new UICommand()
                {
                    Label   = "非表示に設定",
                    Invoked = (uicommand) =>
                    {
                        NgSettings.AddNGVideoOwnerId(content.ProviderId.ToString(), ownerName);
                    }
                });
                dialog.Commands.Add(new UICommand()
                {
                    Label = "キャンセル"
                });

                dialog.DefaultCommandIndex = 0;

                await dialog.ShowAsync();
            }
        }
Exemple #11
0
        protected override async Task NavigatedToAsync(CancellationToken cancelToken, NavigatedToEventArgs e, Dictionary <string, object> viewModelState)
        {
            NowLoading = true;

            string userId = null;

            if (e.Parameter is string)
            {
                userId = e.Parameter as string;
            }
            else if (e.Parameter is uint)
            {
                userId = ((uint)e.Parameter).ToString();
            }
            else
            {
                userId = NiconicoSession.UserId.ToString();
            }

            if (userId == UserId)
            {
                NowLoading = false;
                return;
            }

            UserId = userId;


            // ログインユーザーと同じ場合、お気に入り表示をOFFに
            IsLoginUser = NiconicoSession.UserId.ToString() == userId;

            IsLoadFailed = false;

            MylistGroups.Clear();
            VideoInfoItems.Clear();

            try
            {
                var userInfo = await UserProvider.GetUserDetail(UserId);

                var user = userInfo;
                UserName    = user.Nickname;
                UserIconUri = user.ThumbnailUri;

                FollowerCount  = user.FollowerCount;
                StampCount     = user.StampCount;
                VideoCount     = user.TotalVideoCount;
                IsVideoPrivate = user.IsOwnerVideoPrivate;
            }
            catch
            {
                IsLoadFailed = true;
                NowLoading   = false;
            }


            if (UserId == null)
            {
                return;
            }


            // NGユーザーの設定

            if (!IsLoginUser)
            {
                var ngResult = NgSettings.IsNgVideoOwnerId(UserId);
                IsNGVideoOwner.Value = ngResult != null;
            }
            else
            {
                IsNGVideoOwner.Value = false;
            }

            try
            {
                await Task.Delay(500);

                var userVideos = await UserProvider.GetUserVideos(uint.Parse(UserId), 1);

                foreach (var item in userVideos.Items.Take(5))
                {
                    var vm = new VideoInfoControlViewModel(item.VideoId);
                    vm.SetTitle(item.Title);
                    vm.SetThumbnailImage(item.ThumbnailUrl.OriginalString);
                    VideoInfoItems.Add(vm);
                }
                RaisePropertyChanged(nameof(VideoInfoItems));
            }
            catch (Exception ex)
            {
                IsLoadFailed = true;
                NowLoading   = false;
                Debug.WriteLine(ex.Message);
            }

            HasOwnerVideo = VideoInfoItems.Count != 0;


            if (NiconicoSession.IsLoginUserId(UserId))
            {
                foreach (var item in UserMylistManager.Mylists)
                {
                    MylistGroups.Add(new MylistGroupListItem(item));
                }
            }
            else
            {
                try
                {
                    //					await Task.Delay(500);

                    var mylistGroups = await UserProvider.GetUserMylistGroups(UserId);

                    foreach (var item in mylistGroups)
                    {
                        MylistGroups.Add(new MylistGroupListItem(item));
                    }
                }
                catch (Exception ex)
                {
                    IsLoadFailed = true;
                    Debug.WriteLine(ex.Message);
                }
            }
            RaisePropertyChanged(nameof(MylistGroups));


            UserBookmark = Database.BookmarkDb.Get(Database.BookmarkType.User, UserId)
                           ?? new Database.Bookmark()
            {
                Content      = UserId,
                Label        = UserName,
                BookmarkType = Database.BookmarkType.User
            };

            RaisePropertyChanged(nameof(UserBookmark));


            FollowToggleButtonService.SetFollowTarget(this);


            NowLoading = false;
        }
        public void SetupFromThumbnail(Database.NicoVideo info)
        {
            Debug.WriteLine("thumbnail reflect : " + info.RawVideoId);

            Label = info.Title;

            // NG判定
            if (NgSettings != null)
            {
                NGResult ngResult = null;

                // タイトルをチェック
                if (!_isTitleNgCheckProcessed && !string.IsNullOrEmpty(info.Title))
                {
                    ngResult = NgSettings.IsNGVideoTitle(info.Title);
                    _isTitleNgCheckProcessed = true;
                }

                // 投稿者IDをチェック
                if (ngResult == null &&
                    !_isOwnerIdNgCheckProcessed &&
                    !string.IsNullOrEmpty(info.Owner?.OwnerId)
                    )
                {
                    ngResult = NgSettings.IsNgVideoOwnerId(info.Owner.OwnerId);
                    _isOwnerIdNgCheckProcessed = true;
                }

                if (ngResult != null)
                {
                    IsVisible = false;
                    var ngDesc = !string.IsNullOrWhiteSpace(ngResult.NGDescription) ? ngResult.NGDescription : ngResult.Content;
                    InvisibleDescription = $"NG動画";
                }
            }

            SetTitle(info.Title);
            SetThumbnailImage(info.ThumbnailUrl);
            SetSubmitDate(info.PostedAt);
            SetVideoDuration(info.Length);
            if (!info.IsDeleted)
            {
                SetDescription(info.ViewCount, info.CommentCount, info.MylistCount);
            }
            else
            {
                if (info.PrivateReasonType != PrivateReasonType.None)
                {
                    Description = info.PrivateReasonType.ToCulturelizeString();
                }
                else
                {
                    Description = "視聴不可(配信終了など)";
                }
            }

            if (info.Owner != null)
            {
                ProviderId   = info.Owner.OwnerId;
                ProviderName = info.Owner.ScreenName;
                ProviderType = info.Owner.UserType;
            }
        }
Exemple #13
0
        public async Task OnNavigatedToAsync(INavigationParameters parameters)
        {
            string userId = null;

            if (parameters.TryGetValue <string>("id", out var id))
            {
                userId = id;
            }

            if (userId == UserId)
            {
                return;
            }

            UserId = userId;


            // ログインユーザーと同じ場合、お気に入り表示をOFFに
            IsLoginUser = NiconicoSession.UserId.ToString() == userId;

            IsLoadFailed = false;

            VideoInfoItems.Clear();

            try
            {
                var userInfo = await UserProvider.GetUserDetail(UserId);

                var user = userInfo;
                UserName    = user.Nickname;
                UserIconUri = user.ThumbnailUri;

                FollowerCount  = user.FollowerCount;
                StampCount     = user.StampCount;
                VideoCount     = user.TotalVideoCount;
                IsVideoPrivate = user.IsOwnerVideoPrivate;
            }
            catch
            {
                IsLoadFailed = true;
            }


            if (UserId == null)
            {
                return;
            }


            // NGユーザーの設定

            if (!IsLoginUser)
            {
                var ngResult = NgSettings.IsNgVideoOwnerId(UserId);
                IsNGVideoOwner.Value = ngResult != null;
            }
            else
            {
                IsNGVideoOwner.Value = false;
            }

            try
            {
                await Task.Delay(500);

                var userVideos = await UserProvider.GetUserVideos(uint.Parse(UserId), 1);

                foreach (var item in userVideos.Items.Take(5))
                {
                    var vm = new VideoInfoControlViewModel(item.VideoId);
                    vm.SetTitle(item.Title);
                    vm.SetThumbnailImage(item.ThumbnailUrl.OriginalString);
                    VideoInfoItems.Add(vm);
                }
                RaisePropertyChanged(nameof(VideoInfoItems));
            }
            catch (Exception ex)
            {
                IsLoadFailed = true;
                Debug.WriteLine(ex.Message);
            }

            HasOwnerVideo = VideoInfoItems.Count != 0;


            if (NiconicoSession.IsLoginUserId(UserId))
            {
                MylistGroups = UserMylistManager.Mylists;
            }
            else
            {
                try
                {
                    //					await Task.Delay(500);
                    MylistGroups = await _mylistRepository.GetUserMylistsAsync(UserId);
                }
                catch (Exception ex)
                {
                    IsLoadFailed = true;
                    Debug.WriteLine(ex.Message);
                }
            }
            RaisePropertyChanged(nameof(MylistGroups));


            UserBookmark = Database.BookmarkDb.Get(Database.BookmarkType.User, UserId)
                           ?? new Database.Bookmark()
            {
                Content      = UserId,
                Label        = UserName,
                BookmarkType = Database.BookmarkType.User
            };

            RaisePropertyChanged(nameof(UserBookmark));


            FollowToggleButtonService.SetFollowTarget(this);
        }