Skip to content
Permalink
Browse files

Dedup inline attachments (when already inlined)

  • Loading branch information...
tsileo committed Nov 3, 2019
1 parent 08cdcd6 commit be0f5c04b22388681f864c76a7875b99249e36bb
Showing with 25 additions and 1 deletion.
  1. +1 −1 templates/utils.html
  2. +24 −0 utils/template_filters.py
@@ -245,7 +245,7 @@
<h3 class="l">Attachments</h3>
<ul style="padding:0;list-style-type: none;">
{% endif %}
{% for a in obj.attachment %}
{% for a in (obj | iter_note_attachments) %}
{% if (a.mediaType and a.mediaType.startswith("image/")) or (a.type and a.type == 'Image') %}
<a href="{{ a.url | get_attachment_url(None) }}">
<img src="{{a.url | get_attachment_url(720) }}" title="{{ a.name }}" alt="{{ a.name }}" class="img-attachment"></a>
@@ -2,6 +2,7 @@
import urllib
from datetime import datetime
from datetime import timezone
from functools import lru_cache
from urllib.parse import urlparse

import bleach
@@ -345,6 +346,7 @@ def get_attachment_url(url, size):


@filters.app_template_filter()
@lru_cache(maxsize=256)
def update_inline_imgs(content):
soup = BeautifulSoup(content, "html5lib")
imgs = soup.find_all("img")
@@ -418,6 +420,28 @@ def has_actor_type(doc):
return False


@lru_cache(maxsize=256)
def _get_inlined_imgs(content):
imgs = []
if not content:
return imgs

soup = BeautifulSoup(content, "html5lib")
for img in soup.find_all("img"):
src = img.attrs.get("src")
if src:
imgs.append(src)

return imgs


@filters.app_template_filter()
def iter_note_attachments(note):
attachments = note.get("attachment", [])
imgs = _get_inlined_imgs(note.get("content"))
return [a for a in attachments if a.get("url") not in imgs]


@filters.app_template_filter()
def not_only_imgs(attachment):
for a in attachment:

0 comments on commit be0f5c0

Please sign in to comment.
You can’t perform that action at this time.