avm2: :Implement FLV Date to Avm2Value conversion

This commit is contained in:
Tom Schuster 2024-06-01 23:35:07 +02:00
parent 50c84f3e88
commit 1402a59a20
1 changed files with 20 additions and 1 deletions

View File

@ -1,5 +1,8 @@
use crate::avm2::{Activation, ArrayObject, ArrayStorage, TObject as _, Value as Avm2Value};
use crate::avm2::{
object::DateObject, Activation, ArrayObject, ArrayStorage, TObject as _, Value as Avm2Value,
};
use crate::string::AvmString;
use chrono::DateTime;
use flv_rs::{Value as FlvValue, Variable as FlvVariable};
fn avm2_object_from_flv_variables<'gc>(
@ -45,6 +48,18 @@ fn avm2_array_from_flv_values<'gc>(
.into()
}
fn avm2_date_from_flv_date<'gc>(
activation: &mut Activation<'_, 'gc>,
unix_time: f64,
_local_offset: i16,
) -> Avm2Value<'gc> {
let date_time = DateTime::from_timestamp(unix_time as i64, 0).expect("invalid timestamp");
DateObject::from_date_time(activation, date_time)
.unwrap()
.into()
}
pub trait FlvValueAvm2Ext<'gc> {
fn to_avm2_value(self, activation: &mut Activation<'_, 'gc>) -> Avm2Value<'gc>;
}
@ -59,6 +74,10 @@ impl<'gc> FlvValueAvm2Ext<'gc> for FlvValue<'_> {
FlvValue::String(string_data) | FlvValue::LongString(string_data) => {
AvmString::new_utf8_bytes(activation.context.gc_context, string_data).into()
}
FlvValue::Date {
unix_time,
local_offset,
} => avm2_date_from_flv_date(activation, unix_time, local_offset),
FlvValue::Number(value) => value.into(),
FlvValue::Boolean(value) => value.into(),
FlvValue::Null => Avm2Value::Null,