loader: fixes
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package haxework.net;
|
package haxework.net;
|
||||||
|
|
||||||
|
import haxe.Timer;
|
||||||
import flash.net.URLRequestMethod;
|
import flash.net.URLRequestMethod;
|
||||||
import flash.events.ProgressEvent;
|
import flash.events.ProgressEvent;
|
||||||
import haxework.net.manage.ILoaderManager;
|
import haxework.net.manage.ILoaderManager;
|
||||||
@@ -18,6 +19,7 @@ class BaseLoader<T> implements ILoader<T> {
|
|||||||
public static function prepareUrl(url:String):String { for (p in urlProcessors) url = p(url); return url; }
|
public static function prepareUrl(url:String):String { for (p in urlProcessors) url = p(url); return url; }
|
||||||
|
|
||||||
|
|
||||||
|
public var timeout(default, default):Int;
|
||||||
public var busy(default, null):Bool;
|
public var busy(default, null):Bool;
|
||||||
public var completed(default, null):Float;
|
public var completed(default, null):Float;
|
||||||
|
|
||||||
@@ -25,8 +27,10 @@ class BaseLoader<T> implements ILoader<T> {
|
|||||||
private var method:String;
|
private var method:String;
|
||||||
private var data:Null<Dynamic>;
|
private var data:Null<Dynamic>;
|
||||||
private var callback:ICallback<T>;
|
private var callback:ICallback<T>;
|
||||||
|
private var timer:Timer;
|
||||||
|
|
||||||
public function new() {
|
public function new(?timeout = 0) {
|
||||||
|
this.timeout = timeout;
|
||||||
busy = false;
|
busy = false;
|
||||||
completed = Math.NaN;
|
completed = Math.NaN;
|
||||||
}
|
}
|
||||||
@@ -42,6 +46,10 @@ class BaseLoader<T> implements ILoader<T> {
|
|||||||
//L.d(TAG, "Request: " + prepareUrl(url));
|
//L.d(TAG, "Request: " + prepareUrl(url));
|
||||||
//internalRequest(prepareUrl(url));
|
//internalRequest(prepareUrl(url));
|
||||||
Provider.get(ILoaderManager).add(this);
|
Provider.get(ILoaderManager).add(this);
|
||||||
|
if (timeout > 0) {
|
||||||
|
timer = new Timer(timeout);
|
||||||
|
timer.run = callTimeout;
|
||||||
|
}
|
||||||
return callback;
|
return callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,10 +96,12 @@ class BaseLoader<T> implements ILoader<T> {
|
|||||||
|
|
||||||
private function onComplete(e:Event):Void {
|
private function onComplete(e:Event):Void {
|
||||||
var data:T = extrudeResult(e);
|
var data:T = extrudeResult(e);
|
||||||
|
if (data != null) {
|
||||||
var c:ICallback<T> = callback;
|
var c:ICallback<T> = callback;
|
||||||
dispose();
|
dispose();
|
||||||
c.callSuccess(data);
|
c.callSuccess(data);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private function onError(e:Event):Void {
|
private function onError(e:Event):Void {
|
||||||
var c:ICallback<T> = callback;
|
var c:ICallback<T> = callback;
|
||||||
@@ -99,12 +109,23 @@ class BaseLoader<T> implements ILoader<T> {
|
|||||||
c.callFail(e);
|
c.callFail(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function callTimeout():Void {
|
||||||
|
var c:ICallback<T> = callback;
|
||||||
|
var error:String = "Timeout for: " + url;
|
||||||
|
dispose();
|
||||||
|
c.callFail(error);
|
||||||
|
}
|
||||||
|
|
||||||
private function extrudeResult(e:Event):T {
|
private function extrudeResult(e:Event):T {
|
||||||
throw "Abstract";
|
throw "Abstract";
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function dispose():Void {
|
private function dispose():Void {
|
||||||
|
if (timer != null) {
|
||||||
|
timer.stop();
|
||||||
|
timer = null;
|
||||||
|
}
|
||||||
url = null;
|
url = null;
|
||||||
data = null;
|
data = null;
|
||||||
callback = null;
|
callback = null;
|
||||||
|
|||||||
@@ -22,8 +22,9 @@ class BaseMediaLoader<T> extends BaseLoader<T> {
|
|||||||
|
|
||||||
private var loader:Loader;
|
private var loader:Loader;
|
||||||
|
|
||||||
//ToDo: if storage use
|
//ToDo: if storage use and local domen
|
||||||
override public function GET(url:String, data:Dynamic = null):ICallback<T> {
|
//exclude youtube player
|
||||||
|
/*override public function GET(url:String, data:Dynamic = null):ICallback<T> {
|
||||||
var storage:IStorage = Provider.get(IStorage);
|
var storage:IStorage = Provider.get(IStorage);
|
||||||
return if (storage.exists(url)) {
|
return if (storage.exists(url)) {
|
||||||
fromBytes(storage.read(url));
|
fromBytes(storage.read(url));
|
||||||
@@ -37,7 +38,7 @@ class BaseMediaLoader<T> extends BaseLoader<T> {
|
|||||||
.fail(callback.callFail);
|
.fail(callback.callFail);
|
||||||
callback;
|
callback;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
override private function internalRequest(url:String):Void {
|
override private function internalRequest(url:String):Void {
|
||||||
loader = buildLoader();
|
loader = buildLoader();
|
||||||
@@ -81,6 +82,7 @@ class BaseMediaLoader<T> extends BaseLoader<T> {
|
|||||||
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onError);
|
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onError);
|
||||||
loader.contentLoaderInfo.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
|
loader.contentLoaderInfo.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
|
||||||
loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);
|
loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);
|
||||||
|
try { loader.close(); } catch (error:Dynamic) {}
|
||||||
loader = null;
|
loader = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ class BaseURLLoader<T> extends BaseLoader<T> {
|
|||||||
loader.removeEventListener(IOErrorEvent.IO_ERROR, onError);
|
loader.removeEventListener(IOErrorEvent.IO_ERROR, onError);
|
||||||
loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
|
loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
|
||||||
loader.removeEventListener(ProgressEvent.PROGRESS, onProgress);
|
loader.removeEventListener(ProgressEvent.PROGRESS, onProgress);
|
||||||
|
try { loader.close(); } catch (error:Dynamic) {}
|
||||||
loader = null;
|
loader = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
57
haxework/net/ExternalImageLoader.hx
Executable file
57
haxework/net/ExternalImageLoader.hx
Executable file
@@ -0,0 +1,57 @@
|
|||||||
|
package haxework.net;
|
||||||
|
|
||||||
|
import haxework.net.callback.ICallback;
|
||||||
|
import flash.system.Security;
|
||||||
|
import flash.utils.ByteArray;
|
||||||
|
import flash.display.LoaderInfo;
|
||||||
|
import flash.display.Loader;
|
||||||
|
import flash.display.Bitmap;
|
||||||
|
import flash.events.Event;
|
||||||
|
import flash.display.BitmapData;
|
||||||
|
|
||||||
|
class ExternalImageLoader extends BaseMediaLoader<BitmapData> {
|
||||||
|
|
||||||
|
private var internalLoader:InternalLoader;
|
||||||
|
|
||||||
|
override private function extrudeResult(e:Event):BitmapData {
|
||||||
|
var loader:Loader = cast(e.currentTarget, LoaderInfo).loader;
|
||||||
|
if (Security.sandboxType == Security.APPLICATION) {
|
||||||
|
var content:Bitmap = cast(loader.content,Bitmap);
|
||||||
|
return content.bitmapData;
|
||||||
|
} else {
|
||||||
|
internalLoader = new InternalLoader();
|
||||||
|
internalLoader.fromBytes(loader.contentLoaderInfo.bytes)
|
||||||
|
.success(function(data:BitmapData):Void {
|
||||||
|
var c:ICallback<BitmapData> = callback;
|
||||||
|
dispose();
|
||||||
|
c.callSuccess(data);
|
||||||
|
})
|
||||||
|
.fail(function(error:Dynamic):Void {
|
||||||
|
var c:ICallback<BitmapData> = callback;
|
||||||
|
dispose();
|
||||||
|
c.callFail(e);
|
||||||
|
});
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override public function dispose():Void {
|
||||||
|
super.dispose();
|
||||||
|
if (internalLoader != null) {
|
||||||
|
internalLoader.dispose();
|
||||||
|
internalLoader = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class InternalLoader extends BaseMediaLoader<BitmapData> {
|
||||||
|
|
||||||
|
override private function extrudeResult(e:Event):BitmapData {
|
||||||
|
var loader:Loader = cast(e.currentTarget, LoaderInfo).loader;
|
||||||
|
var bitmapData:BitmapData = new BitmapData(Math.round(loader.width), Math.round(loader.height), true, 0x00000000);
|
||||||
|
bitmapData.draw(loader);
|
||||||
|
loader.unloadAndStop();
|
||||||
|
return bitmapData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -4,6 +4,7 @@ import flash.utils.ByteArray;
|
|||||||
import haxework.net.callback.ICallback;
|
import haxework.net.callback.ICallback;
|
||||||
|
|
||||||
interface ILoader<T> {
|
interface ILoader<T> {
|
||||||
|
public var timeout(default, default):Int;
|
||||||
public var busy(default, null):Bool;
|
public var busy(default, null):Bool;
|
||||||
public var completed(default, null):Float;
|
public var completed(default, null):Float;
|
||||||
|
|
||||||
|
|||||||
@@ -82,7 +82,9 @@ class OrderSupplier implements IOrderSupplier {
|
|||||||
private function buildLoader<T>(clazz:Class<T>):ILoader<T> {
|
private function buildLoader<T>(clazz:Class<T>):ILoader<T> {
|
||||||
var c:Class<Dynamic> = clazz;
|
var c:Class<Dynamic> = clazz;
|
||||||
return if (c == BitmapData) {
|
return if (c == BitmapData) {
|
||||||
untyped new ImageLoader();
|
var loader:ILoader<T> = untyped new ExternalImageLoader();
|
||||||
|
loader.timeout = 5000; //ToDo: hardcode timeout for loading images
|
||||||
|
loader;
|
||||||
} else {
|
} else {
|
||||||
throw "Unsupported order: " + c;
|
throw "Unsupported order: " + c;
|
||||||
}
|
}
|
||||||
|
|||||||
16
haxework/storage/NoStorage.hx
Executable file
16
haxework/storage/NoStorage.hx
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
package haxework.storage;
|
||||||
|
|
||||||
|
import flash.utils.ByteArray;
|
||||||
|
|
||||||
|
class NoStorage implements IStorage {
|
||||||
|
|
||||||
|
public function exists(key:String):Bool {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function write(key:String, value:ByteArray):Void {}
|
||||||
|
|
||||||
|
public function read(key:String):Null<ByteArray> {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user