[add] ModernFileReference

This commit is contained in:
2020-01-21 18:01:39 +03:00
parent e744b9e8aa
commit dfa1afe797
2 changed files with 42 additions and 33 deletions

View File

@@ -0,0 +1,38 @@
package ru.m;
import flash.net.FileFilter;
import flash.net.FileReference;
class Callback<T> {
private var callback:T -> Void;
public function new(callback: T -> Void) {
this.callback = callback;
}
public function execute(result:T):Void {
this.callback(result);
}
}
class ModernFileReference extends FileReference {
#if android
private static var fileUtilBrowse = lime.system.JNI.createStaticMethod(
"ru.m.android.FileUtil",
"browse",
"(Lorg/haxe/lime/HaxeObject;)V"
);
#end
override function browse(?typeFilter:Array<FileFilter>):Bool {
#if android
fileUtilBrowse(new Callback<haxe.io.BytesData>(function(result:haxe.io.BytesData):Void {
data = result;
dispatchEvent(new flash.events.Event(flash.events.Event.COMPLETE));
}));
return true;
#else
return super.browse(typeFilter);
#end
}
}

View File

@@ -3,9 +3,7 @@ package ru.m.puzzlez;
import flash.events.Event; import flash.events.Event;
import flash.events.IOErrorEvent; import flash.events.IOErrorEvent;
import flash.events.ProgressEvent; import flash.events.ProgressEvent;
import flash.net.FileReference;
import haxe.io.Bytes; import haxe.io.Bytes;
import haxe.io.BytesData;
import promhx.Deferred; import promhx.Deferred;
import promhx.Promise; import promhx.Promise;
@@ -14,32 +12,13 @@ typedef FileContent = {
var content:Bytes; var content:Bytes;
} }
class Callback<T> {
private var callback:T -> Void;
public function new(callback: T -> Void) {
this.callback = callback;
}
public function execute(result:T):Void {
this.callback(result);
}
}
class FileUtil { class FileUtil {
#if android
private static var fileUtilBrowse = lime.system.JNI.createStaticMethod(
"ru.m.android.FileUtil",
"browse",
"(Lorg/haxe/lime/HaxeObject;)V"
);
#end
public static function browse():Promise<FileContent> { public static function browse():Promise<FileContent> {
var d = new Deferred<FileContent>(); var d = new Deferred<FileContent>();
var file = new FileReference(); var file = new ModernFileReference();
file.addEventListener(Event.SELECT, function(event:Event) { file.addEventListener(Event.SELECT, function(event:Event) {
cast(event.target, FileReference).load(); cast(event.target, ModernFileReference).load();
}); });
file.addEventListener(IOErrorEvent.IO_ERROR, function(event:IOErrorEvent) { file.addEventListener(IOErrorEvent.IO_ERROR, function(event:IOErrorEvent) {
d.throwError(event); d.throwError(event);
@@ -48,26 +27,18 @@ class FileUtil {
//trace('progress', '${event}'); //trace('progress', '${event}');
}); });
file.addEventListener(Event.COMPLETE, function(event:Event) { file.addEventListener(Event.COMPLETE, function(event:Event) {
var f:FileReference = cast event.target; var f:ModernFileReference = cast event.target;
d.resolve({ d.resolve({
name: f.name, name: f.name,
content: Bytes.ofData(f.data), content: Bytes.ofData(f.data),
}); });
}); });
file.browse(); file.browse();
#if android
fileUtilBrowse(new Callback<BytesData>(function(result:BytesData):Void {
d.resolve({
name: "",
content: Bytes.ofData(result),
});
}));
#end
return d.promise(); return d.promise();
} }
public static function save(content:FileContent):Void { public static function save(content:FileContent):Void {
var file = new FileReference(); var file = new ModernFileReference();
file.save(content.content.getData(), content.name); file.save(content.content.getData(), content.name);
} }
} }