public override async Task <IEnumerable <ITraktEpisodeIds> > ReadArrayAsync(JsonTextReader jsonReader, CancellationToken cancellationToken = default)
        {
            if (jsonReader == null)
            {
                return(await Task.FromResult(default(IEnumerable <ITraktEpisodeIds>)));
            }

            if (await jsonReader.ReadAsync(cancellationToken) && jsonReader.TokenType == JsonToken.StartArray)
            {
                var episodeIdsReader        = new EpisodeIdsObjectJsonReader();
                var episodeIdss             = new List <ITraktEpisodeIds>();
                ITraktEpisodeIds episodeIds = await episodeIdsReader.ReadObjectAsync(jsonReader, cancellationToken);

                while (episodeIds != null)
                {
                    episodeIdss.Add(episodeIds);
                    episodeIds = await episodeIdsReader.ReadObjectAsync(jsonReader, cancellationToken);
                }

                return(episodeIdss);
            }

            return(await Task.FromResult(default(IEnumerable <ITraktEpisodeIds>)));
        }
Example #2
0
        public override async Task <ITraktEpisode> ReadObjectAsync(JsonTextReader jsonReader, CancellationToken cancellationToken = default)
        {
            if (jsonReader == null)
            {
                return(await Task.FromResult(default(ITraktEpisode)));
            }

            if (await jsonReader.ReadAsync(cancellationToken) && jsonReader.TokenType == JsonToken.StartObject)
            {
                var           idsObjectReader        = new EpisodeIdsObjectJsonReader();
                var           translationArrayReader = new EpisodeTranslationArrayJsonReader();
                ITraktEpisode traktEpisode           = new TraktEpisode();

                while (await jsonReader.ReadAsync(cancellationToken) && jsonReader.TokenType == JsonToken.PropertyName)
                {
                    var propertyName = jsonReader.Value.ToString();

                    switch (propertyName)
                    {
                    case JsonProperties.EPISODE_PROPERTY_NAME_SEASON_NUMBER:
                        traktEpisode.SeasonNumber = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    case JsonProperties.EPISODE_PROPERTY_NAME_NUMBER:
                        traktEpisode.Number = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    case JsonProperties.EPISODE_PROPERTY_NAME_TITLE:
                        traktEpisode.Title = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.EPISODE_PROPERTY_NAME_IDS:
                        traktEpisode.Ids = await idsObjectReader.ReadObjectAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.EPISODE_PROPERTY_NAME_NUMBER_ABSOLUTE:
                        traktEpisode.NumberAbsolute = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    case JsonProperties.EPISODE_PROPERTY_NAME_OVERVIEW:
                        traktEpisode.Overview = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.EPISODE_PROPERTY_NAME_RUNTIME:
                        traktEpisode.Runtime = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    case JsonProperties.EPISODE_PROPERTY_NAME_RATING:
                        traktEpisode.Rating = (float?)await jsonReader.ReadAsDoubleAsync(cancellationToken);

                        break;

                    case JsonProperties.EPISODE_PROPERTY_NAME_VOTES:
                        traktEpisode.Votes = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    case JsonProperties.EPISODE_PROPERTY_NAME_FIRST_AIRED:
                    {
                        var value = await JsonReaderHelper.ReadDateTimeValueAsync(jsonReader, cancellationToken);

                        if (value.First)
                        {
                            traktEpisode.FirstAired = value.Second;
                        }

                        break;
                    }

                    case JsonProperties.EPISODE_PROPERTY_NAME_UPDATED_AT:
                    {
                        var value = await JsonReaderHelper.ReadDateTimeValueAsync(jsonReader, cancellationToken);

                        if (value.First)
                        {
                            traktEpisode.UpdatedAt = value.Second;
                        }

                        break;
                    }

                    case JsonProperties.EPISODE_PROPERTY_NAME_AVAILABLE_TRANSLATIONS:
                        traktEpisode.AvailableTranslationLanguageCodes = await JsonReaderHelper.ReadStringArrayAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.EPISODE_PROPERTY_NAME_TRANSLATIONS:
                        traktEpisode.Translations = await translationArrayReader.ReadArrayAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.EPISODE_PROPERTY_NAME_COMMENT_COUNT:
                        traktEpisode.CommentCount = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    default:
                        await JsonReaderHelper.ReadAndIgnoreInvalidContentAsync(jsonReader, cancellationToken);

                        break;
                    }
                }

                return(traktEpisode);
            }

            return(await Task.FromResult(default(ITraktEpisode)));
        }