reactions: fix db race when handling reactions on newly received old messages (#100)

This commit is contained in:
Adam Van Ymeren
2025-04-25 13:19:50 -07:00
committed by GitHub
parent 53e89441b7
commit eb5ae65402
2 changed files with 4 additions and 13 deletions
+2 -11
View File
@@ -111,15 +111,6 @@ func (t *TelegramClient) handleTelegramReactions(ctx context.Context, msg *tg.Me
Int("message_id", msg.ID). Int("message_id", msg.ID).
Logger() Logger()
dbMsg, err := t.main.Bridge.DB.Message.GetFirstPartByID(ctx, t.loginID, ids.GetMessageIDFromMessage(msg))
if err != nil {
log.Err(err).Msg("failed to get message from database")
return
} else if dbMsg == nil {
log.Warn().Msg("message not found in database")
return
}
reactionsList, isFull, customEmojis, err := t.computeReactionsList(ctx, msg.PeerID, msg.ID, msg.Reactions) reactionsList, isFull, customEmojis, err := t.computeReactionsList(ctx, msg.PeerID, msg.ID, msg.Reactions)
if err != nil { if err != nil {
log.Err(err).Msg("failed to compute reactions list") log.Err(err).Msg("failed to compute reactions list")
@@ -163,9 +154,9 @@ func (t *TelegramClient) handleTelegramReactions(ctx context.Context, msg *tg.Me
LogContext: func(c zerolog.Context) zerolog.Context { LogContext: func(c zerolog.Context) zerolog.Context {
return c.Int("message_id", msg.ID) return c.Int("message_id", msg.ID)
}, },
PortalKey: dbMsg.Room, PortalKey: t.makePortalKeyFromPeer(msg.PeerID),
}, },
TargetMessage: dbMsg.ID, TargetMessage: ids.GetMessageIDFromMessage(msg),
Reactions: &bridgev2.ReactionSyncData{Users: users, HasAllUsers: isFull}, Reactions: &bridgev2.ReactionSyncData{Users: users, HasAllUsers: isFull},
}) })
} }
+2 -2
View File
@@ -135,8 +135,6 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, entities tg.Ent
sender := t.getEventSender(msg, isBroadcastChannel) sender := t.getEventSender(msg, isBroadcastChannel)
go t.handleTelegramReactions(ctx, msg)
if media, ok := msg.GetMedia(); ok && media.TypeID() == tg.MessageMediaContactTypeID { if media, ok := msg.GetMedia(); ok && media.TypeID() == tg.MessageMediaContactTypeID {
contact := media.(*tg.MessageMediaContact) contact := media.(*tg.MessageMediaContact)
// TODO update the corresponding puppet // TODO update the corresponding puppet
@@ -164,6 +162,8 @@ func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, entities tg.Ent
Data: msg, Data: msg,
ConvertMessageFunc: t.convertToMatrixWithRefetch, ConvertMessageFunc: t.convertToMatrixWithRefetch,
}) })
t.handleTelegramReactions(ctx, msg)
case *tg.MessageService: case *tg.MessageService:
sender := t.getEventSender(msg, false) sender := t.getEventSender(msg, false)