avm2: Implement flash.net.FileReference name

This commit is contained in:
Tom Schuster 2023-11-25 17:09:20 +01:00
parent fff841a22e
commit c73be131f0
2 changed files with 20 additions and 4 deletions

View File

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

View File

@ -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<Value<'gc>, 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>,