Example #1
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            JObject obj  = JObject.Load(reader);
            var     type = obj["Type"].Value <string>();

            if (string.IsNullOrEmpty(type))
            {
                throw new ArgumentException($"Cannot deserialized objects which don't have a 'Type'-property.");
            }

            BasePodcastModification mod = null;

            if (type == typeof(EpisodeDescriptionFilterModification).FullName)
            {
                mod = obj.ToObject <EpisodeDescriptionFilterModification>();
            }
            else if (type == typeof(EpisodeTitleFilterModification).FullName)
            {
                mod = obj.ToObject <EpisodeTitleFilterModification>();
            }
            else if (type == typeof(EpisodeDurationFilterModification).FullName)
            {
                mod = obj.ToObject <EpisodeDurationFilterModification>();
            }
            else if (type == typeof(EpisodePublishDateFilterModification).FullName)
            {
                mod = obj.ToObject <EpisodePublishDateFilterModification>();
            }
            else if (type == typeof(RemoveDuplicateEpisodesModification).FullName)
            {
                mod = obj.ToObject <RemoveDuplicateEpisodesModification>();
            }
            else
            {
                throw new ArgumentException($"Cannot deserialize objects with the Type '{type}'.");
            }

            return(mod);
        }
Example #2
0
        public static List <BaseDbParameter> FromModification(BasePodcastModification modification, ModificationDto dto)
        {
            List <BaseDbParameter> parameters = new List <BaseDbParameter>();

            if (modification is EpisodeDescriptionFilterModification description)
            {
                parameters.Add(new StringParameter(description.Argument, parameters.Count));
                parameters.Add(new StringFilterMethodParameter(description.Method, parameters.Count));
                parameters.Add(new BoolParameter(description.CaseInvariant, parameters.Count));
            }
            else if (modification is EpisodeDurationFilterModification duration)
            {
                parameters.Add(new DurationFilterMethodParameter(duration.Method, parameters.Count));
                parameters.Add(new LongParameter(duration.Duration, parameters.Count));
            }
            else if (modification is EpisodePublishDateFilterModification publish)
            {
                parameters.Add(new DateTimeParameter(publish.Date, parameters.Count));
                parameters.Add(new DateTimeFilterMethodParameter(publish.Method, parameters.Count));
            }
            else if (modification is EpisodeTitleFilterModification title)
            {
                parameters.Add(new StringParameter(title.Argument, parameters.Count));
                parameters.Add(new StringFilterMethodParameter(title.Method, parameters.Count));
                parameters.Add(new BoolParameter(title.CaseInvariant, parameters.Count));
            }
            else if (modification is RemoveDuplicateEpisodesModification remove)
            {
                parameters.Add(new BoolParameter(remove.KeepFirstEpisode, parameters.Count));
                parameters.Add(new RemoveDuplicateEpisodesMethodParameter(remove.TimeFrame, parameters.Count));
            }
            else
            {
                throw new ArgumentException($"The type {modification.GetType()} is not yet implemented.");
            }

            return(parameters);
        }
Example #3
0
 /// <summary>
 /// Constructor for regular use
 /// </summary>
 public ModificationDto(BasePodcastModification modification)
 {
     this.TypeName = modification.GetType().FullName;
     Parameters    = BaseDbParameter.FromModification(modification, this);
 }