TraktPlugin.GUI.GUINetwork.OnShowContextMenu C# (CSharp) Méthode

OnShowContextMenu() protected méthode

protected OnShowContextMenu ( ) : void
Résultat void
        protected override void OnShowContextMenu()
        {
            var selectedItem = this.Facade.SelectedListItem as GUIUserListItem;
            if (selectedItem == null) return;

            var dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
            if (dlg == null) return;

            dlg.Reset();
            dlg.SetHeading(Translation.Network);

            GUIListItem listItem = null;
            int itemCount = 0;

            // search for new people to follow
            if (CurrentViewLevel == ViewLevel.Network)
            {
                listItem = new GUIListItem(Translation.SearchForUser);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.SearchUser;
                itemCount++;
            }

            // follow user in followers list (i.e. become friend)
            if (CurrentViewLevel == ViewLevel.Network && selectedItem.IsFollower)
            {
                listItem = new GUIListItem(Translation.Follow);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.FollowUser;
                itemCount++;
            }

            // approve follow request
            if (CurrentViewLevel == ViewLevel.Network && selectedItem.IsFollowerRequest)
            {
                listItem = new GUIListItem(Translation.Approve);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Approve;
                itemCount++;
            }

            // approve and followback request
            if (CurrentViewLevel == ViewLevel.Network && selectedItem.IsFollowerRequest)
            {
                listItem = new GUIListItem(Translation.ApproveAndFollowBack);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.ApproveAndFollow;
                itemCount++;
            }

            // deny follow request
            if (CurrentViewLevel == ViewLevel.Network && selectedItem.IsFollowerRequest)
            {
                listItem = new GUIListItem(Translation.Deny);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Deny;
                itemCount++;
            }

            // unfollow user
            if (CurrentViewLevel == ViewLevel.Network && (selectedItem.IsFriend || selectedItem.IsFollowed))
            {
                listItem = new GUIListItem(Translation.UnFollow);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.UnFollowUser;
                itemCount++;
            }

            // change view
            if (CurrentViewLevel == ViewLevel.Network)
            {
                listItem = new GUIListItem(Translation.ChangeView);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.ChangeView;
                itemCount++;
            }

            // don't display menu if no context menu items to display
            if (itemCount == 0) return;

            // Show Context Menu
            dlg.DoModal(GUIWindowManager.ActiveWindow);
            if (dlg.SelectedId < 0) return;

            switch (dlg.SelectedId)
            {
                case ((int)ContextMenuItem.FollowUser):
                    if (GUIUtils.ShowYesNoDialog(Translation.Network, string.Format(Translation.SendFollowRequest, selectedItem.Label), true))
                    {
                        FollowUser(CurrentSelectedUser);
                        selectedItem.IsFollowed = true;
                        _TraktFollowing = null;
                        _TraktFriends = null;
                        LoadView();
                    }
                    break;

                case ((int)ContextMenuItem.SearchUser):
                    SearchForUser();
                    break;

                case ((int)ContextMenuItem.UnFollowUser):
                    if (GUIUtils.ShowYesNoDialog(Translation.UnFollow, string.Format(Translation.UnFollowMessage, selectedItem.Label)))
                    {
                        // Unfollow user
                        var follower = selectedItem.TVTag as TraktNetworkUser;
                        UnfollowUser(follower.User);

                        // Clear Cache - remove user from relavent lists
                        if (CurrentView == View.Following)
                            _TraktFollowing = _TraktFollowing.Except(_TraktFollowing.Where(f => f.User.Username == selectedItem.Label));
                        else if (CurrentView == View.Friends)
                            _TraktFriends = _TraktFriends.Except(_TraktFriends.Where(f => f.User.Username == selectedItem.Label));

                        // Re-Load list
                        LoadView();
                    }
                    break;

                case ((int)ContextMenuItem.Approve):
                    // pending follower request, get approval from user
                    if (GUIUtils.ShowYesNoDialog(Translation.FollowerRequest, string.Format(Translation.ApproveFollowerMessage, selectedItem.Label), true))
                    {
                        // follower approved, send to trakt
                        int id = (selectedItem.TVTag as TraktFollowerRequest).Id;
                        ApproveFollowerRequest(id);

                        // remove follower from requests, we have approved already
                        TraktCache.FollowerRequests = TraktCache.FollowerRequests.Except(TraktCache.FollowerRequests.Where(f => f.Id == id));

                        // clear followers cache
                        _TraktFollowers = null;

                        // Re-Load list
                        LoadView();
                    }
                    break;

                case ((int)ContextMenuItem.ApproveAndFollow):
                    // pending follower request, get approval from user
                    if (GUIUtils.ShowYesNoDialog(Translation.FollowerRequest, string.Format(Translation.ApproveFollowerAndFollowBackMessage, selectedItem.Label), true))
                    {
                        // follower approved, send to trakt with follow back
                        ApproveFollowerRequest((selectedItem.TVTag as TraktFollowerRequest).Id, true);

                        // remove follower from requests, we have approved already
                        TraktCache.FollowerRequests = TraktCache.FollowerRequests.Except(TraktCache.FollowerRequests.Where(f => f.User.Username == selectedItem.Label));

                        // clear respective caches
                        _TraktFollowers = null;
                        _TraktFollowing = null;
                        _TraktFriends = null;

                        // Re-Load list
                        LoadView();
                    }
                    break;

                case ((int)ContextMenuItem.Deny):
                    if (GUIUtils.ShowYesNoDialog(Translation.FollowerRequest, string.Format(Translation.DenyFollowRequest, selectedItem.Label), true))
                    {
                        // follower denied, remove user from pending requests
                        DenyFollowerRequest((selectedItem.TVTag as TraktFollowerRequest).Id);

                        TraktCache.FollowerRequests = TraktCache.FollowerRequests.Except(TraktCache.FollowerRequests.Where(f => f.User.Username == selectedItem.Label));

                        // Re-Load list
                        LoadView();
                    }
                    break;

                case ((int)ContextMenuItem.ChangeView):
                    ShowViewMenu();
                    break;

                default:
                    break;
            }

            base.OnShowContextMenu();
        }