Accept incoming action undos
This commit is contained in:
		
							parent
							
								
									20e63023bb
								
							
						
					
					
						commit
						2ef709b642
					
				@ -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)
 | 
			
		||||
 | 
			
		||||
@ -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}"
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user