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

This reverts commit 37cbf537bb.
main^2
Kitaiti Makoto 3 years ago
parent 28380021a7
commit af5674074d

@ -11,7 +11,7 @@ use plume_common::{
utils::MediaProcessor, utils::MediaProcessor,
}; };
use std::{ use std::{
fs, fs::{self, DirBuilder},
path::{Path, PathBuf}, path::{Path, PathBuf},
}; };
use tracing::warn; use tracing::warn;
@ -206,6 +206,10 @@ impl Media {
pub fn from_activity(conn: &DbConn, image: &Image) -> Result<Media> { pub fn from_activity(conn: &DbConn, image: &Image) -> Result<Media> {
let remote_url = image.object_props.url_string().ok()?; let remote_url = image.object_props.url_string().ok()?;
let path = determine_mirror_file_path(&remote_url); let path = determine_mirror_file_path(&remote_url);
let parent = path.parent()?;
if !parent.is_dir() {
DirBuilder::new().recursive(true).create(parent)?;
}
let mut dest = fs::File::create(path.clone()).ok()?; let mut dest = fs::File::create(path.clone()).ok()?;
if let Some(proxy) = CONFIG.proxy() { if let Some(proxy) = CONFIG.proxy() {

@ -637,37 +637,33 @@ impl FromId<DbConn> for Post {
} }
}); });
let post = Self::from_db(conn, &article.object_props.id_string()?).or_else(|_| { let cover = article
let cover = article .object_props
.object_props .icon_object::<Image>()
.icon_object::<Image>() .ok()
.ok() .and_then(|img| Media::from_activity(conn, &img).ok().map(|m| m.id));
.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(

Loading…
Cancel
Save