Forráskód Böngészése

reactions: send checkpoints for matrix reactions (#472)

Sumner Evans 3 éve
szülő
commit
7a77b1976c
1 módosított fájl, 15 hozzáadás és 9 törlés
  1. 15 9
      portal.go

+ 15 - 9
portal.go

@@ -2784,17 +2784,26 @@ func (portal *Portal) HandleMatrixMessage(sender *User, evt *event.Event) {
 }
 }
 
 
 func (portal *Portal) HandleMatrixReaction(sender *User, evt *event.Event) {
 func (portal *Portal) HandleMatrixReaction(sender *User, evt *event.Event) {
-	// TODO checkpoints
 	portal.log.Debugfln("Received reaction event %s from %s", evt.ID, evt.Sender)
 	portal.log.Debugfln("Received reaction event %s from %s", evt.ID, evt.Sender)
+	err := portal.handleMatrixReaction(sender, evt)
+	if err != nil {
+		portal.log.Errorfln("Error sending reaction %s: %v", evt.ID, err)
+		portal.bridge.AS.SendErrorMessageSendCheckpoint(evt, appservice.StepRemote, err, true, 0)
+	} else {
+		portal.log.Debugfln("Handled Matrix reaction %s", evt.ID)
+		portal.bridge.AS.SendMessageSendCheckpoint(evt, appservice.StepRemote, 0)
+		portal.sendDeliveryReceipt(evt.ID)
+	}
+}
+
+func (portal *Portal) handleMatrixReaction(sender *User, evt *event.Event) error {
 	content, ok := evt.Content.Parsed.(*event.ReactionEventContent)
 	content, ok := evt.Content.Parsed.(*event.ReactionEventContent)
 	if !ok {
 	if !ok {
-		portal.log.Debugfln("Failed to handle reaction event %s: unexpected parsed content type %T", evt.ID, evt.Content.Parsed)
-		return
+		return fmt.Errorf("unexpected parsed content type %T", evt.Content.Parsed)
 	}
 	}
 	target := portal.bridge.DB.Message.GetByMXID(content.RelatesTo.EventID)
 	target := portal.bridge.DB.Message.GetByMXID(content.RelatesTo.EventID)
 	if target == nil || target.Type == database.MsgReaction {
 	if target == nil || target.Type == database.MsgReaction {
-		portal.log.Debugfln("Dropping reaction to unknown event %s", content.RelatesTo.EventID)
-		return
+		return fmt.Errorf("unknown target event %s", content.RelatesTo.EventID)
 	}
 	}
 	info := portal.generateMessageInfo(sender)
 	info := portal.generateMessageInfo(sender)
 	dbMsg := portal.markHandled(nil, info, evt.ID, false, true, database.MsgReaction, database.MsgNoError)
 	dbMsg := portal.markHandled(nil, info, evt.ID, false, true, database.MsgReaction, database.MsgNoError)
@@ -2802,12 +2811,9 @@ func (portal *Portal) HandleMatrixReaction(sender *User, evt *event.Event) {
 	portal.log.Debugln("Sending reaction", evt.ID, "to WhatsApp", info.ID)
 	portal.log.Debugln("Sending reaction", evt.ID, "to WhatsApp", info.ID)
 	ts, err := portal.sendReactionToWhatsApp(sender, info.ID, target, content.RelatesTo.Key, evt.Timestamp)
 	ts, err := portal.sendReactionToWhatsApp(sender, info.ID, target, content.RelatesTo.Key, evt.Timestamp)
 	if err != nil {
 	if err != nil {
-		portal.log.Errorfln("Error sending reaction: %v", err)
-	} else {
-		portal.log.Debugfln("Handled Matrix reaction %s", evt.ID)
-		portal.sendDeliveryReceipt(evt.ID)
 		dbMsg.MarkSent(ts)
 		dbMsg.MarkSent(ts)
 	}
 	}
+	return err
 }
 }
 
 
 func (portal *Portal) sendReactionToWhatsApp(sender *User, id types.MessageID, target *database.Message, key string, timestamp int64) (time.Time, error) {
 func (portal *Portal) sendReactionToWhatsApp(sender *User, id types.MessageID, target *database.Message, key string, timestamp int64) (time.Time, error) {