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); } }
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; }
protected override bool CanExecute(object parameter) { if (parameter is Interfaces.IVideoContent video) { if (video.ProviderId != null) { return(NgSettings.IsNgVideoOwnerId(video.ProviderId) == null); } } return(false); }
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); }
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); }
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); }
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(); } }
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; } }
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); }