示例#1
0
        private void CopyList(TraktListDetail sourceList, TraktListDetail 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)
                {
                    // get items from other list
                    var userListItems = TraktAPI.TraktAPI.GetUserListItems(copyParams.Username, copyParams.Source.Ids.Trakt.ToString(), "min");

                    // 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)
                        {
                            TraktHandlers.MovingPictures.UpdateCategoriesMenu(SyncListType.CustomList);
                            TraktHandlers.MovingPictures.UpdateFiltersMenu(SyncListType.CustomList);
                        }
                    }
                }
            })
            {
                Name = "CopyList",
                IsBackground = true
            };
            copyThread.Start(copyList);
        }
        private TraktSyncAll GetSyncItems(TraktListItem listItem)
        {
            var syncItems = new TraktSyncAll();

            switch (listItem.Type)
            {
                case "movie":
                    var movie = new TraktMovie
                    {
                        Ids = new TraktMovieId { Trakt = listItem.Movie.Ids.Trakt }
                    };
                    syncItems.Movies = new List<TraktMovie>();
                    syncItems.Movies.Add(movie);
                    break;

                case "show":
                    var show = new TraktShow
                    {
                        Ids = new TraktShowId { Trakt = listItem.Show.Ids.Trakt }
                    };
                    syncItems.Shows = new List<TraktShow>();
                    syncItems.Shows.Add(show);
                    break;

                case "season":
                    var season = new TraktSeason
                    {
                        Ids = new TraktSeasonId { Trakt = listItem.Season.Ids.Trakt }
                    };
                    syncItems.Seasons = new List<TraktSeason>();
                    syncItems.Seasons.Add(season);
                    break;

                case "episode":
                    var episode = new TraktEpisode
                    {
                        Ids = new TraktEpisodeId { Trakt = listItem.Episode.Ids.Trakt }
                    };
                    syncItems.Episodes = new List<TraktEpisode>();
                    syncItems.Episodes.Add(episode);
                    break;

                case "person":
                    var person = new TraktPerson
                    {
                        Ids = new TraktPersonId { Trakt = listItem.Person.Ids.Trakt }
                    };
                    syncItems.People = new List<TraktPerson>();
                    syncItems.People.Add(person);
                    break;
            }

            return syncItems;
        }
示例#3
0
 public static TraktSyncResponse AddItemsToList(string username, string id, TraktSyncAll items)
 {
     var response = PostToTrakt(string.Format(TraktURIs.UserListItemsAdd, username, id), items.ToJSON());
     return response.FromJSON<TraktSyncResponse>();
 }
        public static void AddRemoveShowInUserList(string username, string title, int? year, int? tvdbid, string imdbid, int? tmdbid, int? traktid, bool remove)
        {
            if (!GUICommon.CheckLogin(false)) return;

            GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() =>
            {
                return TraktLists.GetListsForUser(username);
            },
            delegate(bool success, object result)
            {
                if (success)
                {
                    var customlists = result as IEnumerable<TraktListDetail>;

                    // get slug of lists selected
                    List<int> slugs = TraktLists.GetUserListSelections(customlists.ToList());
                    if (slugs == null || slugs.Count == 0) return;

                    // add the movie to add/remove to a new sync list
                    var items = new TraktSyncAll
                    {
                        Shows = new List<TraktShow>
                        {
                            new TraktShow
                            {
                                Ids = new TraktShowId
                                {
                                    Trakt = traktid,
                                    Imdb = imdbid,
                                    Tmdb = tmdbid,
                                    Tvdb = tvdbid
                                },
                                Title = title,
                                Year = year
                            }
                        }
                    };

                    AddRemoveItemInList(slugs, items, remove);
                }
            }, Translation.GettingLists, true);
        }
        internal static void AddRemoveSeasonInUserList(TraktSeason season, bool remove)
        {
            if (!GUICommon.CheckLogin(false)) return;

            GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() =>
            {
                return TraktLists.GetListsForUser(TraktSettings.Username);
            },
            delegate(bool success, object result)
            {
                if (success)
                {
                    var customlists = result as IEnumerable<TraktListDetail>;

                    // get slug of lists selected
                    List<int> slugs = TraktLists.GetUserListSelections(customlists.ToList());
                    if (slugs == null || slugs.Count == 0) return;

                    // add the movie to add/remove to a new sync list
                    var items = new TraktSyncAll
                    {
                        Seasons = new List<TraktSeason>
                        {
                            new TraktSeason
                            {
                                Ids = new TraktSeasonId { Trakt = season.Ids.Trakt }
                            }
                        }
                    };

                    AddRemoveItemInList(slugs, items, remove);
                }
            }, Translation.GettingLists, true);
        }
        internal static void AddRemoveItemInList(List<int> listIds, TraktSyncAll items, bool remove)
        {
            var listThread = new Thread((o) =>
            {
                foreach (int listId in listIds)
                {
                    TraktSyncResponse response = null;
                    if (!remove)
                    {
                        response = TraktAPI.TraktAPI.AddItemsToList("me", listId.ToString(), items);
                    }
                    else
                    {
                        response = TraktAPI.TraktAPI.RemoveItemsFromList("me", listId.ToString(), items);
                    }

                    if (response != null)
                    {
                        // clear current items in any lists
                        // list items will be refreshed online if we try to request them
                        TraktLists.ClearItemsInList(TraktSettings.Username, listId);

                        // update MovingPictures Categories and Filters menu
                        if (items.Movies != null && items.Movies.Count > 0 && IsMovingPicturesAvailableAndEnabled)
                        {
                            // we need the name of the list so get list from slug first
                            var userLists = TraktLists.GetListsForUser(TraktSettings.Username);
                            if (userLists == null) continue;

                            // get the list
                            var userList = userLists.FirstOrDefault(l => l.Ids.Trakt == listId);
                            if (userList == null) continue;

                            if (remove)
                            {
                                MovingPictures.RemoveMovieCriteriaFromCustomlistNode(userList.Name, items.Movies.First().Ids.Imdb);
                            }
                            else
                            {
                                MovingPictures.AddMovieCriteriaToCustomlistNode(userList.Name, items.Movies.First().Ids.Imdb);
                            }
                        }
                    }
                }
            })
            {
                Name = remove ? "RemoveList" : "AddList",
                IsBackground = true
            };

            listThread.Start();
        }
 internal static void AddRemoveItemInList(int listId, TraktSyncAll items, bool remove)
 {
     AddRemoveItemInList(new List<int> { listId }, items, remove);
 }