Save remote post only when it doesn't exist on local

This commit is contained in:
Kitaiti Makoto 2021-02-16 22:42:04 +09:00
parent 9345a1b7a9
commit 37cbf537bb

View File

@ -637,33 +637,37 @@ impl FromId<DbConn> for Post {
} }
}); });
let cover = article let post = Self::from_db(conn, &article.object_props.id_string()?).or_else(|_| {
.object_props let cover = article
.icon_object::<Image>() .object_props
.ok() .icon_object::<Image>()
.and_then(|img| Media::from_activity(conn, &img).ok().map(|m| m.id)); .ok()
.and_then(|img| Media::from_activity(conn, &img).ok().map(|m| m.id));
let title = article.object_props.name_string()?; let title = article.object_props.name_string()?;
let post = Post::insert( Self::insert(
conn, conn,
NewPost { NewPost {
blog_id: blog?.id, blog_id: blog?.id,
slug: title.to_kebab_case(), slug: title.to_kebab_case(),
title, title,
content: SafeString::new(&article.object_props.content_string()?), content: SafeString::new(&article.object_props.content_string()?),
published: true, published: true,
license, license,
// FIXME: This is wrong: with this logic, we may use the display URL as the AP ID. We need two different fields // FIXME: This is wrong: with this logic, we may use the display URL as the AP ID. We need two different fields
ap_url: article ap_url: article
.object_props .object_props
.url_string() .url_string()
.or_else(|_| article.object_props.id_string())?, .or_else(|_| article.object_props.id_string())?,
creation_date: Some(article.object_props.published_utctime()?.naive_utc()), creation_date: Some(article.object_props.published_utctime()?.naive_utc()),
subtitle: article.object_props.summary_string()?, subtitle: article.object_props.summary_string()?,
source: article.ap_object_props.source_object::<Source>()?.content, source: article.ap_object_props.source_object::<Source>()?.content,
cover_id: cover, cover_id: cover,
}, },
)?; )
})?;
// TODO: Update cover image if post's cover changes
for author in authors { for author in authors {
PostAuthor::insert( PostAuthor::insert(