From b5d6e2ac6bea64018c3fbf8606429e647a5f2da3 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Fri, 19 Dec 2025 13:33:01 +0200 Subject: [PATCH] Revert "handletelegram: do portal re-id in background" This reverts commit 37d34a4ab63d84b8acea827652943066e3c59c1f. --- pkg/connector/handletelegram.go | 56 +++++++++++++++------------------ 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/pkg/connector/handletelegram.go b/pkg/connector/handletelegram.go index 1dcf8e03..303a4d05 100644 --- a/pkg/connector/handletelegram.go +++ b/pkg/connector/handletelegram.go @@ -549,36 +549,31 @@ func (t *TelegramClient) handleServiceMessage(ctx context.Context, msg *tg.Messa log.Debug(). Str("old_portal_id", string(eventMeta.PortalKey.ID)). Int64("channel_id", action.ChannelID). - Msg("Received chat migrate action message") - // TODO this shouldn't really be in a goroutine, but it seems like there's a deadlock somewhere - // if there's a CreateMatrixRoom call ongoing at the same time as migrateChat - // (guessing it's actually the GetChatInfo call that's getting stuck, but not sure) - go func() { - newPortalKey := t.makePortalKeyFromID(ids.PeerTypeChannel, action.ChannelID, 0) - if err := t.migrateChat(ctx, eventMeta.PortalKey, newPortalKey); err != nil { - log.Err(err).Msg("Failed to migrate chat to channel") - return - } - t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{ - EventMeta: eventMeta. - WithPortalKey(newPortalKey). - WithStreamOrder(0). - WithType(bridgev2.RemoteEventMessage), - ID: ids.GetMessageIDFromMessage(msg), - ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) { - return &bridgev2.ConvertedMessage{ - Parts: []*bridgev2.ConvertedMessagePart{{ - Type: event.EventMessage, - Content: &event.MessageEventContent{ - MsgType: event.MsgNotice, - Body: "Upgraded this group to a supergroup", - }, - }}, - }, nil - }, - }) - }() - return nil + Msg("MessageActionChatMigrateTo") + newPortalKey := t.makePortalKeyFromID(ids.PeerTypeChannel, action.ChannelID, 0) + if err := t.migrateChat(ctx, eventMeta.PortalKey, newPortalKey); err != nil { + log.Err(err).Msg("Failed to migrate chat to channel") + return err + } + res := t.main.Bridge.QueueRemoteEvent(t.userLogin, &simplevent.Message[any]{ + EventMeta: eventMeta. + WithPortalKey(newPortalKey). + WithStreamOrder(0). + WithType(bridgev2.RemoteEventMessage), + ID: ids.GetMessageIDFromMessage(msg), + ConvertMessageFunc: func(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, data any) (*bridgev2.ConvertedMessage, error) { + return &bridgev2.ConvertedMessage{ + Parts: []*bridgev2.ConvertedMessagePart{{ + Type: event.EventMessage, + Content: &event.MessageEventContent{ + MsgType: event.MsgNotice, + Body: "Upgraded this group to a supergroup", + }, + }}, + }, nil + }, + }) + return resultToError(res) case *tg.MessageActionTopicCreate: channelPeer, _ := msg.PeerID.(*tg.PeerChannel) @@ -789,7 +784,6 @@ func (t *TelegramClient) updateChannel(ctx context.Context, channel *tg.Channel) } // TODO resync portal metadata? - // (actually don't, that might cause deadlocks if done while the portal is fetching its own info for creation) if !channel.Broadcast { return nil, nil