mirror of
https://git.joinplu.me/Plume/Plume.git
synced 2024-11-26 21:41:04 +00:00
Implement FromId07 for PostUpdate
This commit is contained in:
parent
76f688c967
commit
e5a2850105
1 changed files with 59 additions and 1 deletions
|
@ -15,7 +15,8 @@ use activitystreams::{
|
||||||
iri_string::types::IriString,
|
iri_string::types::IriString,
|
||||||
link::{self as link07, kind::MentionType},
|
link::{self as link07, kind::MentionType},
|
||||||
object::{
|
object::{
|
||||||
kind::ImageType, ApObject, Article as Article07, Image as Image07, Tombstone as Tombstone07,
|
kind::ImageType, ApObject, Article as Article07, AsApObject, Image as Image07,
|
||||||
|
Tombstone as Tombstone07,
|
||||||
},
|
},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
time::OffsetDateTime,
|
time::OffsetDateTime,
|
||||||
|
@ -1302,6 +1303,63 @@ impl FromId<DbConn> for PostUpdate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl FromId07<DbConn> for PostUpdate {
|
||||||
|
type Error = Error;
|
||||||
|
type Object = LicensedArticle07;
|
||||||
|
|
||||||
|
fn from_db07(_: &DbConn, _: &str) -> Result<Self> {
|
||||||
|
// Always fail because we always want to deserialize the AP object
|
||||||
|
Err(Error::NotFound)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from_activity07(conn: &DbConn, updated: Self::Object) -> Result<Self> {
|
||||||
|
let mut post_update = PostUpdate {
|
||||||
|
ap_url: updated
|
||||||
|
.ap_object_ref()
|
||||||
|
.id_unchecked()
|
||||||
|
.ok_or(Error::MissingApProperty)?
|
||||||
|
.to_string(),
|
||||||
|
title: updated
|
||||||
|
.ap_object_ref()
|
||||||
|
.name()
|
||||||
|
.and_then(|name| name.to_as_string()),
|
||||||
|
subtitle: updated
|
||||||
|
.ap_object_ref()
|
||||||
|
.summary()
|
||||||
|
.and_then(|summary| summary.to_as_string()),
|
||||||
|
content: updated
|
||||||
|
.ap_object_ref()
|
||||||
|
.content()
|
||||||
|
.and_then(|content| content.to_as_string()),
|
||||||
|
cover: None,
|
||||||
|
source: None,
|
||||||
|
license: None,
|
||||||
|
tags: updated
|
||||||
|
.tag()
|
||||||
|
.and_then(|tags| serde_json::to_value(tags).ok()),
|
||||||
|
};
|
||||||
|
post_update.cover = updated.ap_object_ref().icon().and_then(|img| {
|
||||||
|
img.iter()
|
||||||
|
.next()
|
||||||
|
.and_then(|img| {
|
||||||
|
img.clone()
|
||||||
|
.extend::<Image07, ImageType>()
|
||||||
|
.map(|img| img.and_then(|img| Media::from_activity07(conn, &img).ok()))
|
||||||
|
.ok()
|
||||||
|
})
|
||||||
|
.and_then(|m| m.map(|m| m.id))
|
||||||
|
});
|
||||||
|
post_update.source = Some(updated.ext_two.source.content);
|
||||||
|
post_update.license = Some(updated.ext_one.license);
|
||||||
|
|
||||||
|
Ok(post_update)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_sender07() -> &'static dyn Signer {
|
||||||
|
Instance::get_local_instance_user().expect("Failed to local instance user")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl AsObject<User, Update, &DbConn> for PostUpdate {
|
impl AsObject<User, Update, &DbConn> for PostUpdate {
|
||||||
type Error = Error;
|
type Error = Error;
|
||||||
type Output = ();
|
type Output = ();
|
||||||
|
|
Loading…
Reference in a new issue