diff --git a/wp_api/src/jetpack/mod.rs b/wp_api/src/jetpack/mod.rs index 32caa2e2f..9858c8b6b 100644 --- a/wp_api/src/jetpack/mod.rs +++ b/wp_api/src/jetpack/mod.rs @@ -3,6 +3,7 @@ use crate::request::endpoint::AsNamespace; pub mod client; pub mod connection; pub mod endpoint; +pub mod videopress; pub(crate) struct JetpackNamespace(); diff --git a/wp_api/src/jetpack/videopress.rs b/wp_api/src/jetpack/videopress.rs new file mode 100644 index 000000000..12db51fb6 --- /dev/null +++ b/wp_api/src/jetpack/videopress.rs @@ -0,0 +1,32 @@ +use serde::{Deserialize, Serialize}; + +use crate::media::MediaDetails; + +#[derive(Debug, Serialize, Deserialize, uniffi::Record)] +pub struct VideoPressMediaDetails { + pub width: u32, + pub height: u32, + pub videopress: VideoPressDetails, +} + +#[derive(Debug, Serialize, Deserialize, uniffi::Record)] +pub struct VideoPressDetails { + pub duration: u64, + pub poster: String, +} + +#[uniffi::export(with_foreign)] +pub trait VideoPressMediaDetailsExtension: Send + Sync { + fn parse_videopress(&self, mime_type: String) -> Option; +} + +#[uniffi::export] +impl VideoPressMediaDetailsExtension for MediaDetails { + fn parse_videopress(&self, mime_type: String) -> Option { + if mime_type != "video/videopress" { + return None; + } + + serde_json::from_str::(self.payload.get()).ok() + } +} diff --git a/wp_api/src/media.rs b/wp_api/src/media.rs index 6eba87469..3c346d031 100644 --- a/wp_api/src/media.rs +++ b/wp_api/src/media.rs @@ -544,7 +544,7 @@ pub struct SparseMedia { #[derive(Debug, Serialize, Deserialize, uniffi::Object)] #[serde(transparent)] pub struct MediaDetails { - payload: Box, + pub payload: Box, } #[uniffi::export]