From f070b1823d5fdd39d945bc437aede77d01648ca1 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Wed, 25 Nov 2020 14:07:04 +0100 Subject: [PATCH] Make changes on `content` field backwards compatible --- lemmy_apub/src/objects/mod.rs | 45 ++++++++++++++++++++-------------- lemmy_apub/src/objects/user.rs | 3 ++- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/lemmy_apub/src/objects/mod.rs b/lemmy_apub/src/objects/mod.rs index 0ae99877a..f365b528c 100644 --- a/lemmy_apub/src/objects/mod.rs +++ b/lemmy_apub/src/objects/mod.rs @@ -7,11 +7,7 @@ use activitystreams::{ }; use anyhow::{anyhow, Context}; use chrono::NaiveDateTime; -use lemmy_utils::{ - location_info, - utils::{convert_datetime, markdown_to_html}, - LemmyError, -}; +use lemmy_utils::{location_info, utils::convert_datetime, LemmyError}; use url::Url; pub(crate) mod comment; @@ -69,14 +65,19 @@ pub(in crate::objects) fn set_content_and_source( markdown_text: &str, ) -> Result<(), LemmyError> where - T: ApObjectExt + ObjectExt, + T: ApObjectExt + ObjectExt + AsBase, { let mut source = Object::<()>::new_none_type(); source .set_content(markdown_text) .set_media_type(mime_markdown()?); object.set_source(source.into_any_base()?); - object.set_content(markdown_to_html(markdown_text)); + + // set `content` to markdown for compatibility with older Lemmy versions + // TODO: change this to HTML in a while + object.set_content(markdown_text); + object.set_media_type(mime_markdown()?); + //object.set_content(markdown_to_html(markdown_text)); Ok(()) } @@ -84,7 +85,7 @@ pub(in crate::objects) fn get_source_markdown_value( object: &T, ) -> Result, LemmyError> where - T: ApObjectExt + ObjectExt, + T: ApObjectExt + ObjectExt + AsBase, { let content = object .content() @@ -92,16 +93,24 @@ where .flatten() .map(|s| s.to_string()); if content.is_some() { - let source = object.source().context(location_info!())?; - let source = Object::<()>::from_any_base(source.to_owned())?.context(location_info!())?; - check_is_markdown(source.media_type())?; - let source_content = source - .content() - .map(|s| s.as_single_xsd_string()) - .flatten() - .context(location_info!())? - .to_string(); - return Ok(Some(source_content)); + let source = object.source(); + // updated lemmy version, read markdown from `source.content` + if let Some(source) = source { + let source = Object::<()>::from_any_base(source.to_owned())?.context(location_info!())?; + check_is_markdown(source.media_type())?; + let source_content = source + .content() + .map(|s| s.as_single_xsd_string()) + .flatten() + .context(location_info!())? + .to_string(); + return Ok(Some(source_content)); + } + // older lemmy version, read markdown from `content` + // TODO: remove this after a while + else { + return Ok(content); + } } Ok(None) } diff --git a/lemmy_apub/src/objects/user.rs b/lemmy_apub/src/objects/user.rs index 5ec283cfe..ae620c2c1 100644 --- a/lemmy_apub/src/objects/user.rs +++ b/lemmy_apub/src/objects/user.rs @@ -54,7 +54,8 @@ impl ToApub for User_ { if let Some(bio) = &self.bio { set_content_and_source(&mut person, bio)?; - // Also set summary for compatibility with older Lemmy versions. Remove this after a while. + // Also set summary for compatibility with older Lemmy versions. + // TODO: remove this after a while. person.set_summary(bio.to_owned()); }