/// <summary> /// Returns a list of shows for rating sync as show objects with season / episode hierarchy /// </summary> private TraktSyncShowsRatedEx GetRatedEpisodesForSyncEx(List<DBEpisode> localRatedEpisodes, List<TraktEpisodeRated> traktEpisodesRated) { TraktLogger.Info("Finding local episodes to add to trakt.tv ratings"); // prepare new sync object var syncRatedEpisodes = new TraktSyncShowsRatedEx(); syncRatedEpisodes.Shows = new List<TraktSyncShowRatedEx>(); // filter out any invalid episodes or ignored series by user var episodes = localRatedEpisodes.Where(lre => lre[DBOnlineEpisode.cEpisodeIndex] != "" && lre[DBOnlineEpisode.cEpisodeIndex] != "0").ToList(); // create a unique key to lookup and search for faster var onlineEpisodes = traktEpisodesRated.ToLookup(tre => CreateLookupKey(tre), tre => tre); foreach (var episode in episodes) { string tvdbKey = CreateLookupKey(episode); var traktEpisode = onlineEpisodes[tvdbKey].FirstOrDefault(); // check if not rated on trakt and add it to sync list if (traktEpisode == null) { // check if we already have the show added to our sync object var syncShow = syncRatedEpisodes.Shows.FirstOrDefault(sre => sre.Ids != null && sre.Ids.Tvdb == episode[DBOnlineEpisode.cSeriesID]); if (syncShow == null) { // get show data from episode var show = Helper.getCorrespondingSeries(episode[DBOnlineEpisode.cSeriesID]); if (show == null) continue; // create new show syncShow = new TraktSyncShowRatedEx { Ids = new TraktShowId { Tvdb = show[DBSeries.cID], Imdb = BasicHandler.GetProperImdbId(show[DBOnlineSeries.cIMDBID]) }, Title = show[DBOnlineSeries.cOriginalName], Year = show.Year.ToNullableInt32() }; // add a new season collection to show object syncShow.Seasons = new List<TraktSyncShowRatedEx.Season>(); // add show to the collection syncRatedEpisodes.Shows.Add(syncShow); } // check if season exists in show sync object var syncSeason = syncShow.Seasons.FirstOrDefault(ss => ss.Number == episode[DBOnlineEpisode.cSeasonIndex]); if (syncSeason == null) { // create new season syncSeason = new TraktSyncShowRatedEx.Season { Number = episode[DBOnlineEpisode.cSeasonIndex] }; // add a new episode collection to season object syncSeason.Episodes = new List<TraktSyncShowRatedEx.Season.Episode>(); // add season to the show syncShow.Seasons.Add(syncSeason); } // add episode to season syncSeason.Episodes.Add(new TraktSyncShowRatedEx.Season.Episode { Number = episode[DBOnlineEpisode.cEpisodeIndex], Rating = episode[DBOnlineEpisode.cMyRating], RatedAt = DateTime.UtcNow.ToISO8601() }); } } return syncRatedEpisodes; }
public static TraktSyncResponse AddShowsToRatingsEx(TraktSyncShowsRatedEx shows) { var response = PostToTrakt(TraktURIs.SyncRatingsAdd, shows.ToJSON()); return response.FromJSON<TraktSyncResponse>(); }
public static TraktSyncResponse RemoveShowsFromRatingsEx(TraktSyncShowsRatedEx shows) { var response = PostToTrakt(TraktURIs.SyncRatingsRemove, shows.ToJSON()); return response.FromJSON<TraktSyncResponse>(); }
/// <summary> /// Rate a single episode on trakt.tv (with show info) /// </summary> public static TraktSyncResponse AddEpisodeToRatingsEx(TraktSyncShowRatedEx item) { var episodes = new TraktSyncShowsRatedEx { Shows = new List<TraktSyncShowRatedEx>() { item } }; return AddShowsToRatingsEx(episodes); }
/// <summary> /// UnRate a single episode on trakt.tv (with show info) /// </summary> public static TraktSyncResponse RemoveEpisodeFromRatingsEx(TraktSyncShowRatedEx item) { var episodes = new TraktSyncShowsRatedEx { Shows = new List<TraktSyncShowRatedEx>() { item } }; return RemoveShowsFromRatingsEx(episodes); }