mirror of
https://github.com/jointakahe/takahe.git
synced 2025-02-26 20:16:20 +00:00
Update emoji for domain when shortcode doesn't match uri (#359)
This commit is contained in:
parent
af47e9dfd6
commit
1425ae0bde
3 changed files with 40 additions and 1 deletions
|
@ -245,6 +245,26 @@ class Emoji(StatorModel):
|
||||||
# create
|
# create
|
||||||
shortcode = name.lower().strip(":")
|
shortcode = name.lower().strip(":")
|
||||||
category = (icon.get("category") or "")[:100]
|
category = (icon.get("category") or "")[:100]
|
||||||
|
|
||||||
|
if not domain.local:
|
||||||
|
try:
|
||||||
|
emoji = cls.objects.get(shortcode=shortcode, domain=domain)
|
||||||
|
except cls.DoesNotExist:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
# Domain previously provided this shortcode. Trample in the new emoji
|
||||||
|
if emoji.remote_url != icon["url"] or emoji.mimetype != mimetype:
|
||||||
|
emoji.object_uri = data["id"]
|
||||||
|
emoji.remote_url = icon["url"]
|
||||||
|
emoji.mimetype = mimetype
|
||||||
|
emoji.category = category
|
||||||
|
emoji.transition_set_state("outdated")
|
||||||
|
if emoji.file:
|
||||||
|
emoji.file.delete(save=True)
|
||||||
|
else:
|
||||||
|
emoji.save()
|
||||||
|
return emoji
|
||||||
|
|
||||||
emoji = cls.objects.create(
|
emoji = cls.objects.create(
|
||||||
shortcode=shortcode,
|
shortcode=shortcode,
|
||||||
domain=None if domain.local else domain,
|
domain=None if domain.local else domain,
|
||||||
|
|
|
@ -134,7 +134,7 @@ def account_statuses(
|
||||||
identity.posts.not_hidden()
|
identity.posts.not_hidden()
|
||||||
.unlisted(include_replies=not exclude_replies)
|
.unlisted(include_replies=not exclude_replies)
|
||||||
.select_related("author")
|
.select_related("author")
|
||||||
.prefetch_related("attachments")
|
.prefetch_related("attachments", "mentions__domain", "emojis")
|
||||||
.order_by("-created")
|
.order_by("-created")
|
||||||
)
|
)
|
||||||
if pinned:
|
if pinned:
|
||||||
|
|
|
@ -253,6 +253,25 @@ class StatorModel(models.Model):
|
||||||
|
|
||||||
atransition_perform = sync_to_async(transition_perform)
|
atransition_perform = sync_to_async(transition_perform)
|
||||||
|
|
||||||
|
def transition_set_state(self, state: State | str):
|
||||||
|
"""
|
||||||
|
Sets the instance to the given state name for when it is saved.
|
||||||
|
"""
|
||||||
|
if isinstance(state, State):
|
||||||
|
state = state.name
|
||||||
|
if state not in self.state_graph.states:
|
||||||
|
raise ValueError(f"Invalid state {state}")
|
||||||
|
self.state = state # type: ignore
|
||||||
|
self.state_changed = timezone.now()
|
||||||
|
self.state_locked_until = None
|
||||||
|
|
||||||
|
if self.state_graph.states[state].attempt_immediately:
|
||||||
|
self.state_attempted = None
|
||||||
|
self.state_ready = True
|
||||||
|
else:
|
||||||
|
self.state_attempted = timezone.now()
|
||||||
|
self.state_ready = False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def transition_perform_queryset(
|
def transition_perform_queryset(
|
||||||
cls,
|
cls,
|
||||||
|
|
Loading…
Reference in a new issue