コード例 #1
0
        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();
        }
コード例 #2
0
        /*
         *
         * 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();
        }