private TraktEpisodeSync CreateEpisodeSyncData(TraktUserListItem item)
        {
            if (item == null)
            {
                return(null);
            }

            TraktEpisodeSync.Episode syncEpisode = new TraktEpisodeSync.Episode
            {
                EpisodeIndex = item.EpisodeNumber.ToString(),
                SeasonIndex  = item.SeasonNumber.ToString()
            };

            TraktEpisodeSync syncData = new TraktEpisodeSync
            {
                UserName    = TraktSettings.Username,
                Password    = TraktSettings.Password,
                SeriesID    = item.Show.Tvdb,
                Title       = item.Show.Title,
                Year        = item.Year,
                EpisodeList = new List <TraktEpisodeSync.Episode> {
                    syncEpisode
                }
            };

            return(syncData);
        }
        private void CheckAndPlayEpisode(bool jumpTo)
        {
            GUIListItem selectedItem = this.Facade.SelectedListItem;

            if (selectedItem == null)
            {
                return;
            }

            TraktUserListItem userListItem = selectedItem.TVTag as TraktUserListItem;

            if (userListItem == null)
            {
                return;
            }

            int    seriesid   = Convert.ToInt32(userListItem.Show.Tvdb);
            string searchterm = string.IsNullOrEmpty(userListItem.Show.Imdb) ? userListItem.Show.Title : userListItem.Show.Imdb;

            // if its a show/season, play first unwatched
            if (SelectedType != TraktItemType.episode)
            {
                GUICommon.CheckAndPlayFirstUnwatched(seriesid, searchterm, jumpTo, userListItem.Title);
            }
            else
            {
                int seasonidx  = Convert.ToInt32(userListItem.SeasonNumber);
                int episodeidx = Convert.ToInt32(userListItem.EpisodeNumber);
                GUICommon.CheckAndPlayEpisode(seriesid, searchterm, seasonidx, episodeidx, userListItem.Title);
            }
        }
 private void PublishShowSkinProperties(TraktUserListItem item)
 {
     if (item == null || item.Show == null)
     {
         return;
     }
     GUICommon.SetShowProperties(item.Show);
 }
 private void PublishMovieSkinProperties(TraktUserListItem item)
 {
     if (item == null || item.Movie == null)
     {
         return;
     }
     GUICommon.SetMovieProperties(item.Movie);
 }
 private void PublishSeasonSkinProperties(TraktUserListItem item)
 {
     if (item == null)
     {
         return;
     }
     GUICommon.SetProperty("#Trakt.Season.Number", item.SeasonNumber);
     PublishShowSkinProperties(item);
 }
 private void RemoveItemFromLibrary(TraktUserListItem item)
 {
     if (SelectedType == TraktItemType.movie)
     {
         TraktHelper.RemoveMovieFromLibrary(item.Movie);
     }
     else
     {
         TraktHelper.RemoveEpisodeFromLibrary(item.Show, item.Episode);
     }
 }
 private void AddItemToLibrary(TraktUserListItem item)
 {
     if (SelectedType == TraktItemType.movie)
     {
         TraktHelper.AddMovieToLibrary(item.Movie);
     }
     else
     {
         TraktHelper.AddEpisodeToLibrary(item.Show, item.Episode);
     }
 }
 private void MarkItemAsUnWatched(TraktUserListItem item)
 {
     if (SelectedType == TraktItemType.movie)
     {
         TraktHelper.MarkMovieAsWatched(item.Movie);
     }
     else
     {
         TraktHelper.MarkEpisodeAsWatched(item.Show, item.Episode);
     }
 }
        private void PublishEpisodeSkinProperties(TraktUserListItem item)
        {
            if (item == null || item.Episode == null)
            {
                return;
            }
            GUICommon.SetEpisodeProperties(item.Episode);

            // workaround API not having episode number set
            // can be removed later when fixed
            GUICommon.SetProperty("#Trakt.Episode.Number", item.EpisodeNumber);

            PublishSeasonSkinProperties(item);
        }
 private void RateItem(TraktUserListItem item)
 {
     if (SelectedType == TraktItemType.movie)
     {
         GUICommon.RateMovie(item.Movie);
     }
     else if (SelectedType == TraktItemType.show)
     {
         GUICommon.RateShow(item.Show);
     }
     else if (SelectedType == TraktItemType.episode)
     {
         GUICommon.RateEpisode(item.Show, item.Episode);
     }
 }
 private void RemoveItemFromWatchList(TraktUserListItem item)
 {
     if (SelectedType == TraktItemType.movie)
     {
         TraktHelper.RemoveMovieFromWatchList(item.Movie, true);
     }
     else if (SelectedType == TraktItemType.show)
     {
         TraktHelper.RemoveShowFromWatchList(item.Show);
     }
     else
     {
         TraktHelper.RemoveEpisodeFromWatchList(item.Show, item.Episode);
     }
 }
 private void AddItemToWatchList(TraktUserListItem item)
 {
     if (SelectedType == TraktItemType.movie)
     {
         TraktHelper.AddMovieToWatchList(item.Movie, true);
     }
     else if (SelectedType == TraktItemType.show)
     {
         TraktHelper.AddShowToWatchList(item.Show);
     }
     else
     {
         TraktHelper.AddEpisodeToWatchList(item.Show, item.Episode);
     }
 }
        private void CheckAndPlayMovie(bool jumpTo)
        {
            GUIListItem selectedItem = this.Facade.SelectedListItem;

            if (selectedItem == null)
            {
                return;
            }

            TraktUserListItem userListItem = selectedItem.TVTag as TraktUserListItem;

            if (userListItem == null || userListItem.Movie == null)
            {
                return;
            }

            GUICommon.CheckAndPlayMovie(jumpTo, userListItem.Movie);
        }
        private TraktImage GetTraktImage(TraktUserListItem listItem)
        {
            TraktImage images = new TraktImage();

            switch (listItem.Type)
            {
            case "movie":
                images.MovieImages = listItem.Movie.Images;
                break;

            case "show":
            case "season":
            case "episode":
                images.ShowImages = listItem.Show.Images;
                break;
            }
            return(images);
        }
        private void OnItemSelected(GUIListItem item, GUIControl parent)
        {
            if (item == null)
            {
                return;
            }

            TraktUserListItem listItem = item.TVTag as TraktUserListItem;

            if (listItem == null)
            {
                return;
            }

            PreviousSelectedIndex = Facade.SelectedListItemIndex;

            switch (listItem.Type)
            {
            case "movie":
                SelectedType = TraktItemType.movie;
                PublishMovieSkinProperties(listItem);
                GUIImageHandler.LoadFanart(backdrop, listItem.Movie.Images.Fanart.LocalImageFilename(ArtworkType.MovieFanart));
                break;

            case "show":
                SelectedType = TraktItemType.show;
                PublishShowSkinProperties(listItem);
                GUIImageHandler.LoadFanart(backdrop, listItem.Show.Images.Fanart.LocalImageFilename(ArtworkType.ShowFanart));
                break;

            case "season":
                SelectedType = TraktItemType.season;
                PublishSeasonSkinProperties(listItem);
                GUIImageHandler.LoadFanart(backdrop, listItem.Show.Images.Fanart.LocalImageFilename(ArtworkType.ShowFanart));
                break;

            case "episode":
                SelectedType = TraktItemType.episode;
                PublishEpisodeSkinProperties(listItem);
                GUIImageHandler.LoadFanart(backdrop, listItem.Show.Images.Fanart.LocalImageFilename(ArtworkType.ShowFanart));
                break;
            }
            GUIUtils.SetProperty("#Trakt.List.ItemType", SelectedType.ToString());
        }
        private void MarkItemAsUnWatched(TraktUserListItem item)
        {
            Thread syncThread = new Thread(delegate(object obj)
            {
                if (SelectedType == TraktItemType.movie)
                {
                    TraktAPI.TraktAPI.SyncMovieLibrary(CreateMovieSyncData((obj as TraktUserListItem).Movie), TraktSyncModes.unseen);
                }
                else
                {
                    TraktAPI.TraktAPI.SyncEpisodeLibrary(CreateEpisodeSyncData(obj as TraktUserListItem), TraktSyncModes.unseen);
                }
            })
            {
                IsBackground = true,
                Name         = "MarkUnWatched"
            };

            syncThread.Start(item);
        }
        private void RemoveItemFromLibrary(TraktUserListItem item)
        {
            Thread syncThread = new Thread(delegate(object obj)
            {
                if (SelectedType == TraktItemType.movie)
                {
                    TraktAPI.TraktAPI.SyncMovieLibrary(CreateMovieSyncData((obj as TraktUserListItem).Movie), TraktSyncModes.unlibrary);
                }
                else
                {
                    TraktAPI.TraktAPI.SyncEpisodeLibrary(CreateEpisodeSyncData(obj as TraktUserListItem), TraktSyncModes.unlibrary);
                }
            })
            {
                IsBackground = true,
                Name         = "RemoveLibrary"
            };

            syncThread.Start(item);
        }
        private void AddItemToWatchList(TraktUserListItem item)
        {
            Thread syncThread = new Thread(delegate(object obj)
            {
                if (SelectedType == TraktItemType.movie)
                {
                    TraktAPI.TraktAPI.SyncMovieLibrary(CreateMovieSyncData((obj as TraktUserListItem).Movie), TraktSyncModes.watchlist);
                }
                else if (SelectedType == TraktItemType.show)
                {
                    TraktAPI.TraktAPI.SyncShowWatchList(CreateShowSyncData((obj as TraktUserListItem).Show), TraktSyncModes.watchlist);
                }
                else
                {
                    TraktAPI.TraktAPI.SyncEpisodeLibrary(CreateEpisodeSyncData(obj as TraktUserListItem), TraktSyncModes.watchlist);
                }
            })
            {
                IsBackground = true,
                Name         = "AddWatchList"
            };

            syncThread.Start(item);
        }
        private string GetListItemName(TraktUserListItem listItem)
        {
            string retValue = string.Empty;

            switch (listItem.Type)
            {
            case "movie":
                retValue = listItem.Movie.Title;
                break;

            case "show":
                retValue = listItem.Show.Title;
                break;

            case "season":
                retValue = string.Format("{0} {1} {2}", listItem.Show.Title, GUI.Translation.Season, listItem.SeasonNumber);
                break;

            case "episode":
                retValue = string.Format("{0} - {1}x{2}{3}", listItem.Show.Title, listItem.SeasonNumber, listItem.EpisodeNumber, string.IsNullOrEmpty(listItem.Episode.Title) ? string.Empty : " - " + listItem.Episode.Title);
                break;
            }
            return(retValue);
        }
        protected void SetImageToGui(string imageFilePath, Size size)
        {
            if (string.IsNullOrEmpty(imageFilePath))
            {
                return;
            }

            // determine the overlay to add to poster
            TraktUserListItem listItem    = TVTag as TraktUserListItem;
            MainOverlayImage  mainOverlay = MainOverlayImage.None;

            if (listItem.InWatchList)
            {
                mainOverlay = MainOverlayImage.Watchlist;
            }
            else if (listItem.Watched)
            {
                mainOverlay = MainOverlayImage.Seenit;
            }

            // add additional overlay if applicable
            if (listItem.InCollection)
            {
                mainOverlay |= MainOverlayImage.Library;
            }

            RatingOverlayImage ratingOverlay = GUIImageHandler.GetRatingOverlay(listItem.RatingAdvanced);

            // get a reference to a MediaPortal Texture Identifier
            string suffix  = mainOverlay.ToString().Replace(", ", string.Empty) + Enum.GetName(typeof(RatingOverlayImage), ratingOverlay);
            string texture = GUIImageHandler.GetTextureIdentFromFile(imageFilePath, suffix);

            // build memory image
            Image memoryImage = null;

            if (mainOverlay != MainOverlayImage.None || ratingOverlay != RatingOverlayImage.None)
            {
                memoryImage = GUIImageHandler.DrawOverlayOnPoster(imageFilePath, mainOverlay, ratingOverlay, size);
                if (memoryImage == null)
                {
                    return;
                }

                // load texture into facade item
                if (GUITextureManager.LoadFromMemory(memoryImage, texture, 0, 0, 0) > 0)
                {
                    ThumbnailImage = texture;
                    IconImage      = texture;
                    IconImageBig   = texture;
                }
            }
            else
            {
                ThumbnailImage = imageFilePath;
                IconImage      = imageFilePath;
                IconImageBig   = imageFilePath;
            }

            // if selected and is current window force an update of thumbnail
            this.UpdateItemIfSelected((int)TraktGUIWindows.ListItems, ItemId);
        }
        protected override void OnShowContextMenu()
        {
            GUIListItem selectedItem = this.Facade.SelectedListItem;

            if (selectedItem == null)
            {
                return;
            }

            TraktUserListItem userListItem = (TraktUserListItem)selectedItem.TVTag;

            IDialogbox 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 (!userListItem.Watched)
                {
                    listItem = new GUIListItem(Translation.MarkAsWatched);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.MarkAsWatched;
                }

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

            if (SelectedType != TraktItemType.season)
            {
                // Add/Remove Watch List
                if (!userListItem.InWatchList)
                {
                    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 Library
                // Don't allow if it will be removed again on next sync
                // movie could be part of a DVD collection
                if (!userListItem.InCollection && !TraktSettings.KeepTraktLibraryClean)
                {
                    listItem = new GUIListItem(Translation.AddToLibrary);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.AddToLibrary;
                }

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

            // Related Movies/Shows
            listItem = new GUIListItem(SelectedType == TraktItemType.movie ? Translation.RelatedMovies : Translation.RelatedShows + "...");
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Related;

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

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

            // Trailers
            if (TraktHelper.IsOnlineVideosAvailableAndEnabled)
            {
                listItem = new GUIListItem(Translation.Trailers);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Trailers;
            }

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

            // Search with MyTorrents
            if (TraktHelper.IsMyTorrentsAvailableAndEnabled)
            {
                if ((userListItem.Movie != null && !userListItem.Movie.InCollection) || userListItem.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):
                MarkItemAsWatched(userListItem);
                if (userListItem.Plays == 0)
                {
                    userListItem.Plays = 1;
                }
                userListItem.Watched  = true;
                selectedItem.IsPlayed = true;
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    userListItem.Movie.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                else
                {
                    userListItem.Show.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                break;

            case ((int)ContextMenuItem.MarkAsUnWatched):
                MarkItemAsUnWatched(userListItem);
                userListItem.Watched  = false;
                selectedItem.IsPlayed = false;
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    userListItem.Movie.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                else
                {
                    userListItem.Show.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                break;

            case ((int)ContextMenuItem.AddToWatchList):
                AddItemToWatchList(userListItem);
                userListItem.InWatchList = true;
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    userListItem.Movie.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                else
                {
                    userListItem.Show.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                GUIWatchListMovies.ClearCache(TraktSettings.Username);
                break;

            case ((int)ContextMenuItem.RemoveFromWatchList):
                RemoveItemFromWatchList(userListItem);
                userListItem.InWatchList = false;
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    userListItem.Movie.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                else
                {
                    userListItem.Show.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                GUIWatchListMovies.ClearCache(TraktSettings.Username);
                break;

            case ((int)ContextMenuItem.AddToList):
                if (SelectedType == TraktItemType.movie)
                {
                    TraktHelper.AddRemoveMovieInUserList(userListItem.Title, userListItem.Year, userListItem.ImdbId, false);
                }
                else if (SelectedType == TraktItemType.show)
                {
                    TraktHelper.AddRemoveShowInUserList(userListItem.Title, userListItem.Year, userListItem.Show.Tvdb, false);
                }
                else if (SelectedType == TraktItemType.season)
                {
                    TraktHelper.AddRemoveSeasonInUserList(userListItem.Title, userListItem.Year, userListItem.SeasonNumber, userListItem.Show.Tvdb, false);
                }
                else if (SelectedType == TraktItemType.episode)
                {
                    TraktHelper.AddRemoveEpisodeInUserList(userListItem.Title, userListItem.Year, userListItem.SeasonNumber, userListItem.EpisodeNumber, userListItem.Show.Tvdb, 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 multile lists) but typically you only remove from the current list
                if (SelectedType == TraktItemType.movie)
                {
                    TraktListItem item = new TraktListItem {
                        Type = "movie", ImdbId = userListItem.ImdbId, Title = userListItem.Title, Year = Convert.ToInt32(userListItem.Year)
                    };
                    TraktHelper.AddRemoveItemInList(CurrentList.Slug, item, true);
                }
                else if (SelectedType == TraktItemType.show)
                {
                    TraktListItem item = new TraktListItem {
                        Type = "show", TvdbId = userListItem.Show.Tvdb, Title = userListItem.Title, Year = Convert.ToInt32(userListItem.Year)
                    };
                    TraktHelper.AddRemoveItemInList(CurrentList.Slug, item, true);
                }
                else if (SelectedType == TraktItemType.season)
                {
                    TraktListItem item = new TraktListItem {
                        Type = "season", TvdbId = userListItem.Show.Tvdb, Title = userListItem.Title, Year = Convert.ToInt32(userListItem.Year), Season = Convert.ToInt32(userListItem.SeasonNumber)
                    };
                    TraktHelper.AddRemoveItemInList(CurrentList.Slug, item, true);
                }
                else if (SelectedType == TraktItemType.episode)
                {
                    TraktListItem item = new TraktListItem {
                        Type = "episode", TvdbId = userListItem.Show.Tvdb, Title = userListItem.Title, Year = Convert.ToInt32(userListItem.Year), Season = Convert.ToInt32(userListItem.SeasonNumber), Episode = Convert.ToInt32(userListItem.EpisodeNumber)
                    };
                    TraktHelper.AddRemoveItemInList(CurrentList.Slug, item, true);
                }

                // Remove from view
                if (Facade.Count > 1)
                {
                    PreviousSelectedIndex = Facade.SelectedListItemIndex;
                    CurrentList.Items.Remove(userListItem);
                    SendListItemsToFacade(CurrentList);
                }
                else
                {
                    CurrentList.Items.Remove(userListItem);

                    // no more items left
                    GUIControl.ClearControl(GetID, Facade.GetID);
                    ClearProperties();
                    GUIWindowManager.Process();

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

            case ((int)ContextMenuItem.AddToLibrary):
                AddItemToLibrary(userListItem);
                userListItem.InCollection = true;
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    userListItem.Movie.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                else
                {
                    userListItem.Show.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                break;

            case ((int)ContextMenuItem.RemoveFromLibrary):
                RemoveItemFromLibrary(userListItem);
                userListItem.InCollection = false;
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    userListItem.Movie.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                else
                {
                    userListItem.Show.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                break;

            case ((int)ContextMenuItem.Related):
                if (SelectedType == TraktItemType.movie)
                {
                    RelatedMovie relatedMovie = new RelatedMovie();
                    relatedMovie.IMDbId           = userListItem.Movie.IMDBID;
                    relatedMovie.Title            = userListItem.Movie.Title;
                    GUIRelatedMovies.relatedMovie = relatedMovie;
                    GUIWindowManager.ActivateWindow((int)TraktGUIWindows.RelatedMovies);
                }
                else
                {
                    //series, season & episode
                    RelatedShow relatedShow = new RelatedShow();
                    relatedShow.Title           = userListItem.Show.Title;
                    relatedShow.TVDbId          = userListItem.Show.Tvdb;
                    GUIRelatedShows.relatedShow = relatedShow;
                    GUIWindowManager.ActivateWindow((int)TraktGUIWindows.RelatedShows);
                }
                break;

            case ((int)ContextMenuItem.Rate):
                RateItem(userListItem);
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    userListItem.Movie.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                else
                {
                    userListItem.Show.Images.NotifyPropertyChanged("PosterImageFilename");
                }
                break;

            case ((int)ContextMenuItem.Shouts):
                GUIShouts.ShoutType = (GUIShouts.ShoutTypeEnum)Enum.Parse(typeof(GUIShouts.ShoutTypeEnum), SelectedType.ToString(), true);
                if (SelectedType == TraktItemType.movie)
                {
                    GUIShouts.MovieInfo = new MovieShout {
                        IMDbId = userListItem.ImdbId, TMDbId = userListItem.Movie.TMDBID, Title = userListItem.Title, Year = userListItem.Year
                    }
                }
                ;
                else if (SelectedType == TraktItemType.show)
                {
                    GUIShouts.ShowInfo = new ShowShout {
                        IMDbId = userListItem.ImdbId, TVDbId = userListItem.Show.Tvdb, Title = userListItem.Title
                    }
                }
                ;
                else
                {
                    GUIShouts.EpisodeInfo = new EpisodeShout {
                        IMDbId = userListItem.ImdbId, TVDbId = userListItem.Show.Tvdb, Title = userListItem.Title, SeasonIdx = userListItem.SeasonNumber, EpisodeIdx = userListItem.EpisodeNumber
                    }
                };
                GUIShouts.Fanart = SelectedType == TraktItemType.movie ? (userListItem.Images as TraktMovie.MovieImages).FanartImageFilename : (userListItem.Images as TraktShow.ShowImages).FanartImageFilename;
                GUIWindowManager.ActivateWindow((int)TraktGUIWindows.Shouts);
                break;

            case ((int)ContextMenuItem.Trailers):
                if (SelectedType == TraktItemType.movie)
                {
                    GUICommon.ShowMovieTrailersMenu(userListItem.Movie);
                }
                else
                {
                    GUICommon.ShowTVShowTrailersMenu(userListItem.Show, userListItem.Episode);
                }
                break;

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

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

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

            default:
                break;
            }

            base.OnShowContextMenu();
        }