From dfa1afe7977edff5fd9d6f694938b09578414ac0 Mon Sep 17 00:00:00 2001 From: shmyga Date: Tue, 21 Jan 2020 18:01:39 +0300 Subject: [PATCH] [add] ModernFileReference --- src/haxe/ru/m/ModernFileReference.hx | 38 ++++++++++++++++++++++++++++ src/haxe/ru/m/puzzlez/FileUtil.hx | 37 +++------------------------ 2 files changed, 42 insertions(+), 33 deletions(-) create mode 100644 src/haxe/ru/m/ModernFileReference.hx diff --git a/src/haxe/ru/m/ModernFileReference.hx b/src/haxe/ru/m/ModernFileReference.hx new file mode 100644 index 0000000..61bbafa --- /dev/null +++ b/src/haxe/ru/m/ModernFileReference.hx @@ -0,0 +1,38 @@ +package ru.m; + +import flash.net.FileFilter; +import flash.net.FileReference; + +class Callback { + 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):Bool { + #if android + fileUtilBrowse(new Callback(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 + } +} diff --git a/src/haxe/ru/m/puzzlez/FileUtil.hx b/src/haxe/ru/m/puzzlez/FileUtil.hx index 83242a7..e9707e7 100644 --- a/src/haxe/ru/m/puzzlez/FileUtil.hx +++ b/src/haxe/ru/m/puzzlez/FileUtil.hx @@ -3,9 +3,7 @@ package ru.m.puzzlez; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; -import flash.net.FileReference; import haxe.io.Bytes; -import haxe.io.BytesData; import promhx.Deferred; import promhx.Promise; @@ -14,32 +12,13 @@ typedef FileContent = { var content:Bytes; } -class Callback { - 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 { - #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 { var d = new Deferred(); - var file = new FileReference(); + var file = new ModernFileReference(); 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) { d.throwError(event); @@ -48,26 +27,18 @@ class FileUtil { //trace('progress', '${event}'); }); file.addEventListener(Event.COMPLETE, function(event:Event) { - var f:FileReference = cast event.target; + var f:ModernFileReference = cast event.target; d.resolve({ name: f.name, content: Bytes.ofData(f.data), }); }); file.browse(); - #if android - fileUtilBrowse(new Callback(function(result:BytesData):Void { - d.resolve({ - name: "", - content: Bytes.ofData(result), - }); - })); - #end return d.promise(); } public static function save(content:FileContent):Void { - var file = new FileReference(); + var file = new ModernFileReference(); file.save(content.content.getData(), content.name); } }