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; ]]>