protected override void OnShowContextMenu()
{
var selectedItem = this.Facade.SelectedListItem;
if (selectedItem == null)
{
return;
}
var selectedMovie = selectedItem.TVTag as TraktWatchListMovie;
if (selectedMovie == null)
{
return;
}
var dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
if (dlg == null)
{
return;
}
dlg.Reset();
dlg.SetHeading(GUIUtils.PluginName());
GUIListItem listItem = null;
// only allow removal if viewing your own watch list
if (CurrentUser == TraktSettings.Username)
{
listItem = new GUIListItem(Translation.RemoveFromWatchList);
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.RemoveFromWatchList;
}
else if (!selectedMovie.InWatchList)
{
// viewing someone else's watch list and not in yours
listItem = new GUIListItem(Translation.AddToWatchList);
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.AddToWatchList;
}
// Add to Custom List
listItem = new GUIListItem(Translation.AddToList + "...");
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.AddToList;
// Mark As Watched
if (!selectedMovie.Watched)
{
listItem = new GUIListItem(Translation.MarkAsWatched);
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.MarkAsWatched;
}
// Mark As UnWatched
if (selectedMovie.Watched)
{
listItem = new GUIListItem(Translation.MarkAsUnWatched);
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.MarkAsUnWatched;
}
// Add to Library
// Don't allow if it will be removed again on next sync
// movie could be part of a DVD collection
if (!selectedMovie.InCollection && !TraktSettings.KeepTraktLibraryClean)
{
listItem = new GUIListItem(Translation.AddToLibrary);
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.AddToLibrary;
}
if (selectedMovie.InCollection)
{
listItem = new GUIListItem(Translation.RemoveFromLibrary);
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.RemoveFromLibrary;
}
// Related Movies
listItem = new GUIListItem(Translation.RelatedMovies + "...");
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.Related;
// Rate Movie
listItem = new GUIListItem(Translation.RateMovie);
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.Rate;
// Shouts
listItem = new GUIListItem(Translation.Shouts + "...");
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.Shouts;
if (TraktHelper.IsOnlineVideosAvailableAndEnabled)
{
// Trailers
listItem = new GUIListItem(Translation.Trailers);
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.Trailers;
}
// Change Layout
listItem = new GUIListItem(Translation.ChangeLayout);
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.ChangeLayout;
if (!selectedMovie.InCollection && TraktHelper.IsMpNZBAvailableAndEnabled)
{
// Search for movie with mpNZB
listItem = new GUIListItem(Translation.SearchWithMpNZB);
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.SearchWithMpNZB;
}
if (!selectedMovie.InCollection && TraktHelper.IsMyTorrentsAvailableAndEnabled)
{
// Search for movie with MyTorrents
listItem = new GUIListItem(Translation.SearchTorrent);
dlg.Add(listItem);
listItem.ItemId = (int)ContextMenuItem.SearchTorrent;
}
// Show Context Menu
dlg.DoModal(GUIWindowManager.ActiveWindow);
if (dlg.SelectedId < 0)
{
return;
}
switch (dlg.SelectedId)
{
case ((int)ContextMenuItem.MarkAsWatched):
TraktHelper.MarkMovieAsWatched(selectedMovie);
if (CurrentUser != TraktSettings.Username)
{
if (selectedMovie.Plays == 0)
{
selectedMovie.Plays = 1;
}
selectedMovie.Watched = true;
selectedItem.IsPlayed = true;
OnMovieSelected(selectedItem, Facade);
(Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
GUIWatchListMovies.ClearCache(TraktSettings.Username);
}
else
{
// when marking a movie as seen via API, it will remove from watch list
// we should do the same in GUI
PreviousSelectedIndex = this.Facade.SelectedListItemIndex;
if (_WatchListMovies.Count() >= 1)
{
// remove from list
var moviesToExcept = new List <TraktWatchListMovie>();
moviesToExcept.Add(selectedMovie);
_WatchListMovies = WatchListMovies.Except(moviesToExcept);
userWatchList[CurrentUser] = _WatchListMovies;
LoadWatchListMovies();
}
else
{
// no more movies left
ClearProperties();
GUIControl.ClearControl(GetID, Facade.GetID);
_WatchListMovies = null;
userWatchList.Remove(CurrentUser);
// notify and exit
GUIUtils.ShowNotifyDialog(GUIUtils.PluginName(), Translation.NoMovieWatchList);
GUIWindowManager.ShowPreviousWindow();
return;
}
}
break;
case ((int)ContextMenuItem.MarkAsUnWatched):
TraktHelper.MarkMovieAsUnWatched(selectedMovie);
selectedMovie.Watched = false;
selectedItem.IsPlayed = false;
OnMovieSelected(selectedItem, Facade);
(Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
break;
case ((int)ContextMenuItem.AddToWatchList):
TraktHelper.AddMovieToWatchList(selectedMovie, true);
selectedMovie.InWatchList = true;
OnMovieSelected(selectedItem, Facade);
(Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
break;
case ((int)ContextMenuItem.RemoveFromWatchList):
PreviousSelectedIndex = this.Facade.SelectedListItemIndex;
TraktHelper.RemoveMovieFromWatchList(selectedMovie, true);
if (_WatchListMovies.Count() >= 1)
{
// remove from list
var moviesToExcept = new List <TraktWatchListMovie>();
moviesToExcept.Add(selectedMovie);
_WatchListMovies = WatchListMovies.Except(moviesToExcept);
userWatchList[CurrentUser] = _WatchListMovies;
LoadWatchListMovies();
}
else
{
// no more movies left
ClearProperties();
GUIControl.ClearControl(GetID, Facade.GetID);
_WatchListMovies = null;
userWatchList.Remove(CurrentUser);
// notify and exit
GUIUtils.ShowNotifyDialog(GUIUtils.PluginName(), Translation.NoMovieWatchList);
GUIWindowManager.ShowPreviousWindow();
return;
}
break;
case ((int)ContextMenuItem.AddToList):
TraktHelper.AddRemoveMovieInUserList(selectedMovie.Title, selectedMovie.Year, selectedMovie.IMDBID, false);
break;
case ((int)ContextMenuItem.Trailers):
GUICommon.ShowMovieTrailersMenu(selectedMovie);
break;
case ((int)ContextMenuItem.AddToLibrary):
TraktHelper.AddMovieToLibrary(selectedMovie);
selectedMovie.InCollection = true;
OnMovieSelected(selectedItem, Facade);
(Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
if (CurrentUser != TraktSettings.Username)
{
GUIWatchListMovies.ClearCache(TraktSettings.Username);
}
break;
case ((int)ContextMenuItem.RemoveFromLibrary):
TraktHelper.RemoveMovieFromLibrary(selectedMovie);
selectedMovie.InCollection = false;
OnMovieSelected(selectedItem, Facade);
(Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
if (CurrentUser != TraktSettings.Username)
{
GUIWatchListMovies.ClearCache(TraktSettings.Username);
}
break;
case ((int)ContextMenuItem.Related):
TraktHelper.ShowRelatedMovies(selectedMovie);
break;
case ((int)ContextMenuItem.Rate):
GUICommon.RateMovie(selectedMovie);
OnMovieSelected(selectedItem, Facade);
(Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
if (CurrentUser != TraktSettings.Username)
{
GUIWatchListMovies.ClearCache(TraktSettings.Username);
}
break;
case ((int)ContextMenuItem.Shouts):
TraktHelper.ShowMovieShouts(selectedMovie);
break;
case ((int)ContextMenuItem.ChangeLayout):
CurrentLayout = GUICommon.ShowLayoutMenu(CurrentLayout, PreviousSelectedIndex);
break;
case ((int)ContextMenuItem.SearchWithMpNZB):
string loadingParam = string.Format("search:{0}", selectedMovie.Title);
GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MpNZB, loadingParam);
break;
case ((int)ContextMenuItem.SearchTorrent):
string loadPar = selectedMovie.Title;
GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MyTorrents, loadPar);
break;
default:
break;
}
base.OnShowContextMenu();
}