Example #1
0
 public YdlArgumentSerializer() : base()
 {
     // Register translator for the ByteSize struct, outputs the total bytes.
     ValueTranslators.Add(typeof(ByteSize), (a, t, v) => {
         double bytes = ((ByteSize)v).Bytes;
         return(bytes == 0 ? "0" : bytes.ToString("#.#"));
     });
 }
Example #2
0
        public YoutubeDLApi(string executable, YoutubeDLArguments arguments = null) : base(executable, arguments)
        {
            ValueTranslators.Add(typeof(DateTime), (a, t, v) => {
                return(((DateTime)v).ToString("yyyyMMdd"));
            });

            ValueTranslators.Add(typeof(ByteSize), (a, t, v) => {
                return(((ByteSize)v).Bytes.ToString("#.#"));
            });

            AppendCheckers.Add(typeof(Dictionary <string, string>), (a, t, v) => {
                return(((Dictionary <string, string>)v).Count > 0);
            });
        }
Example #3
0
        public virtual string TranslateFlagValue(Argument argument, Type type, object value)
        {
            if (value == null)
            {
                return(string.Empty);
            }

            Type typeKey = type.IsEnum ? typeof(Enum) : type;

            if (ValueTranslators.TryGetValue(typeKey, out Func <Argument, Type, object, string> translator))
            {
                return(translator(argument, type, value));
            }
            return(value.ToString());
        }
Example #4
0
        protected void SetDefaults(bool clear = true)
        {
            if (clear)
            {
                ValueTranslators.Clear();
                Builders.Clear();
                AppendCheckers.Clear();
                PreAppendChecker = null;
            }

            // Translates string properties to string... duh!
            ValueTranslators.Add(typeof(string), (a, t, v) => v.ToString());

            // Translates enum properties to string by using the name representing the enum value.
            ValueTranslators.Add(typeof(Enum), (a, t, v) => {
                string name = Enum.GetName(t, v);
                return(a.EnumCase == EnumCasePolicy.LOWERCASE ? name.ToLower() : a.EnumCase == EnumCasePolicy.UPPERCASE ? name.ToUpper() : name);
            });

            // Only append flag if value isn't null. This is checked before any other registered append checkers.
            PreAppendChecker = (a, t, v) => v != null;

            // Only append boolean flags if the value is true.
            AppendCheckers.Add(typeof(bool), (a, t, v) => (bool)v); // Add bool flags if value isnt false.

            // Custom builder for string -> string dictionaries repeatedly adds flag with key-value pair seperated by colon.
            Builders.Add(typeof(Dictionary <string, string>), (a, t, v) => {
                string builtFlag = string.Empty;
                int count        = 0;

                Dictionary <string, string> dic = (Dictionary <string, string>)v;
                foreach (KeyValuePair <string, string> entry in dic)
                {
                    string value = string.Format("{0}:{1}", entry.Key, entry.Value);
                    value        = QuoteFlagValue(a.QuotePolicy, value);

                    builtFlag += string.Format("{0}{1} ", (dic.Count > 1 && count > 0) ? (a.Flag + " ") : string.Empty, value);
                    count++;
                }

                if (dic.Count > 0)
                {
                    builtFlag = builtFlag.Remove(builtFlag.Length - 1, 1);
                }

                return(a.Template.Replace("{flag}", a.Flag).Replace("{value}", builtFlag));
            });
        }
Example #5
0
        /// <summary>
        /// Sets this <see cref="CommandLineBuilder"/> to its default settings.
        /// </summary>
        public virtual void SetDefaults()
        {
            ValueTranslators.Clear();
            Builders.Clear();
            SerializationCheckers.Clear();

            ArgumentSeperator = " ";
            Seperator         = " ";

            // Only serialize flag if value isn't null. This is called before any other registered serialization checkers.
            CommonSerializationChecker = (a, t, v) => v != null;

            // Only serialize boolean flags if the value is true.
            SerializationCheckers.Add(typeof(bool), (a, t, v) => (bool)v); // Serialize boolean flags if value isn't false.

            // Only serialize dictionaries if they contain items.
            SerializationCheckers.Add(typeof(Dictionary <string, string>), (a, t, v) => ((Dictionary <string, string>)v).Count > 0);

            // Translates string properties to string... duh!
            ValueTranslators.Add(typeof(string), (a, t, v) => v.ToString());

            // Translate DateTime objects to the format of "yyyyMMdd".
            ValueTranslators.Add(typeof(DateTime), (a, t, v) => ((DateTime)v).ToString("yyyyMMdd"));

            // Translates enum properties to string by using the name representing the enum value.
            ValueTranslators.Add(typeof(Enum), (a, t, v) => {
                string name = Enum.GetName(t, v);

                switch (a.EnumCase)
                {
                case EnumCasePolicy.Lowercase:
                    return(name.ToLower());

                case EnumCasePolicy.Uppercase:
                    return(name.ToUpper());

                case EnumCasePolicy.Default:
                default:
                    return(name);
                }
            });


            // Custom builder for string -> string dictionaries repeatedly adds flag with key-value pair seperated by colon.
            Builders.Add(typeof(Dictionary <string, string>), (argument, type, value) => {
                Dictionary <string, string> dictionary = (Dictionary <string, string>)value;
                if (dictionary.Count == 0)
                {
                    return(null); // Returning null for a builder, or value translator ignores this argument.
                }
                StringBuilder sb = new StringBuilder();

                foreach (KeyValuePair <string, string> entry in dictionary)
                {
                    sb.Append(BuildFlag(argument, string.Format("{0}:{1}", entry.Key, entry.Value))).Append(ArgumentSeperator);
                }

                if (dictionary.Count > 1)
                {
                    sb.Remove(sb.Length - ArgumentSeperator.Length, ArgumentSeperator.Length);
                }

                return(sb.ToString());
            });
        }