public async void InitializeRelatedVideos() { using (var releaser = await _UpdateLock.LockAsync()) { if (_IsInitializedRelatedVideos) { return; } var items = await NiconicoSession.Context.Video.GetRelatedVideoAsync(VideoId, 0, 10, Sort.Relation); RelatedVideos = items.Video_info?.Select(x => { var video = Database.NicoVideoDb.Get(x.Video.Id); video.Title = x.Video.Title; video.ThumbnailUrl = x.Video.Thumbnail_url; var vm = new VideoInfoControlViewModel(video); return(vm); }) .ToList(); RaisePropertyChanged(nameof(RelatedVideos)); _IsInitializedRelatedVideos = true; } }
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 SearchSummaryPageViewModel( SearchProvider searchProvider, Services.PageManager pageManager ) : base(pageManager) { RelatedVideoTags = new ObservableCollection <string>(); KeywordSearchResultItems = this.ObserveProperty(x => x.Keyword) .Where(x => !string.IsNullOrWhiteSpace(x)) .SelectMany(async(x, i, cancelToken) => { RelatedVideoTags.Clear(); var res = await SearchProvider.GetKeywordSearch(x, 0, 10); if (res.IsOK) { KeywordSearchItemsTotalCount = (int)res.GetTotalCount(); if (res.Tags != null) { foreach (var tag in res.Tags.TagItems) { RelatedVideoTags.Add(tag.Name); } } return(res.VideoInfoItems?.AsEnumerable() ?? Enumerable.Empty <Mntone.Nico2.Searches.Video.VideoInfo>()); } else { return(Enumerable.Empty <Mntone.Nico2.Searches.Video.VideoInfo>()); } }) .SelectMany(x => x) .Select(x => { var vm = new VideoInfoControlViewModel(x.Video.Id); vm.SetTitle(x.Video.Title); vm.SetThumbnailImage(x.Video.ThumbnailUrl.OriginalString); return(vm); }) .ToReadOnlyReactiveCollection(onReset: this.ObserveProperty(x => x.Keyword).ToUnit()) .AddTo(_CompositeDisposable); HasKeywordSearchResultItems = KeywordSearchResultItems .ObserveProperty(x => x.Count) .Select(x => x > 0) .ToReadOnlyReactiveProperty() .AddTo(_CompositeDisposable); RelatedLiveTags = new ObservableCollection <string>(); LiveSearchResultItems = this.ObserveProperty(x => x.Keyword) .Where(x => !string.IsNullOrWhiteSpace(x)) .SelectMany(async(x, i, cancelToken) => { RelatedLiveTags.Clear(); var res = await SearchProvider.LiveSearchAsync(x, false, length: 10); if (res.IsStatusOK) { if (res.Tags != null) { foreach (var tag in res.Tags.Tag) { RelatedLiveTags.Add(tag.Name); } } LiveSearchItemsTotalCount = res.TotalCount.FilteredCount; return(res.VideoInfo?.AsEnumerable() ?? Enumerable.Empty <Mntone.Nico2.Searches.Live.VideoInfo>()); } else { return(Enumerable.Empty <Mntone.Nico2.Searches.Live.VideoInfo>()); } }) .SelectMany(x => x) .Select(x => { var liveInfoVM = new LiveInfoListItemViewModel(x.Video.Id); liveInfoVM.Setup(x); return(liveInfoVM); }) .ToReadOnlyReactiveCollection(onReset: this.ObserveProperty(x => x.Keyword).ToUnit()); HasLiveSearchResultItems = LiveSearchResultItems .ObserveProperty(x => x.Count) .Select(x => x > 0) .ToReadOnlyReactiveProperty() .AddTo(_CompositeDisposable); SearchProvider = searchProvider; }
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 = HohoemaApp.LoginUserId.ToString(); } if (userId == UserId) { return; } UserId = userId; // ログインユーザーと同じ場合、お気に入り表示をOFFに IsLoginUser = HohoemaApp.LoginUserId.ToString() == userId; IsLoadFailed = false; MylistGroups.Clear(); VideoInfoItems.Clear(); try { var userInfo = await HohoemaApp.ContentProvider.GetUserDetail(UserId); var user = userInfo; UserName = user.Nickname; UserIconUri = user.ThumbnailUri; Description = user.Description; 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 = HohoemaApp.UserSettings.NGSettings.IsNgVideoOwnerId(UserId); IsNGVideoOwner.Value = ngResult != null; } else { IsNGVideoOwner.Value = false; } // お気に入り状態の取得 _NowProcessFavorite = true; if (HohoemaApp.IsLoggedIn) { var favManager = HohoemaApp.FollowManager; IsFavorite.Value = favManager.IsFollowItem(FollowItemType.User, UserId); CanChangeFavoriteState.Value = IsFavorite.Value == true || favManager.CanMoreAddFollow(FollowItemType.User); } _NowProcessFavorite = false; try { await Task.Delay(500); var userVideos = await HohoemaApp.ContentProvider.GetUserVideos(uint.Parse(UserId), 1); foreach (var item in userVideos.Items.Take(5)) { var vm = new VideoInfoControlViewModel(item.VideoId, isNgEnabled: false); 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 (HohoemaApp.LoginUserId.ToString() == UserId) { foreach (var item in HohoemaApp.UserMylistManager.UserMylists) { MylistGroups.Add(new MylistGroupListItem(item, PageManager)); } } else { try { // await Task.Delay(500); var mylistGroups = await HohoemaApp.ContentProvider.GetUserMylistGroups(UserId); foreach (var item in mylistGroups) { MylistGroups.Add(new MylistGroupListItem(item, PageManager)); } } 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)); NowLoading = false; }
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); }