public void ImportRatings() { ImportCancelled = false; List <Dictionary <string, string> > watchedMovies = new List <Dictionary <string, string> >(); UIUtils.UpdateStatus("Reading IMDb ratings export..."); if (!ParseCSVFile(CSVFile)) { UIUtils.UpdateStatus("Failed to parse IMDb ratings file!", true); Thread.Sleep(2000); return; } if (ImportCancelled) { return; } // IMDb does not return the season and episode number for TV Episodes // so we should filter down to TV Shows and Movies only #region Movies var movies = RateItems.Where(r => r[IMDbFieldMapping.cType].ItemType() == IMDbType.Movie); if (movies.Count() > 0) { UIUtils.UpdateStatus(string.Format("Importing {0} movie ratings to trakt.tv.", movies.Count())); TraktRatingsResponse response = TraktAPI.TraktAPI.RateMovies(GetRateMoviesData(movies)); if (response == null || response.Status != "success") { UIUtils.UpdateStatus("Error importing movie ratings to trakt.tv.", true); Thread.Sleep(2000); } // add to list of movies to mark as watched watchedMovies.AddRange(movies); } if (ImportCancelled) { return; } #endregion #region TV Shows var shows = RateItems.Where(r => r[IMDbFieldMapping.cType].ItemType() == IMDbType.Show); if (shows.Count() > 0) { UIUtils.UpdateStatus(string.Format("Importing {0} show ratings to trakt.tv.", shows.Count())); TraktRatingsResponse response = TraktAPI.TraktAPI.RateShows(GetRateShowsData(shows)); if (response == null || response.Status != "success") { UIUtils.UpdateStatus("Error importing show ratings to trakt.tv.", true); Thread.Sleep(2000); } } if (ImportCancelled) { return; } #endregion #region Episodes var episodes = RateItems.Where(r => r[IMDbFieldMapping.cType].ItemType() == IMDbType.Episode); TraktRateEpisodes episodesRated = null; if (episodes.Count() > 0) { UIUtils.UpdateStatus(string.Format("Importing {0} episode ratings to trakt.tv.", episodes.Count())); episodesRated = GetRateEpisodeData(episodes); TraktRatingsResponse response = TraktAPI.TraktAPI.RateEpisodes(episodesRated); if (response == null || response.Status != "success") { UIUtils.UpdateStatus("Error importing episodes ratings to trakt.tv.", true); Thread.Sleep(2000); } } if (ImportCancelled) { return; } #endregion #region Mark as Watched #region Movies if (AppSettings.MarkAsWatched && watchedMovies.Count > 0) { // mark all movies as watched if rated UIUtils.UpdateStatus(string.Format("Importing {0} IMDb Movies as Watched...", watchedMovies.Count)); TraktMovieSyncResponse watchedMoviesResponse = TraktAPI.TraktAPI.SyncMovieLibrary(GetWatchedMoviesData(watchedMovies), TraktSyncModes.seen); if (watchedMoviesResponse == null || watchedMoviesResponse.Status != "success") { UIUtils.UpdateStatus("Failed to send watched status for IMDb movies.", true); Thread.Sleep(2000); if (ImportCancelled) { return; } } } #endregion #region Episodes if (AppSettings.MarkAsWatched && episodesRated.Episodes.Count() > 0) { // mark all episodes as watched if rated UIUtils.UpdateStatus(string.Format("Importing {0} IMDb Episodes as Watched...", episodesRated.Episodes.Count)); var watchedEpisodes = GetWatchedEpisodeData(episodesRated.Episodes); foreach (var showSyncData in watchedEpisodes) { if (ImportCancelled) { return; } // send the episodes from each show as watched UIUtils.UpdateStatus(string.Format("Importing {0} episodes of {1} as watched...", showSyncData.EpisodeList.Count(), showSyncData.Title)); var watchedEpisodesResponse = TraktAPI.TraktAPI.SyncEpisodeLibrary(showSyncData, TraktSyncModes.seen); if (watchedEpisodesResponse == null || watchedEpisodesResponse.Status != "success") { UIUtils.UpdateStatus(string.Format("Failed to send watched status for IMDb '{0}' episodes.", showSyncData.Title), true); Thread.Sleep(2000); continue; } } } #endregion #endregion return; }
public void ImportRatings() { ImportCancelled = false; // get show userratings from theTVDb.com first UIUtils.UpdateStatus("Getting show ratings from theTVDb.com."); TVDbShowRatings showRatings = TVDbAPI.GetShowRatings(AccountId); // if there are no show ratings quit if (showRatings == null || showRatings.Shows.Count == 0) { UIUtils.UpdateStatus("Unable to get list of shows from thetvdb.com.", true); return; } #region Import Show Ratings if (ImportCancelled) { return; } UIUtils.UpdateStatus(string.Format("Importing {0} show ratings to trakt.tv.", showRatings.Shows.Count)); TraktRatingsResponse response = TraktAPI.TraktAPI.RateShows(GetRateShowsData(showRatings)); if (response == null || response.Status != "success") { UIUtils.UpdateStatus("Error importing show ratings to trakt.tv.", true); Thread.Sleep(2000); } #endregion #region Import Episode Ratings int iCounter = 0; List <TraktEpisode> episodesRated = new List <TraktEpisode>(); foreach (var show in showRatings.Shows) { if (ImportCancelled) { return; } iCounter++; UIUtils.UpdateStatus(string.Format("[{0}/{1}] Getting show info for series id {2}", iCounter, showRatings.Shows.Count, show.Id)); // we need to get the episode/season numbers as trakt api requires this // tvdb only returns episode ids, so user series info call to this info TVDbShow showInfo = TVDbAPI.GetShowInfo(show.Id.ToString()); if (showInfo == null) { UIUtils.UpdateStatus(string.Format("Unable to show info for series id: {0}", show.Id), true); Thread.Sleep(2000); continue; } if (ImportCancelled) { return; } UIUtils.UpdateStatus(string.Format("[{0}/{1}] Requesting episode ratings for {2}", iCounter, showRatings.Shows.Count, showInfo.Show.Name)); // get episode ratings for each show in showratings TVDbEpisodeRatings episodeRatings = TVDbAPI.GetEpisodeRatings(AccountId, show.Id.ToString()); if (episodeRatings == null) { UIUtils.UpdateStatus(string.Format("Unable to get episode ratings for {0}", showInfo.Show.Name), true); Thread.Sleep(2000); continue; } if (ImportCancelled) { return; } UIUtils.UpdateStatus(string.Format("[{0}/{1}] Importing {2} episode ratings for {3}", iCounter, showRatings.Shows.Count, episodeRatings.Episodes.Count, showInfo.Show.Name)); if (episodeRatings.Episodes.Count == 0) { continue; } // submit one series at a time var episodesToRate = GetRateEpisodeData(episodeRatings, showInfo); response = TraktAPI.TraktAPI.RateEpisodes(episodesToRate); if (response == null || response.Status != "success") { UIUtils.UpdateStatus(string.Format("Error importing {0} episode ratings to trakt.tv.", showInfo.Show.Name), true); Thread.Sleep(2000); continue; } episodesRated.AddRange(episodesToRate.Episodes); } #endregion #region Mark As Watched if (AppSettings.MarkAsWatched && episodesRated.Count() > 0) { // mark all episodes as watched if rated UIUtils.UpdateStatus(string.Format("Importing {0} TVDb Episodes as Watched...", episodesRated.Count())); var watchedEpisodes = GetWatchedEpisodeData(episodesRated); foreach (var showSyncData in watchedEpisodes) { if (ImportCancelled) { return; } // send the episodes from each show as watched UIUtils.UpdateStatus(string.Format("Importing {0} episodes of {1} as watched...", showSyncData.EpisodeList.Count(), showSyncData.Title)); var watchedEpisodesResponse = TraktAPI.TraktAPI.SyncEpisodeLibrary(showSyncData, TraktSyncModes.seen); if (watchedEpisodesResponse == null || watchedEpisodesResponse.Status != "success") { UIUtils.UpdateStatus(string.Format("Failed to send watched status for TVDb '{0}' episodes.", showSyncData.Title), true); Thread.Sleep(2000); continue; } } } #endregion return; }