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

OnShowContextMenu() protected méthode

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

            var selectedListItem = selectedItem.TVTag as TraktListItem;
            if (selectedListItem == 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;

            if (SelectedType == TraktItemType.movie || SelectedType == TraktItemType.episode)
            {
                // Mark As Watched
                if (!selectedListItem.IsWatched())
                {
                    listItem = new GUIListItem(Translation.MarkAsWatched);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.MarkAsWatched;
                }

                // Mark As UnWatched
                if (selectedListItem.IsWatched())
                {
                    listItem = new GUIListItem(Translation.MarkAsUnWatched);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.MarkAsUnWatched;
                }
            }

            if (SelectedType != TraktItemType.season && SelectedType != TraktItemType.person)
            {
                // Add/Remove Watchlist
                if (!selectedListItem.IsWatchlisted())
                {
                    listItem = new GUIListItem(Translation.AddToWatchList);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.AddToWatchList;
                }
                else
                {
                    listItem = new GUIListItem(Translation.RemoveFromWatchList);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.RemoveFromWatchList;
                }
            }

            // Add to Custom list
            listItem = new GUIListItem(Translation.AddToList);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.AddToList;

            // Remove from Custom list (only if current user is the active user)
            if (TraktSettings.Username == CurrentUser)
            {
                listItem = new GUIListItem(Translation.RemoveFromList);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.RemoveFromList;
            }

            if (SelectedType == TraktItemType.movie || SelectedType == TraktItemType.episode)
            {
                // Add to Collection
                // Don't allow if it will be removed again on next sync
                // movie could be part of a DVD collection
                if (!selectedListItem.IsCollected() && !TraktSettings.KeepTraktLibraryClean)
                {
                    listItem = new GUIListItem(Translation.AddToLibrary);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.AddToLibrary;
                }

                if (selectedListItem.IsCollected())
                {
                    listItem = new GUIListItem(Translation.RemoveFromLibrary);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.RemoveFromLibrary;
                }
            }

            // Related Movies/Shows
            if (SelectedType != TraktItemType.person)
            {
                listItem = new GUIListItem(SelectedType == TraktItemType.movie ? Translation.RelatedMovies : Translation.RelatedShows);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Related;
            }

            if (SelectedType != TraktItemType.season && SelectedType != TraktItemType.person)
            {
                // Rate
                listItem = new GUIListItem(Translation.Rate + "...");
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Rate;

                // Shouts
                listItem = new GUIListItem(Translation.Comments);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Shouts;
            }

            // Cast and Crew
            if (SelectedType == TraktItemType.movie || SelectedType == TraktItemType.show)
            {
                listItem = new GUIListItem(Translation.Cast);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Cast;

                listItem = new GUIListItem(Translation.Crew);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Crew;
            }

            // Trailers
            if (SelectedType != TraktItemType.person)
            {
                if (TraktHelper.IsTrailersAvailableAndEnabled)
                {
                    listItem = new GUIListItem(Translation.Trailers);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.Trailers;
                }
            }

            // Search with mpNZB
            if (TraktHelper.IsMpNZBAvailableAndEnabled)
            {
                if ((selectedListItem.Movie != null && !selectedListItem.Movie.IsCollected()) || selectedListItem.Episode != null)
                {
                    listItem = new GUIListItem(Translation.SearchWithMpNZB);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.SearchWithMpNZB;
                }
            }

            // Search with MyTorrents
            if (TraktHelper.IsMyTorrentsAvailableAndEnabled)
            {
                if ((selectedListItem.Movie != null && !selectedListItem.Movie.IsCollected()) || selectedListItem.Episode != null)
                {
                    listItem = new GUIListItem(Translation.SearchTorrent);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.SearchTorrent;
                }
            }

            // Change Layout
            listItem = new GUIListItem(Translation.ChangeLayout);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.ChangeLayout;

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

            switch (dlg.SelectedId)
            {
                case ((int)ContextMenuItem.MarkAsWatched):
                    AddItemToWatchedHistory(selectedListItem);
                    selectedItem.IsPlayed = true;
                    OnItemSelected(selectedItem, Facade);
                    if (SelectedType == TraktItemType.movie)
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                    else
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                    break;

                case ((int)ContextMenuItem.MarkAsUnWatched):
                    RemoveItemFromWatchedHistory(selectedListItem);
                    selectedItem.IsPlayed = false;
                    OnItemSelected(selectedItem, Facade);
                    if (SelectedType == TraktItemType.movie)
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                    else
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                    break;

                case ((int)ContextMenuItem.AddToWatchList):
                    AddItemToWatchList(selectedListItem);
                    OnItemSelected(selectedItem, Facade);
                    if (SelectedType == TraktItemType.movie)
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                    else
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");

                    GUIWatchListMovies.ClearCache(TraktSettings.Username);
                    break;

                case ((int)ContextMenuItem.RemoveFromWatchList):
                    RemoveItemFromWatchList(selectedListItem);
                    OnItemSelected(selectedItem, Facade);
                    if (SelectedType == TraktItemType.movie)
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                    else
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");

                    GUIWatchListMovies.ClearCache(TraktSettings.Username);
                    break;

                case ((int)ContextMenuItem.AddToList):
                    if (SelectedType == TraktItemType.movie)
                        TraktHelper.AddRemoveMovieInUserList(selectedListItem.Movie, false);
                    else if (SelectedType == TraktItemType.show)
                        TraktHelper.AddRemoveShowInUserList(selectedListItem.Show, false);
                    else if (SelectedType == TraktItemType.season)
                        TraktHelper.AddRemoveSeasonInUserList(selectedListItem.Season, false);
                    else if (SelectedType == TraktItemType.episode)
                        TraktHelper.AddRemoveEpisodeInUserList(selectedListItem.Episode, false);
                    else if (SelectedType == TraktItemType.person)
                        TraktHelper.AddRemovePersonInUserList(selectedListItem.Person, false);
                    break;

                case ((int)ContextMenuItem.RemoveFromList):
                    if (!GUIUtils.ShowYesNoDialog(Translation.DeleteListItem, Translation.ConfirmDeleteListItem)) break;

                    // Only do remove from current list
                    // We could do same as Add (ie remove from multiple lists) but typically you only remove from the current list
                    TraktHelper.AddRemoveItemInList((int)CurrentList.Ids.Trakt, GetSyncItems(selectedListItem), true);

                    // clear the list item cache
                    TraktLists.ClearListItemCache(CurrentUser, CurrentList.Ids.Trakt.ToString());

                    // remove item from collection
                    CurrentListItems.RemoveAll(l => ListItemMatch(l, selectedListItem));

                    // clear the cache
                    TraktLists.ClearListItemCache(TraktSettings.Username, CurrentList.Ids.Trakt.ToString());

                    // Remove from view
                    if (Facade.Count > 1)
                    {
                        PreviousSelectedIndex = Facade.SelectedListItemIndex;
                        SendListItemsToFacade(CurrentListItems);
                    }
                    else
                    {
                        // no more items left
                        GUIControl.ClearControl(GetID, Facade.GetID);
                        ClearProperties();
                        GUIWindowManager.Process();

                        // nothing left, exit
                        GUIWindowManager.ShowPreviousWindow();
                        return;
                    }
                    break;

                case ((int)ContextMenuItem.AddToLibrary):
                    AddItemToCollection(selectedListItem);
                    OnItemSelected(selectedItem, Facade);
                    if (SelectedType == TraktItemType.movie)
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                    else
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                    break;

                case ((int)ContextMenuItem.RemoveFromLibrary):
                    RemoveItemFromCollection(selectedListItem);
                    OnItemSelected(selectedItem, Facade);
                    if (SelectedType == TraktItemType.movie)
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                    else
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                    break;

                case ((int)ContextMenuItem.Related):
                    if (SelectedType == TraktItemType.movie)
                    {
                        TraktHelper.ShowRelatedMovies(selectedListItem.Movie);
                    }
                    else
                    {
                        //series, season & episode
                        TraktHelper.ShowRelatedShows(selectedListItem.Show);
                    }
                    break;

                case ((int)ContextMenuItem.Rate):
                    RateItem(selectedListItem);
                    OnItemSelected(selectedItem, Facade);
                    if (SelectedType == TraktItemType.movie)
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                    else
                        (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                    break;

                case ((int)ContextMenuItem.Shouts):
                    if (SelectedType == TraktItemType.movie)
                        TraktHelper.ShowMovieShouts(selectedListItem.Movie);
                    else if (SelectedType == TraktItemType.show)
                        TraktHelper.ShowTVShowShouts(selectedListItem.Show);
                    else
                        TraktHelper.ShowEpisodeShouts(selectedListItem.Show, selectedListItem.Episode);
                    break;

                case ((int)ContextMenuItem.Cast):
                    if (SelectedType == TraktItemType.movie)
                    {
                        GUICreditsMovie.Movie = selectedListItem.Movie;
                        GUICreditsMovie.Type = GUICreditsMovie.CreditType.Cast;
                        GUICreditsMovie.Fanart = TmdbCache.GetMovieBackdropFilename((selectedItem as GUIMovieListItem).Images.MovieImages);
                        GUIWindowManager.ActivateWindow((int)TraktGUIWindows.CreditsMovie);
                    }
                    else if (SelectedType == TraktItemType.show)
                    {
                        GUICreditsShow.Show = selectedListItem.Show;
                        GUICreditsShow.Type = GUICreditsShow.CreditType.Cast;
                        GUICreditsShow.Fanart = TmdbCache.GetShowBackdropFilename((selectedItem as GUIShowListItem).Images.ShowImages);
                        GUIWindowManager.ActivateWindow((int)TraktGUIWindows.CreditsShow);
                    }
                    break;

                case ((int)ContextMenuItem.Crew):
                    if (SelectedType == TraktItemType.movie)
                    {
                        GUICreditsMovie.Movie = selectedListItem.Movie;
                        GUICreditsMovie.Type = GUICreditsMovie.CreditType.Crew;
                        GUICreditsMovie.Fanart = TmdbCache.GetMovieBackdropFilename((selectedItem as GUIMovieListItem).Images.MovieImages);
                        GUIWindowManager.ActivateWindow((int)TraktGUIWindows.CreditsMovie);
                    }
                    else if (SelectedType == TraktItemType.show)
                    {
                        GUICreditsShow.Show = selectedListItem.Show;
                        GUICreditsShow.Type = GUICreditsShow.CreditType.Crew;
                        GUICreditsShow.Fanart = TmdbCache.GetShowBackdropFilename((selectedItem as GUIShowListItem).Images.ShowImages);
                        GUIWindowManager.ActivateWindow((int)TraktGUIWindows.CreditsShow);
                    }
                    break;

                case ((int)ContextMenuItem.Trailers):
                    if (SelectedType == TraktItemType.movie)
                    {
                        GUICommon.ShowMovieTrailersMenu(selectedListItem.Movie);
                    }
                    else if (SelectedType == TraktItemType.episode)
                    {
                        GUICommon.ShowTVShowTrailersMenu(selectedListItem.Show, selectedListItem.Episode);
                    }
                    else if (SelectedType == TraktItemType.season && TraktHelper.IsTrailersAvailableAndEnabled)
                    {
                        GUICommon.ShowTVSeasonTrailersPluginMenu(selectedListItem.Show, selectedListItem.Season.Number);
                    }
                    break;

                case ((int)ContextMenuItem.SearchWithMpNZB):
                    string loadingParam = String.Empty;
                    if (selectedListItem.Movie != null)
                    {
                        loadingParam = string.Format("search:{0}", selectedListItem.Movie.Title);
                    }
                    else if (selectedListItem.Episode != null)
                    {
                        loadingParam = string.Format("search:{0} S{1}E{2}", selectedListItem.Show.Title, selectedListItem.Episode.Season.ToString("D2"), selectedListItem.Episode.Number.ToString("D2"));
                    }
                    GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MpNZB, loadingParam);
                    break;

                case ((int)ContextMenuItem.SearchTorrent):
                    string loadPar = String.Empty;
                    if (selectedListItem.Movie != null)
                    {
                        loadPar = selectedListItem.Movie.Title;
                    }
                    else if (selectedListItem.Episode != null)
                    {
                        loadPar = string.Format("{0} S{1}E{2}", selectedListItem.Show.Title, selectedListItem.Episode.Season.ToString("D2"), selectedListItem.Episode.Number.ToString("D2"));
                    }
                    GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MyTorrents, loadPar);
                    break;

                case ((int)ContextMenuItem.ChangeLayout):
                    CurrentLayout = GUICommon.ShowLayoutMenu(CurrentLayout, PreviousSelectedIndex);
                    break;

                default:
                    break;
            }

            base.OnShowContextMenu();
        }