From af5674074dc98764c389f57a22ead0cd51e14f06 Mon Sep 17 00:00:00 2001 From: Kitaiti Makoto Date: Thu, 18 Feb 2021 11:08:40 +0900 Subject: [PATCH] Revert "Save remote post only when it doesn't exist on local" This reverts commit 37cbf537bbf772570e0a466f4615af3381d1cc50. --- plume-models/src/medias.rs | 6 +++- plume-models/src/posts.rs | 56 ++++++++++++++++++-------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/plume-models/src/medias.rs b/plume-models/src/medias.rs index 26e1c6b9..369df668 100644 --- a/plume-models/src/medias.rs +++ b/plume-models/src/medias.rs @@ -11,7 +11,7 @@ use plume_common::{ utils::MediaProcessor, }; use std::{ - fs, + fs::{self, DirBuilder}, path::{Path, PathBuf}, }; use tracing::warn; @@ -206,6 +206,10 @@ impl Media { pub fn from_activity(conn: &DbConn, image: &Image) -> Result { let remote_url = image.object_props.url_string().ok()?; 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()?; if let Some(proxy) = CONFIG.proxy() { diff --git a/plume-models/src/posts.rs b/plume-models/src/posts.rs index 27eadcdb..8f1df2fe 100644 --- a/plume-models/src/posts.rs +++ b/plume-models/src/posts.rs @@ -637,37 +637,33 @@ impl FromId for Post { } }); - let post = Self::from_db(conn, &article.object_props.id_string()?).or_else(|_| { - let cover = article - .object_props - .icon_object::() - .ok() - .and_then(|img| Media::from_activity(conn, &img).ok().map(|m| m.id)); + let cover = article + .object_props + .icon_object::() + .ok() + .and_then(|img| Media::from_activity(conn, &img).ok().map(|m| m.id)); - let title = article.object_props.name_string()?; - Self::insert( - conn, - NewPost { - blog_id: blog?.id, - slug: title.to_kebab_case(), - title, - content: SafeString::new(&article.object_props.content_string()?), - published: true, - license, - // 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 - .object_props - .url_string() - .or_else(|_| article.object_props.id_string())?, - creation_date: Some(article.object_props.published_utctime()?.naive_utc()), - subtitle: article.object_props.summary_string()?, - source: article.ap_object_props.source_object::()?.content, - cover_id: cover, - }, - ) - })?; - - // TODO: Update cover image if post's cover changes + let title = article.object_props.name_string()?; + let post = Post::insert( + conn, + NewPost { + blog_id: blog?.id, + slug: title.to_kebab_case(), + title, + content: SafeString::new(&article.object_props.content_string()?), + published: true, + license, + // 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 + .object_props + .url_string() + .or_else(|_| article.object_props.id_string())?, + creation_date: Some(article.object_props.published_utctime()?.naive_utc()), + subtitle: article.object_props.summary_string()?, + source: article.ap_object_props.source_object::()?.content, + cover_id: cover, + }, + )?; for author in authors { PostAuthor::insert(