/// <summary> /// Add or remove a list of movies to/from the users trakt.tv library /// </summary> /// <param name="movies">The movies to add</param> /// <param name="traktUser">The user who's library is being updated</param> /// <param name="cancellationToken">The cancellation token.</param> /// <param name="eventType"></param> /// <returns>Task{TraktResponseDataContract}.</returns> public async Task <IEnumerable <TraktSyncResponse> > SendLibraryUpdateAsync(List <Movie> movies, TraktUser traktUser, CancellationToken cancellationToken, EventType eventType) { if (movies == null) { throw new ArgumentNullException("movies"); } if (traktUser == null) { throw new ArgumentNullException("traktUser"); } if (eventType == EventType.Update) { return(null); } var moviesPayload = movies.Select(m => { var audioStream = m.GetMediaStreams().FirstOrDefault(x => x.Type == MediaStreamType.Audio); var traktMovieCollected = new TraktMovieCollected { collected_at = m.DateCreated.ToISO8601(), title = m.Name, year = m.ProductionYear, ids = new TraktMovieId { imdb = m.GetProviderId(MetadataProviders.Imdb), tmdb = m.GetProviderId(MetadataProviders.Tmdb).ConvertToInt() } }; if (traktUser.ExportMediaInfo) { //traktMovieCollected.Is3D = m.Is3D; traktMovieCollected.audio_channels = audioStream.GetAudioChannels(); traktMovieCollected.audio = audioStream.GetCodecRepresetation(); traktMovieCollected.resolution = m.GetDefaultVideoStream().GetResolution(); } return(traktMovieCollected); }).ToList(); var url = eventType == EventType.Add ? TraktUris.SyncCollectionAdd : TraktUris.SyncCollectionRemove; var responses = new List <TraktSyncResponse>(); var chunks = moviesPayload.ToChunks(100); foreach (var chunk in chunks) { var data = new TraktSyncCollected { movies = chunk.ToList() }; using (var response = await PostToTrakt(url, data, cancellationToken, traktUser)) { responses.Add(_jsonSerializer.DeserializeFromStream <TraktSyncResponse>(response)); } } return(responses); }
/// <summary> /// Add or remove a list of movies to/from the users trakt.tv library /// </summary> /// <param name="movies">The movies to add</param> /// <param name="traktUser">The user who's library is being updated</param> /// <param name="cancellationToken">The cancellation token.</param> /// <param name="eventType"></param> /// <returns>Task{TraktResponseDataContract}.</returns> public async Task<IEnumerable<TraktSyncResponse>> SendLibraryUpdateAsync(List<Movie> movies, TraktUser traktUser, CancellationToken cancellationToken, EventType eventType) { if (movies == null) throw new ArgumentNullException("movies"); if (traktUser == null) throw new ArgumentNullException("traktUser"); if (eventType == EventType.Update) return null; var moviesPayload = movies.Select(m => { var audioStream = m.GetMediaStreams().FirstOrDefault(x => x.Type == MediaStreamType.Audio); var traktMovieCollected = new TraktMovieCollected { CollectedAt = m.DateCreated.ToISO8601(), Title = m.Name, Year = m.ProductionYear, Ids = new TraktMovieId { Imdb = m.GetProviderId(MetadataProviders.Imdb), Tmdb = m.GetProviderId(MetadataProviders.Tmdb).ConvertToInt() } }; if (traktUser.ExportMediaInfo) { traktMovieCollected.Is3D = m.Is3D; traktMovieCollected.AudioChannels = audioStream.GetAudioChannels(); traktMovieCollected.Audio = audioStream.GetCodecRepresetation(); traktMovieCollected.Resolution = m.GetDefaultVideoStream().GetResolution(); } return traktMovieCollected; }).ToList(); var url = eventType == EventType.Add ? TraktUris.SyncCollectionAdd : TraktUris.SyncCollectionRemove; var responses = new List<TraktSyncResponse>(); var chunks = moviesPayload.ToChunks(100); foreach (var chunk in chunks) { var data = new TraktSyncCollected { Movies = chunk.ToList() }; var response = await PostToTrakt(url, data, cancellationToken, traktUser); responses.Add(_jsonSerializer.DeserializeFromStream<TraktSyncResponse>(response)); } return responses; }