feat: new compat options for lemmy......

lemmy whyyyyyyyyyy.....
This commit is contained in:
əlemi 2024-08-11 17:38:10 +02:00
parent 0efe1a3301
commit e15952f028
Signed by: alemi
GPG key ID: A4895B84D311642C
2 changed files with 59 additions and 43 deletions

View file

@ -110,6 +110,9 @@ pub struct CompatibilityConfig {
#[serde(default)] #[serde(default)]
pub add_explicit_target_to_likes_if_local: bool, pub add_explicit_target_to_likes_if_local: bool,
#[serde(default)]
pub skip_single_attachment_if_image_is_set: bool,
} }
impl Config { impl Config {

View file

@ -73,8 +73,20 @@ impl Normalizer for crate::Context {
.await?; .await?;
} }
// TODO this check is a bit disgusting but lemmy for some incomprehensible reason sends us
// the same image twice: once in `image` and once as `attachment`. you may say "well just
// check if url is the same" and i absolutely do but lemmy is 10 steps forwards and it sends
// the same image twice with two distinct links. checkmate fedi developers!!!!!
// so basically i don't want to clutter my timeline with double images, nor fetch every image
// that comes from lemmy (we cloak and lazy-load) just to dedupe it...
let attachments = object.attachment().flat();
if !(
self.cfg().compat.skip_single_attachment_if_image_is_set
&& object_model.image.is_some()
&& attachments.len() == 1
) {
let obj_image = object_model.image.clone().unwrap_or_default(); let obj_image = object_model.image.clone().unwrap_or_default();
for attachment in object.attachment().flat() { for attachment in attachments {
let attachment_model = match attachment { let attachment_model = match attachment {
Node::Empty => continue, Node::Empty => continue,
Node::Array(_) => { Node::Array(_) => {
@ -117,6 +129,7 @@ impl Normalizer for crate::Context {
.exec(tx) .exec(tx)
.await?; .await?;
} }
}
for tag in object.tag().flat() { for tag in object.tag().flat() {
match tag { match tag {