summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activities/models/post_interaction.py15
-rw-r--r--users/models/inbox_message.py8
2 files changed, 23 insertions, 0 deletions
diff --git a/activities/models/post_interaction.py b/activities/models/post_interaction.py
index ea95cdf..4f1eb03 100644
--- a/activities/models/post_interaction.py
+++ b/activities/models/post_interaction.py
@@ -285,3 +285,18 @@ class PostInteraction(StatorModel):
TimelineEvent.add_post_interaction(interaction.post.author, interaction)
# Force it into fanned_out as it's not ours
interaction.transition_perform(PostInteractionStates.fanned_out)
+
+ @classmethod
+ def handle_undo_ap(cls, data):
+ """
+ Handles an incoming undo for a announce/like
+ """
+ # Find it
+ interaction = cls.by_ap(data["object"])
+ # Verify the actor matches
+ if data["actor"] != interaction.identity.actor_uri:
+ raise ValueError("Actor mismatch on interaction undo")
+ # Delete all events that reference it
+ interaction.timeline_events.all().delete()
+ # Force it into undone_fanned_out as it's not ours
+ interaction.transition_perform(PostInteractionStates.undone_fanned_out)
diff --git a/users/models/inbox_message.py b/users/models/inbox_message.py
index b9bcfb4..55eb3cb 100644
--- a/users/models/inbox_message.py
+++ b/users/models/inbox_message.py
@@ -42,6 +42,14 @@ class InboxMessageStates(StateGraph):
match instance.message_object_type:
case "follow":
await sync_to_async(Follow.handle_undo_ap)(instance.message)
+ case "like":
+ await sync_to_async(PostInteraction.handle_undo_ap)(
+ instance.message
+ )
+ case "announce":
+ await sync_to_async(PostInteraction.handle_undo_ap)(
+ instance.message
+ )
case unknown:
raise ValueError(
f"Cannot handle activity of type undo.{unknown}"