private async Task Reset() { if (Mylist.Value == null) { return; } CanEditMylist = false; var mylistOrigin = Mylist.Value?.ToMylistOrigin(); IsLoginUserDeflist = false; IsWatchAfterLocalMylist = Mylist.Value is Interfaces.ILocalMylist && Mylist.Value?.Id == HohoemaPlaylist.WatchAfterPlaylistId; IsUserOwnerdMylist = Mylist.Value is Interfaces.IUserOwnedMylist; IsLocalMylist = Mylist.Value is Interfaces.ILocalMylist; IsLoginUserMylistWithoutDeflist = false; MaxItemsCount = Mylist.Value.ItemCount; RaisePropertyChanged(nameof(MaxItemsCount)); switch (mylistOrigin) { case PlaylistOrigin.LoginUser: { var mylistGroup = UserMylistManager.GetMylistGroup(Mylist.Value.Id); MylistItems = mylistGroup.ToReadOnlyReactiveCollection(x => new MylistVideItemViewModel(x, mylistGroup)) .AddTo(_NavigatingCompositeDisposable); MylistTitle = mylistGroup.Label; MylistDescription = mylistGroup.Description; ThemeColor = mylistGroup.IconType.ToColor(); IsPublic = mylistGroup.IsPublic; IsLoginUserDeflist = mylistGroup.IsDeflist; OwnerUserId = mylistGroup.UserId; UserName = NiconicoSession.UserName; CanEditMylist = !IsLoginUserDeflist; if (IsLoginUserDeflist) { MylistState = "とりあえずマイリスト"; DeflistRegistrationCapacity = UserMylistManager.DeflistRegistrationCapacity; DeflistRegistrationCount = UserMylistManager.DeflistRegistrationCount; } else { IsLoginUserMylistWithoutDeflist = true; MylistState = IsPublic ? "公開マイリスト" : "非公開マイリスト"; MylistRegistrationCapacity = UserMylistManager.MylistRegistrationCapacity; MylistRegistrationCount = UserMylistManager.MylistRegistrationCount; } } break; case PlaylistOrigin.OtherUser: var otherOwnedMylist = Mylist.Value as OtherOwneredMylist; MylistItems = new IncrementalLoadingCollection <OtherOwnedMylistIncrementalSource, MylistVideItemViewModel>(new OtherOwnedMylistIncrementalSource(otherOwnedMylist, MylistProvider, NgSettings)); var response = await MylistProvider.GetMylistGroupDetail(Mylist.Value.Id); var mylistGroupDetail = response.MylistGroup; MylistTitle = otherOwnedMylist.Label; MylistDescription = otherOwnedMylist.Description; IsPublic = true; //ThemeColor = mylistGroupDetail.GetIconType().ToColor(); OwnerUserId = mylistGroupDetail.UserId; MylistState = IsPublic ? "公開マイリスト" : "非公開マイリスト"; var user = Database.NicoVideoOwnerDb.Get(OwnerUserId); if (user != null) { UserName = user.ScreenName; } else { var userDetail = await UserProvider.GetUser(OwnerUserId); UserName = userDetail.ScreenName; } CanEditMylist = false; break; case PlaylistOrigin.Local: { var localMylist = Mylist.Value as LocalMylistGroup; MylistItems = localMylist.ToReadOnlyReactiveCollection(x => new MylistVideItemViewModel(x, localMylist)) .AddTo(_NavigatingCompositeDisposable); MylistTitle = Mylist.Value.Label; OwnerUserId = NiconicoSession.UserId.ToString(); UserName = NiconicoSession.UserName; MylistState = "ローカル"; CanEditMylist = !IsWatchAfterLocalMylist; } break; default: break; } RaisePropertyChanged(nameof(MylistItems)); EditMylistGroupCommand.RaiseCanExecuteChanged(); DeleteMylistCommand.RaiseCanExecuteChanged(); }
/* * * private async Task<bool> FavoriteMylist() * { * if (PlayableList.Value == null) { return false; } * if (PlayableList.Value.Origin != PlaylistOrigin.OtherUser) { return false; } * * var favManager = HohoemaApp.FollowManager; * var result = await favManager.AddFollow(FollowItemType.Mylist, PlayableList.Value.Id, PlayableList.Value.Label); * * return result == ContentManageResult.Success || result == ContentManageResult.Exist; * } * * private async Task<bool> UnfavoriteMylist() * { * if (PlayableList.Value == null) { return false; } * if (PlayableList.Value.Origin != PlaylistOrigin.OtherUser) { return false; } * * var favManager = HohoemaApp.FollowManager; * var result = await favManager.RemoveFollow(FollowItemType.Mylist, PlayableList.Value.Id); * * return result == ContentManageResult.Success; * * } * */ public async Task OnNavigatedToAsync(INavigationParameters parameters) { string mylistId = null; if (parameters.TryGetValue <string>("id", out var idString)) { mylistId = idString; } else if (parameters.TryGetValue <int>("id", out var idInt)) { mylistId = idInt.ToString(); } var mylist = await _playlistAggregate.FindPlaylistAsync(mylistId) as MylistPlaylist; if (mylist == null) { return; } Mylist.Value = mylist; IsUserOwnerdMylist = _mylistRepository.IsLoginUserMylistId(mylist.Id); IsLoginUserDeflist = mylist.IsDefaultMylist(); IsWatchAfterLocalMylist = false; IsLocalMylist = false; if (mylist is LoginUserMylistPlaylist loginMylist) { Observable.FromEventPattern <MylistItemAddedEventArgs>( h => loginMylist.MylistItemAdded += h, h => loginMylist.MylistItemAdded -= h ) .Subscribe(e => { var args = e.EventArgs; if (args.MylistId == Mylist.Value.Id) { RefreshCommand.Execute(); } }) .AddTo(_NavigatingCompositeDisposable); Observable.FromEventPattern <MylistItemRemovedEventArgs>( h => loginMylist.MylistItemRemoved += h, h => loginMylist.MylistItemRemoved -= h ) .Subscribe(e => { var args = e.EventArgs; if (args.MylistId == Mylist.Value.Id) { foreach (var removed in args.SuccessedItems) { var removedItem = MylistItems.FirstOrDefault(x => x.Id == removed); if (removedItem != null) { MylistItems.Remove(removedItem); } } } }) .AddTo(_NavigatingCompositeDisposable); } MylistItems = await CreateItemsSourceAsync(mylist); MaxItemsCount = Mylist.Value.Count; if (Mylist.Value != null) { MylistBookmark = Database.BookmarkDb.Get(Database.BookmarkType.Mylist, Mylist.Value.Id) ?? new Database.Bookmark() { Label = Mylist.Value.Label, Content = Mylist.Value.Id, BookmarkType = Database.BookmarkType.Mylist, }; FollowToggleButtonService.SetFollowTarget(Mylist.Value as Interfaces.IFollowable); RaisePropertyChanged(nameof(MylistBookmark)); } EditMylistGroupCommand.RaiseCanExecuteChanged(); DeleteMylistCommand.RaiseCanExecuteChanged(); }