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();
}