From c73be131f0c35709b49ebdc67905fe34ef29ee5f Mon Sep 17 00:00:00 2001 From: Tom Schuster Date: Sat, 25 Nov 2023 17:09:20 +0100 Subject: [PATCH] avm2: Implement flash.net.FileReference name --- .../avm2/globals/flash/net/FileReference.as | 5 +---- .../avm2/globals/flash/net/file_reference.rs | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/core/src/avm2/globals/flash/net/FileReference.as b/core/src/avm2/globals/flash/net/FileReference.as index 46eb15102..0f7f15fa0 100644 --- a/core/src/avm2/globals/flash/net/FileReference.as +++ b/core/src/avm2/globals/flash/net/FileReference.as @@ -11,7 +11,6 @@ package flash.net private var _creator: String; private var _extension: String; private var _modificationDate: Date; - private var _name: String; private static var _permissionStatus: String; private var _size: Number; private var _type: String; @@ -38,9 +37,7 @@ package flash.net return this._modificationDate; } - public function get name(): String { - return this._name; - } + public native function get name(): String; public static function get permissionStatus(): String { return FileReference._permissionStatus; diff --git a/core/src/avm2/globals/flash/net/file_reference.rs b/core/src/avm2/globals/flash/net/file_reference.rs index 857808f7f..0abc5db6b 100644 --- a/core/src/avm2/globals/flash/net/file_reference.rs +++ b/core/src/avm2/globals/flash/net/file_reference.rs @@ -4,6 +4,7 @@ pub use crate::avm2::object::file_reference_allocator; use crate::avm2::object::{ByteArrayObject, FileReference}; use crate::avm2::{Activation, Avm2, Error, EventObject, Object, TObject, Value}; use crate::backend::ui::FileFilter; +use crate::string::AvmString; pub fn get_data<'gc>( activation: &mut Activation<'_, 'gc>, @@ -25,6 +26,24 @@ pub fn get_data<'gc>( Ok(bytearray.into()) } +pub fn get_name<'gc>( + activation: &mut Activation<'_, 'gc>, + this: Object<'gc>, + _args: &[Value<'gc>], +) -> Result, Error<'gc>> { + let this = this.as_file_reference().unwrap(); + + let name = match *this.file_reference() { + FileReference::None => return Err(make_error_2037(activation)), + FileReference::FileDialogResult(ref dialog_result) => { + let name = dialog_result.file_name().unwrap_or_default(); + AvmString::new_utf8(activation.context.gc_context, name).into() + } + }; + + Ok(name) +} + pub fn browse<'gc>( activation: &mut Activation<'_, 'gc>, this: Object<'gc>,