no commit message
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user