0)
{
var resourceHandlerDescriptor:ResourceHandlerDescriptor
= resourceHandlers.getItemAt(0) as ResourceHandlerDescriptor;
resourceHandlerId.label = resourceHandlerDescriptor.mediaInfoId;
resourceHandlerPriority.text = new Number(resourceHandlerDescriptor.priority).toString();
resourceHandlerList.selectedIndex = 0;
}
resourceHandlerId.visible = update.visible = (resourceHandlers.length > 0);
}
private function onLoadStateChange(event:LoadEvent):void
{
if (event.loadState == LoadState.LOAD_ERROR)
{
Alert.show("Failed to load resource");
}
}
private function onUpdateClicked(event:MouseEvent):void
{
Model.getInstance().updatePriorityByMediaInfoId(
resourceHandlerId.label, int(resourceHandlerPriority.text));
refreshResourceHandlerList();
}
private function onItemClick(event:ListEvent):void
{
var resourceHandlers:ArrayCollection = Model.getInstance().resourceHandlers;
var resourceHandlerDescriptor:ResourceHandlerDescriptor
= resourceHandlers.getItemAt(resourceHandlerList.selectedIndex) as ResourceHandlerDescriptor;
resourceHandlerId.label = resourceHandlerDescriptor.mediaInfoId;
resourceHandlerPriority.text = new Number(resourceHandlerDescriptor.priority).toString();
}
private function loadItem(url:String):void
{
wrapper.mediaPlayer.autoPlay = true;
var resource:URLResource = new URLResource(new URL(url));
var mediaElement:MediaElement
= Model.getInstance().mediaFactory.createMediaElement(resource);
if (mediaElement == null)
{
Alert.show("No registered MediaInfo for this resource");
}
else
{
wrapper.element = mediaElement;
if (mediaElement is VideoElement ||
mediaElement is AudioElement ||
mediaElement is ContentElement)
{
var downloadable:IDownloadable = mediaElement.getTrait(MediaTraitType.DOWNLOADABLE) as IDownloadable;
if (downloadable != null)
{
_timer.start();
}
else
{
mediaElement.addEventListener(MediaElementEvent.TRAIT_ADD, onTraitAdd);
}
}
}
}
private function onTimer(event:TimerEvent):void
{
var downloadable:IDownloadable
= wrapper.element.getTrait(MediaTraitType.DOWNLOADABLE) as IDownloadable;
bytesLoaded.text = downloadable.bytesLoaded.toString();
bytesTotal.text = downloadable.bytesTotal.toString();
if (downloadable.bytesLoaded == downloadable.bytesTotal)
{
_timer.stop();
}
}
private function onTraitAdd(event:MediaElementEvent):void
{
if (event.traitType == MediaTraitType.DOWNLOADABLE)
{
var mediaElement:MediaElement = event.target as MediaElement;
if (mediaElement != null)
{
var downloadable:IDownloadable = mediaElement.getTrait(MediaTraitType.DOWNLOADABLE) as IDownloadable;
if (downloadable != null)
{
_timer.start();
}
}
}
}
private function loadPlugin(source:String):void
{
var pluginResource:IMediaResource;
if (source.substr(0, 4) == "http" || source.substr(0, 4) == "file")
{
// Create a URLResource if the source is URL based
pluginResource = new URLResource(new URL(source));
}
else
{
// Assume the source is a class
var pluginInfoRef:Class = flash.utils.getDefinitionByName(source) as Class;
pluginResource = new PluginClassResource(pluginInfoRef);
}
loadPluginFromResource(pluginResource);
}
private function loadPluginFromResource(pluginResource:IMediaResource):void
{
var model:Model = Model.getInstance();
model.pluginManager.addEventListener(PluginLoadEvent.PLUGIN_LOADED, onPluginLoaded);
model.pluginManager.addEventListener(PluginLoadEvent.PLUGIN_LOAD_FAILED, onPluginLoadFailed);
model.pluginManager.addEventListener(MediaErrorEvent.MEDIA_ERROR, onMediaError);
model.pluginManager.loadPlugin(pluginResource);
}
private function onMediaError(event:MediaErrorEvent):void
{
Alert.show("media error");
}
private function onPluginLoaded(event:PluginLoadEvent):void
{
if (_logger != null && _logger.debugEnabled)
{
_logger.debug("Plugin Loaded Successfully");
}
pluginLoadState.text = "LOADED";
pluginLoadState.visible = true;
Model.getInstance().updateResourceHandlers();
refreshResourceHandlerList();
}
private function onPluginLoadFailed(event:PluginLoadEvent):void
{
if (_logger != null && _logger.debugEnabled)
{
_logger.debug("Plugin Loading Failed");
}
pluginLoadState.text = "LOAD FAILED!";
pluginLoadState.visible = true;
}
private var pluginElement:MediaElement;
private var loadable:ILoadable;
private var _logger:ILogger;
private var _timer:Timer;
]]>