diff options
| -rw-r--r-- | activities/admin.py | 2 | ||||
| -rw-r--r-- | activities/models/emoji.py | 23 | ||||
| -rw-r--r-- | activities/models/post.py | 6 | 
3 files changed, 16 insertions, 15 deletions
diff --git a/activities/admin.py b/activities/admin.py index 6b0c8a9..95829a8 100644 --- a/activities/admin.py +++ b/activities/admin.py @@ -106,7 +106,7 @@ class PostAttachmentInline(admin.StackedInline):  class PostAdmin(admin.ModelAdmin):      list_display = ["id", "state", "author", "created"]      list_filter = ("local", "visibility", "state", "created") -    raw_id_fields = ["to", "mentions", "author"] +    raw_id_fields = ["to", "mentions", "author", "emojis"]      actions = ["force_fetch", "reparse_hashtags"]      search_fields = ["content"]      inlines = [PostAttachmentInline] diff --git a/activities/models/emoji.py b/activities/models/emoji.py index 00f6e67..96b9725 100644 --- a/activities/models/emoji.py +++ b/activities/models/emoji.py @@ -45,15 +45,16 @@ class EmojiStates(StateGraph):  class EmojiQuerySet(models.QuerySet):      def usable(self, domain: Domain | None = None): -        public_q = models.Q(public=True) -        if Config.system.emoji_unreviewed_are_public: -            public_q |= models.Q(public__isnull=True) - -        qs = self.filter(public_q) +        if domain is None or domain.local: +            visible_q = models.Q(local=True) +        else: +            visible_q = models.Q(public=True) +            if Config.system.emoji_unreviewed_are_public: +                visible_q |= models.Q(public__isnull=True) + +        qs = self.filter(visible_q)          if domain: -            if domain.local: -                qs = qs.filter(local=True) -            else: +            if not domain.local:                  qs = qs.filter(domain=domain)          return qs @@ -194,7 +195,7 @@ class Emoji(StatorModel):          return mark_safe(Emoji.emoji_regex.sub(replacer, content))      @classmethod -    def emojis_from_content(cls, content: str, domain: Domain) -> list[str]: +    def emojis_from_content(cls, content: str, domain: Domain | None) -> list[str]:          """          Return a parsed and sanitized of emoji found in content without          the surrounding ':'. @@ -202,7 +203,7 @@ class Emoji(StatorModel):          emoji_hits = cls.emoji_regex.findall(strip_html(content))          emojis = sorted({emoji.lower() for emoji in emoji_hits})          return list( -            cls.objects.filter(local=domain is None) +            cls.objects.filter(local=(domain is None) or domain.local)              .usable(domain)              .filter(shortcode__in=emojis)          ) @@ -213,7 +214,7 @@ class Emoji(StatorModel):          http://joinmastodon.org/ns#Emoji          """          return { -            "id": self.object_uri, +            "id": self.object_uri or f"https://{settings.MAIN_DOMAIN}/emoji/{self.pk}/",              "type": "Emoji",              "name": self.shortcode,              "icon": { diff --git a/activities/models/post.py b/activities/models/post.py index 2b0a7c2..97ee0e0 100644 --- a/activities/models/post.py +++ b/activities/models/post.py @@ -363,7 +363,7 @@ class Post(StatorModel):          """          return (              await Post.objects.select_related("author", "author__domain") -            .prefetch_related("mentions", "mentions__domain", "attachments") +            .prefetch_related("mentions", "mentions__domain", "attachments", "emojis")              .aget(pk=self.pk)          ) @@ -391,7 +391,7 @@ class Post(StatorModel):              # Find hashtags in this post              hashtags = Hashtag.hashtags_from_content(content) or None              # Find emoji in this post -            emojis = Emoji.emojis_from_content(content, author.domain) +            emojis = Emoji.emojis_from_content(content, None)              # Strip all HTML and apply linebreaks filter              content = linebreaks_filter(strip_html(content))              # Make the Post object @@ -430,7 +430,7 @@ class Post(StatorModel):              self.edited = timezone.now()              self.hashtags = Hashtag.hashtags_from_content(content) or None              self.mentions.set(self.mentions_from_content(content, self.author)) -            self.emojis.set(Emoji.emojis_from_content(content, self.author.domain)) +            self.emojis.set(Emoji.emojis_from_content(content, None))              self.attachments.set(attachments or [])              self.save()  | 
