private ITraktSyncHistoryPost GetWatchedShowsForSync(IList <MediaItem> localWatchedEpisodes, IEnumerable <EpisodeWatched> traktEpisodesWatched) { _mediaPortalServices.GetLogger().Info("Trakt: finding local shows to add to trakt watched history"); TraktSyncHistoryPostBuilder builder = new TraktSyncHistoryPostBuilder(); ILookup <string, EpisodeWatched> onlineEpisodes = traktEpisodesWatched.ToLookup(twe => CreateLookupKey(twe), twe => twe); foreach (var episode in localWatchedEpisodes) { string tvdbKey = CreateLookupKey(episode); EpisodeWatched traktEpisode = onlineEpisodes[tvdbKey].FirstOrDefault(); if (traktEpisode == null) { TraktShow show = new TraktShow { Title = MediaItemAspectsUtl.GetSeriesTitle(episode), Ids = new TraktShowIds { Tvdb = MediaItemAspectsUtl.GetTvdbId(episode), Imdb = MediaItemAspectsUtl.GetSeriesImdbId(episode) } }; DateTime watchedAt = MediaItemAspectsUtl.GetLastPlayedDate(episode); builder.AddShow(show, new PostHistorySeasons { { MediaItemAspectsUtl.GetSeasonIndex(episode), new PostHistoryEpisodes { { MediaItemAspectsUtl.GetEpisodeIndex(episode), watchedAt } } } }); } } return(builder.Build()); }
private async Task MigrateMovies(PlexClient _plexClient, TraktClient _traktClient) { await ReportProgress("--------------------------------------------"); await ReportProgress("Started syncing Movies!"); await ReportProgress("--------------------------------------------"); await ReportProgress("Importing Trakt movies.."); var traktMovies = (await _traktClient.Sync.GetWatchedMoviesAsync(new TraktExtendedInfo().SetFull())).ToArray(); await ReportProgress($"Found {traktMovies.Length} movies on Trakt"); await ReportProgress("Importing Plex movies.."); var plexMovies = await _plexClient.GetMovies(); await ReportProgress($"Found {plexMovies.Length} movies on Plex"); await ReportProgress("Going through all movies on Plex, to see if we find a match on Trakt.."); var i = 0; var notMarkedMovies = new List <Movie>(); foreach (var plexMovie in plexMovies.Where(x => x.ViewCount != null && x.ViewCount > 0)) { i++; var traktMovie = traktMovies.FirstOrDefault(x => HasMatchingIdMovies(plexMovie, x.Ids)); if (traktMovie == null) { notMarkedMovies.Add(plexMovie); } } var traktSyncHistoryPostMovies = new TraktSyncHistoryPostBuilder(); foreach (var notMarkedMovie in notMarkedMovies) { if (notMarkedMovie.ImdbId == null) { await ReportProgress($"{notMarkedMovie.Title} doesnt have an IMDB. SKIPPING!"); } else { Debug.Assert(notMarkedMovie.LastViewedAtDateTime != null, "notMarkedMovie.LastViewedAtDateTime != null"); traktSyncHistoryPostMovies.AddMovie(new TraktMovie() { Title = notMarkedMovie.Title , Year = (int?)notMarkedMovie.Year , Ids = new TraktMovieIds() { Imdb = notMarkedMovie.ImdbId } }, (DateTime)notMarkedMovie.LastViewedAtDateTime); } } var payload = traktSyncHistoryPostMovies.Build(); if (payload.Movies != null) { await _traktClient.Sync.AddWatchedHistoryItemsAsync(payload); } await ReportProgress("--------------------------------------------"); await ReportProgress("Finished syncing Movies!"); await ReportProgress("--------------------------------------------"); }