no commit message

This commit is contained in:
niandeng
2020-09-17 18:40:01 +08:00
parent 4382915d09
commit d957abceaa
283 changed files with 86935 additions and 63 deletions
@@ -0,0 +1,76 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mangui.hls.utils {
import org.mangui.hls.HLSSettings;
import flash.utils.describeType;
import flash.utils.Dictionary;
import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedClassName;
/**
* Params2Settings is an helper class that holds every legal external params names
* which can be used to customize HLSSettings and maps them to the relevant HLSSettings values
*/
public class Params2Settings {
/**
* HLSSettings <-> params maping
*/
private static var _paramMap : Dictionary = new Dictionary();
// static initializer
{
_initParams();
}
/* build map between param name and HLSSettings property
this is done by enumerating properties : http://stackoverflow.com/questions/13294997/as3-iterating-through-class-variables
*/
private static function _initParams() : void {
var description:XML = describeType(HLSSettings);
var variables:XMLList = description..variable;
for each(var variable:XML in variables) {
var name : String = variable.@name;
var param : String;
if(name.indexOf("log") == 0) {
// loggers params don't need prefix
param = name.substr(3);
} else {
param = name;
}
// for historical (bad ?) reasons, param names are lowercase
param = param.toLowerCase();
_paramMap[param] = name;
}
}
public static function set(key : String, value : Object) : void {
var param : String = _paramMap[key];
if (param) {
// try to assign value with proper object type
try {
var cName : String = getQualifiedClassName(HLSSettings[param]);
// AS3 bug: "getDefinitionByName" considers var value, not type, and wrongly (e.g. 3.0 >> "int"; 3.1 >> "Number").
var c : Class = cName === "int" ? Number : getDefinitionByName(cName) as Class;
// only set booleans to true if the string actually is true, otherwise false
if(cName === "Boolean") {
HLSSettings[param] = String(value).toLowerCase() === "true";
} else { // Otherwise just cast it
HLSSettings[param] = c(value);
}
CONFIG::LOGGING {
Log.info("HLSSettings." + param + " = " + HLSSettings[param]);
}
} catch(error : Error) {
CONFIG::LOGGING {
Log.warn("Can't set HLSSettings." + param);
}
}
}
}
}
}