private void DeleteList(TraktUserList list) { if (!GUIUtils.ShowYesNoDialog(Translation.Lists, Translation.ConfirmDeleteList, false)) { return; } GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() => { TraktLogger.Info("Deleting list '{0}'", list.Name); TraktList deleteList = new TraktList { UserName = TraktSettings.Username, Password = TraktSettings.Password, Slug = list.Slug }; return(TraktAPI.TraktAPI.ListDelete(deleteList)); }, delegate(bool success, object result) { if (success) { TraktResponse response = result as TraktResponse; TraktLogger.LogTraktResponse <TraktResponse>(response); if (response.Status == "success") { // reload with new list TraktLists.ClearCache(TraktSettings.Username); LoadLists(); } else { GUIUtils.ShowNotifyDialog(Translation.Lists, response.Error); } } }, Translation.DeletingList, true); }
private void EditList(TraktList list) { GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() => { return(TraktAPI.TraktAPI.ListUpdate(list)); }, delegate(bool success, object result) { if (success) { TraktResponse response = result as TraktResponse; TraktLogger.LogTraktResponse <TraktResponse>(response); if (response.Status == "success") { // reload with new list TraktLists.ClearCache(TraktSettings.Username); LoadLists(); } else { GUIUtils.ShowNotifyDialog(Translation.Lists, response.Error); } } }, Translation.EditingList, true); }
private void CreateList(TraktList list) { GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() => { return(TraktAPI.TraktAPI.CreateCustomList(list)); }, delegate(bool success, object result) { if (success) { var response = result as TraktListDetail; if (response != null) { // add to MovingPictures categories and filters menu if (TraktHelper.IsMovingPicturesAvailableAndEnabled) { // not very thread safe if we tried to add more than one before response! TraktHandlers.MovingPictures.AddCustomListNode(list.Name); } // reload with new list TraktLists.ClearListCache(TraktSettings.Username); LoadLists(); } else { GUIUtils.ShowNotifyDialog(Translation.Lists, Translation.FailedCreateList); } } }, Translation.CreatingList, true); }
private void SendLikedListsToFacade(IEnumerable <TraktLike> likedItems) { // clear facade GUIControl.ClearControl(GetID, Facade.GetID); if (likedItems == null) { GUIUtils.ShowNotifyDialog(Translation.Error, Translation.ErrorGeneral); GUIWindowManager.ShowPreviousWindow(); return; } int itemId = 0; // Add each list foreach (var likedItem in likedItems) { var item = new GUIListItem(likedItem.List.Name.RemapHighOrderChars()); item.Label2 = string.Format("{0} {1}", likedItem.List.ItemCount, likedItem.List.ItemCount != 1 ? Translation.Items : Translation.Item); item.TVTag = likedItem; item.ItemId = Int32.MaxValue - itemId; item.PinImage = TraktLists.GetPrivacyLevelIcon(likedItem.List.Privacy); item.IconImage = "defaultFolder.png"; item.IconImageBig = "defaultFolderBig.png"; item.ThumbnailImage = "defaultFolderBig.png"; item.OnItemSelected += OnItemSelected; Utils.SetDefaultIcons(item); Facade.Add(item); itemId++; } // Set Facade Layout Facade.CurrentLayout = GUIFacadeControl.Layout.List; GUIControl.FocusControl(GetID, Facade.GetID); if (PreviousSelectedIndex >= likedItems.Count()) { Facade.SelectIndex(PreviousSelectedIndex - 1); } else { Facade.SelectIndex(PreviousSelectedIndex); } // set facade properties GUIUtils.SetProperty("#itemcount", likedItems.Count().ToString()); GUIUtils.SetProperty("#Trakt.Items", string.Format("{0} {1}", likedItems.Count().ToString(), likedItems.Count() > 1 ? Translation.Lists : Translation.List)); }
private void LoadLists() { GUIUtils.SetProperty("#Trakt.Items", string.Empty); GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() => { switch (ListType) { case TraktListType.Trending: return(TraktLists.GetTrendingLists()); case TraktListType.Popular: return(TraktLists.GetPopularLists()); case TraktListType.Liked: return(TraktLists.GetLikedLists()); default: return(TraktLists.GetListsForUser(CurrentUser)); } }, delegate(bool success, object result) { if (success) { switch (ListType) { case TraktListType.Trending: SendTrendingListsToFacade(result as IEnumerable <TraktListTrending>); break; case TraktListType.Popular: SendPopularListsToFacade(result as IEnumerable <TraktListPopular>); break; case TraktListType.Liked: SendLikedListsToFacade(result as IEnumerable <TraktLike>); break; default: Lists = result as IEnumerable <TraktListDetail>; SendUserListsToFacade(Lists); break; } } }, Translation.GettingLists, true); }
private void LoadListItems() { GUIUtils.SetProperty("#Trakt.Items", string.Empty); GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() => { return(TraktLists.GetListForUser(CurrentUser, CurrentList.Slug)); }, delegate(bool success, object result) { if (success) { CurrentList = result as TraktUserList; SendListItemsToFacade(CurrentList); } }, Translation.GettingListItems, true); }
private void LoadLists() { GUIUtils.SetProperty("#Trakt.Items", string.Empty); GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() => { return(TraktLists.GetListsForUser(CurrentUser)); }, delegate(bool success, object result) { if (success) { Lists = result as IEnumerable <TraktUserList>; SendListsToFacade(Lists); } }, Translation.GettingLists, true); }
private void LoadListItems() { GUIUtils.SetProperty("#Trakt.Items", string.Empty); GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() => { var listItems = TraktLists.GetListItemsForUser(CurrentUser, (int)CurrentList.Ids.Trakt); return(listItems); }, delegate(bool success, object result) { if (success) { var userListItems = result as IEnumerable <TraktListItem>; SendListItemsToFacade(userListItems); } }, Translation.GettingListItems, true); }
private void EditList(TraktListDetail list) { GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() => { return(TraktAPI.TraktAPI.UpdateCustomList(list)); }, delegate(bool success, object result) { if (success) { var response = result as TraktListDetail; if (response == null) { // reload with new list TraktLists.ClearListCache(TraktSettings.Username); LoadLists(); var thread = new Thread((o) => { TraktCache.ClearCustomListCache(); // updated MovingPictures categories and filters menu if (TraktHelper.IsMovingPicturesAvailableAndEnabled) { TraktHandlers.MovingPictures.UpdateCategoriesMenu(SyncListType.CustomList); TraktHandlers.MovingPictures.UpdateFiltersMenu(SyncListType.CustomList); } }) { Name = "EditList", IsBackground = true }; thread.Start(); } else { GUIUtils.ShowNotifyDialog(Translation.Lists, Translation.FailedUpdateList); } } }, Translation.EditingList, true); }
private void DeleteList(TraktListDetail list) { if (!GUIUtils.ShowYesNoDialog(Translation.Lists, Translation.ConfirmDeleteList, false)) { return; } GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() => { TraktLogger.Info("Deleting list from online. Name = '{0}', Id = '{1}'", list.Name, list.Ids.Trakt); return(TraktAPI.TraktAPI.DeleteUserList("me", list.Ids.Trakt.ToString())); }, delegate(bool success, object result) { if (success) { if ((result as bool?) == true) { // remove from MovingPictures categories and filters menu if (TraktHelper.IsMovingPicturesAvailableAndEnabled) { // not very thread safe if we tried to delete more than one before response! TraktHandlers.MovingPictures.RemoveCustomListNode(list.Name); } // reload with new list TraktLists.ClearListCache(TraktSettings.Username); LoadLists(); } else { GUIUtils.ShowNotifyDialog(Translation.Lists, Translation.FailedDeleteList); } } }, Translation.DeletingList, true); }
private void SendListsToFacade(IEnumerable <TraktUserList> lists) { // clear facade GUIControl.ClearControl(GetID, Facade.GetID); if (lists.Count() == 0 && TraktSettings.Username != CurrentUser) { GUIUtils.ShowNotifyDialog(GUIUtils.PluginName(), string.Format(Translation.NoUserLists, CurrentUser)); CurrentUser = TraktSettings.Username; GUIWindowManager.ShowPreviousWindow(); return; } if (lists.Count() == 0) { if (!GUIUtils.ShowYesNoDialog(Translation.Lists, Translation.NoListsFound, true)) { // nothing to do, exit GUIWindowManager.ShowPreviousWindow(); return; } TraktList list = new TraktList(); if (TraktLists.GetListDetailsFromUser(ref list)) { TraktLogger.Info("Creating new '{0}' list '{1}'", list.Privacy, list.Name); CreateList(list); } return; } int itemId = 0; // Add each list foreach (var list in lists) { GUIListItem item = new GUIListItem(list.Name); item.Label2 = TraktLists.GetPrivacyLevelTranslation(list.Privacy); item.TVTag = list; item.ItemId = Int32.MaxValue - itemId; item.IconImage = "defaultFolder.png"; item.IconImageBig = "defaultFolderBig.png"; item.ThumbnailImage = "defaultFolderBig.png"; item.OnItemSelected += OnItemSelected; Utils.SetDefaultIcons(item); Facade.Add(item); itemId++; } // Set Facade Layout Facade.SetCurrentLayout("List"); GUIControl.FocusControl(GetID, Facade.GetID); if (PreviousSelectedIndex >= lists.Count()) { Facade.SelectIndex(PreviousSelectedIndex - 1); } else { Facade.SelectIndex(PreviousSelectedIndex); } // set facade properties GUIUtils.SetProperty("#itemcount", lists.Count().ToString()); GUIUtils.SetProperty("#Trakt.Items", string.Format("{0} {1}", lists.Count().ToString(), lists.Count() > 1 ? Translation.Lists : Translation.List)); }
private void CopyList(TraktUserList sourceList, TraktList newList) { CopyList copyList = new CopyList { Username = CurrentUser, Source = sourceList, Destination = newList }; Thread copyThread = new Thread(delegate(object obj) { CopyList copyParams = obj as CopyList; // first create new list TraktLogger.Info("Creating new '{0}' list '{1}'", copyParams.Destination.Privacy, copyParams.Destination.Name); TraktAddListResponse response = TraktAPI.TraktAPI.ListAdd(copyParams.Destination); TraktLogger.LogTraktResponse <TraktResponse>(response); if (response.Status == "success") { // update with offical slug copyParams.Destination.Slug = response.Slug; // get items from other list TraktUserList userList = TraktAPI.TraktAPI.GetUserList(copyParams.Username, copyParams.Source.Slug); // copy items to new list List <TraktListItem> items = new List <TraktListItem>(); foreach (var item in userList.Items) { TraktListItem listItem = new TraktListItem(); listItem.Type = item.Type; switch (item.Type) { case "movie": listItem.Title = item.Movie.Title; listItem.Year = Convert.ToInt32(item.Movie.Year); listItem.ImdbId = item.Movie.IMDBID; break; case "show": listItem.Title = item.Show.Title; listItem.Year = item.Show.Year; listItem.TvdbId = item.Show.Tvdb; break; case "season": listItem.Title = item.Show.Title; listItem.Year = item.Show.Year; listItem.TvdbId = item.Show.Tvdb; listItem.Season = Convert.ToInt32(item.SeasonNumber); break; case "episode": listItem.Title = item.Show.Title; listItem.Year = item.Show.Year; listItem.TvdbId = item.Show.Tvdb; listItem.Season = Convert.ToInt32(item.SeasonNumber); listItem.Episode = Convert.ToInt32(item.EpisodeNumber); break; } items.Add(listItem); } copyParams.Destination.Items = items; // add items to the list TraktLogger.LogTraktResponse <TraktSyncResponse>(TraktAPI.TraktAPI.ListAddItems(copyParams.Destination)); if (response.Status == "success") { TraktLists.ClearCache(TraktSettings.Username); } } }) { Name = "CopyList", IsBackground = true }; copyThread.Start(copyList); }
protected override void OnShowContextMenu() { if (GUIBackgroundTask.Instance.IsBusy) { return; } GUIListItem selectedItem = this.Facade.SelectedListItem; if (selectedItem == null) { return; } TraktListDetail selectedList = null; string username = CurrentUser; if (selectedItem.TVTag is TraktListDetail) { selectedList = selectedItem.TVTag as TraktListDetail; } else if (selectedItem.TVTag is TraktListTrending) { var trending = selectedItem.TVTag as TraktListTrending; selectedList = trending.List; username = trending.List.User.Username; } else if (selectedItem.TVTag is TraktListPopular) { var popular = selectedItem.TVTag as TraktListPopular; selectedList = popular.List; username = popular.List.User.Username; } else if (selectedItem.TVTag is TraktLike) { var likedItem = selectedItem.TVTag as TraktLike; selectedList = likedItem.List; username = likedItem.List.User.Username; } 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 add/delete/update if viewing your own lists if (username == TraktSettings.Username) { listItem = new GUIListItem(Translation.CreateList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Create; listItem = new GUIListItem(Translation.EditList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Edit; listItem = new GUIListItem(Translation.DeleteList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Delete; } else { // like list if (!selectedList.IsLiked()) { listItem = new GUIListItem(Translation.Like); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Like; } else { // unLike list listItem = new GUIListItem(Translation.UnLike); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Unlike; } // copy a friends list listItem = new GUIListItem(Translation.CopyList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Copy; } // allow viewing comments for any type of lists // if comments are not allowed there will most like be no comments if (selectedList.AllowComments) { listItem = new GUIListItem(Translation.Comments + "..."); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Comments; } // Show Context Menu dlg.DoModal(GUIWindowManager.ActiveWindow); if (dlg.SelectedId < 0) { return; } var currentList = new TraktListDetail { Ids = selectedList.Ids, Name = selectedList.Name, Description = selectedList.Description, Privacy = selectedList.Privacy, AllowComments = selectedList.AllowComments, DisplayNumbers = selectedList.DisplayNumbers, ItemCount = selectedList.ItemCount, Likes = selectedList.Likes, UpdatedAt = selectedList.UpdatedAt }; switch (dlg.SelectedId) { case ((int)ContextMenuItem.Create): var list = new TraktListDetail(); if (TraktLists.GetListDetailsFromUser(ref list)) { if (Lists.Any(l => l.Name == list.Name)) { // list with that name already exists GUIUtils.ShowNotifyDialog(Translation.Lists, Translation.ListNameAlreadyExists); return; } TraktLogger.Info("Creating new list for user online. Privacy = '{0}', Name = '{1}'", list.Privacy, list.Name); CreateList(list); } break; case ((int)ContextMenuItem.Delete): DeleteList(selectedList); break; case ((int)ContextMenuItem.Edit): if (TraktLists.GetListDetailsFromUser(ref currentList)) { TraktLogger.Info("Editing list. Name = '{0}', Id = '{1}'", currentList.Name); EditList(currentList); } break; case ((int)ContextMenuItem.Copy): if (TraktLists.GetListDetailsFromUser(ref currentList)) { CopyList(selectedList, currentList); } break; case ((int)ContextMenuItem.Like): GUICommon.LikeList(selectedList); selectedList.Likes++; PublishListProperties(selectedList); break; case ((int)ContextMenuItem.Unlike): GUICommon.UnLikeList(selectedList); if (selectedList.Likes > 0) { // different behaviour basis the current view if (ListType == TraktListType.Liked) { // remove liked list from cache and reload TraktLists.RemovedItemFromLikedListCache(selectedList.Ids.Trakt); LoadLists(); } else { // update selected list properties as we have unliked it now. selectedList.Likes--; PublishListProperties(selectedList); } } break; case ((int)ContextMenuItem.Comments): ReturningFromListItemsOrComments = true; TraktHelper.ShowListShouts(selectedList); break; default: break; } base.OnShowContextMenu(); }
private void SendUserListsToFacade(IEnumerable <TraktListDetail> lists) { // clear facade GUIControl.ClearControl(GetID, Facade.GetID); if (lists == null) { GUIUtils.ShowNotifyDialog(Translation.Error, Translation.ErrorGeneral); GUIWindowManager.ShowPreviousWindow(); return; } // check if the user has any lists (not the currently logged in user) if (ListType == TraktListType.User && lists.Count() == 0 && TraktSettings.Username != CurrentUser) { GUIUtils.ShowNotifyDialog(GUIUtils.PluginName(), string.Format(Translation.NoUserLists, CurrentUser)); CurrentUser = TraktSettings.Username; GUIWindowManager.ShowPreviousWindow(); return; } // check if the currently logged in user has any lists // if none, prompt to create one if (ListType == TraktListType.User && lists.Count() == 0) { if (!GUIUtils.ShowYesNoDialog(Translation.Lists, Translation.NoListsFound, true)) { // nothing to do, exit GUIWindowManager.ShowPreviousWindow(); return; } var list = new TraktListDetail(); if (TraktLists.GetListDetailsFromUser(ref list)) { TraktLogger.Info("Creating new list online. Privacy = '{0}', Name = '{1}'", list.Privacy, list.Name); CreateList(list); } return; } int itemId = 0; // Add each list foreach (var list in lists) { var item = new GUIListItem(list.Name); item.Label2 = string.Format("{0} {1}", list.ItemCount, list.ItemCount != 1 ? Translation.Items : Translation.Item); item.TVTag = list; item.ItemId = Int32.MaxValue - itemId; item.PinImage = TraktLists.GetPrivacyLevelIcon(list.Privacy); item.IconImage = "defaultFolder.png"; item.IconImageBig = "defaultFolderBig.png"; item.ThumbnailImage = "defaultFolderBig.png"; item.OnItemSelected += OnItemSelected; Utils.SetDefaultIcons(item); Facade.Add(item); itemId++; } // Set Facade Layout Facade.CurrentLayout = GUIFacadeControl.Layout.List; GUIControl.FocusControl(GetID, Facade.GetID); if (PreviousSelectedIndex >= lists.Count()) { Facade.SelectIndex(PreviousSelectedIndex - 1); } else { Facade.SelectIndex(PreviousSelectedIndex); } // set facade properties GUIUtils.SetProperty("#itemcount", lists.Count().ToString()); GUIUtils.SetProperty("#Trakt.Items", string.Format("{0} {1}", lists.Count().ToString(), lists.Count() > 1 ? Translation.Lists : Translation.List)); }
private void CopyList(TraktListDetail sourceList, TraktList newList) { var copyList = new CopyList { Username = CurrentUser, Source = sourceList, Destination = newList }; var copyThread = new Thread((obj) => { var copyParams = obj as CopyList; // first create new list TraktLogger.Info("Creating new list online. Privacy = '{0}', Name = '{1}'", copyParams.Destination.Privacy, copyParams.Destination.Name); var response = TraktAPI.TraktAPI.CreateCustomList(copyParams.Destination); if (response == null || response.Ids == null) { TraktLogger.Error("Failed to create user list. List Name = '{0}'", copyParams.Destination.Name); return; } // get items from other list var userListItems = TraktAPI.TraktAPI.GetUserListItems(copyParams.Source.User.Ids.Slug, copyParams.Source.Ids.Trakt.ToString(), "min"); if (userListItems == null) { TraktLogger.Error("Failed to get user list items. List Name = '{0}', ID = '{1}'", copyParams.Destination.Name, copyParams.Source.Ids.Trakt); return; } // copy items to new list var itemsToAdd = new TraktSyncAll(); foreach (var item in userListItems) { var listItem = new TraktListItem(); listItem.Type = item.Type; switch (item.Type) { case "movie": if (itemsToAdd.Movies == null) { itemsToAdd.Movies = new List <TraktMovie>(); } itemsToAdd.Movies.Add(new TraktMovie { Ids = item.Movie.Ids }); break; case "show": if (itemsToAdd.Shows == null) { itemsToAdd.Shows = new List <TraktShow>(); } itemsToAdd.Shows.Add(new TraktShow { Ids = item.Show.Ids }); break; case "season": if (itemsToAdd.Seasons == null) { itemsToAdd.Seasons = new List <TraktSeason>(); } itemsToAdd.Seasons.Add(new TraktSeason { Ids = item.Season.Ids }); break; case "episode": if (itemsToAdd.Episodes == null) { itemsToAdd.Episodes = new List <TraktEpisode>(); } itemsToAdd.Episodes.Add(new TraktEpisode { Ids = item.Episode.Ids }); break; case "person": if (itemsToAdd.People == null) { itemsToAdd.People = new List <TraktPerson>(); } itemsToAdd.People.Add(new TraktPerson { Ids = item.Person.Ids }); break; } } // add items to the list var ItemsAddedResponse = TraktAPI.TraktAPI.AddItemsToList("me", response.Ids.Trakt.ToString(), itemsToAdd); if (ItemsAddedResponse != null) { TraktLists.ClearListCache(TraktSettings.Username); TraktCache.ClearCustomListCache(); // updated MovingPictures categories and filters menu if (TraktHelper.IsMovingPicturesAvailableAndEnabled) { MovingPictures.UpdateCategoriesMenu(SyncListType.CustomList); MovingPictures.UpdateFiltersMenu(SyncListType.CustomList); } } }) { Name = "CopyList", IsBackground = true }; copyThread.Start(copyList); }
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 GUICustomListItem).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 GUICustomListItem).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 GUICustomListItem).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 GUICustomListItem).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(); }
protected override void OnShowContextMenu() { if (GUIBackgroundTask.Instance.IsBusy) { return; } GUIListItem selectedItem = this.Facade.SelectedListItem; if (selectedItem == null) { return; } TraktUserList selectedList = (TraktUserList)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; // only allow add/delete/update if viewing your own lists if (CurrentUser == TraktSettings.Username) { listItem = new GUIListItem(Translation.CreateList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Create; listItem = new GUIListItem(Translation.EditList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Edit; listItem = new GUIListItem(Translation.DeleteList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Delete; } else { // copy a friends list listItem = new GUIListItem(Translation.CopyList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Copy; } // Show Context Menu dlg.DoModal(GUIWindowManager.ActiveWindow); if (dlg.SelectedId < 0) { return; } TraktList currentList = new TraktList { Name = selectedList.Name, Description = selectedList.Description, Privacy = selectedList.Privacy, Slug = selectedList.Slug, ShowNumbers = selectedList.ShowNumbers, AllowShouts = selectedList.AllowShouts }; switch (dlg.SelectedId) { case ((int)ContextMenuItem.Create): TraktList list = new TraktList(); if (TraktLists.GetListDetailsFromUser(ref list)) { if (Lists.ToList().Exists(l => l.Name == list.Name)) { // list with that name already exists GUIUtils.ShowNotifyDialog(Translation.Lists, Translation.ListNameAlreadyExists); return; } TraktLogger.Info("Creating new '{0}' list '{1}'", list.Privacy, list.Name); CreateList(list); } break; case ((int)ContextMenuItem.Delete): DeleteList(selectedList); break; case ((int)ContextMenuItem.Edit): if (TraktLists.GetListDetailsFromUser(ref currentList)) { TraktLogger.Info("Editing list '{0}'", currentList.Slug); EditList(currentList); } break; case ((int)ContextMenuItem.Copy): if (TraktLists.GetListDetailsFromUser(ref currentList)) { CopyList(selectedList, currentList); } break; default: break; } base.OnShowContextMenu(); }
protected override void OnShowContextMenu() { if (GUIBackgroundTask.Instance.IsBusy) { return; } GUIListItem selectedItem = this.Facade.SelectedListItem; if (selectedItem == null) { return; } var selectedList = selectedItem.TVTag as TraktListDetail; if (selectedItem == 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 add/delete/update if viewing your own lists if (CurrentUser == TraktSettings.Username) { listItem = new GUIListItem(Translation.CreateList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Create; listItem = new GUIListItem(Translation.EditList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Edit; listItem = new GUIListItem(Translation.DeleteList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Delete; } else { // like list if (!selectedList.IsLiked()) { listItem = new GUIListItem(Translation.Like); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Like; } else { // unLike list listItem = new GUIListItem(Translation.UnLike); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Unlike; } // copy a friends list listItem = new GUIListItem(Translation.CopyList); dlg.Add(listItem); listItem.ItemId = (int)ContextMenuItem.Copy; } // Show Context Menu dlg.DoModal(GUIWindowManager.ActiveWindow); if (dlg.SelectedId < 0) { return; } var currentList = new TraktListDetail { Ids = selectedList.Ids, Name = selectedList.Name, Description = selectedList.Description, Privacy = selectedList.Privacy, AllowComments = selectedList.AllowComments, DisplayNumbers = selectedList.DisplayNumbers, ItemCount = selectedList.ItemCount, Likes = selectedList.Likes, UpdatedAt = selectedList.UpdatedAt }; switch (dlg.SelectedId) { case ((int)ContextMenuItem.Create): var list = new TraktListDetail(); if (TraktLists.GetListDetailsFromUser(ref list)) { if (Lists.Any(l => l.Name == list.Name)) { // list with that name already exists GUIUtils.ShowNotifyDialog(Translation.Lists, Translation.ListNameAlreadyExists); return; } TraktLogger.Info("Creating new list for user online. Privacy = '{0}', Name = '{1}'", list.Privacy, list.Name); CreateList(list); } break; case ((int)ContextMenuItem.Delete): DeleteList(selectedList); break; case ((int)ContextMenuItem.Edit): if (TraktLists.GetListDetailsFromUser(ref currentList)) { TraktLogger.Info("Editing list. Name = '{0}', Id = '{1}'", currentList.Name); EditList(currentList); } break; case ((int)ContextMenuItem.Copy): if (TraktLists.GetListDetailsFromUser(ref currentList)) { CopyList(selectedList, currentList); } break; case ((int)ContextMenuItem.Like): GUICommon.LikeList(selectedList, CurrentUser); selectedList.Likes++; PublishListProperties(selectedList); break; case ((int)ContextMenuItem.Unlike): GUICommon.UnLikeList(selectedList, CurrentUser); if (selectedList.Likes > 0) { selectedList.Likes--; PublishListProperties(selectedList); } break; default: break; } base.OnShowContextMenu(); }