Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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;
        }