client: Wait for updates manager to finish on disconnect

This commit is contained in:
Toni Spets
2025-04-15 12:09:11 +03:00
parent 5421de8e76
commit 224b01e7a4
+19 -5
View File
@@ -64,6 +64,7 @@ type TelegramClient struct {
userLogin *bridgev2.UserLogin userLogin *bridgev2.UserLogin
client *telegram.Client client *telegram.Client
updatesManager *updates.Manager updatesManager *updates.Manager
updatesCloseC chan struct{}
clientCtx context.Context clientCtx context.Context
clientCancel context.CancelFunc clientCancel context.CancelFunc
clientCloseC <-chan struct{} clientCloseC <-chan struct{}
@@ -504,12 +505,22 @@ func (t *TelegramClient) Connect(ctx context.Context) {
t.sendBadCredentialsOrUnknownError(err) t.sendBadCredentialsOrUnknownError(err)
return return
} }
t.updatesCloseC = make(chan struct{})
go func() { go func() {
err = t.updatesManager.Run(t.clientCtx, t.client.API(), t.telegramUserID, updates.AuthOptions{}) defer close(t.updatesCloseC)
if err != nil && !errors.Is(err, context.Canceled) { for {
zerolog.Ctx(t.clientCtx).Err(err).Msg("failed to run updates manager") err = t.updatesManager.Run(t.clientCtx, t.client.API(), t.telegramUserID, updates.AuthOptions{})
t.Disconnect() if err == nil || errors.Is(err, context.Canceled) {
t.Connect(t.main.Bridge.Log.WithContext(context.Background())) return
}
zerolog.Ctx(t.clientCtx).Err(err).Msg("failed to run updates manager, retrying")
select {
case <-t.clientCtx.Done():
return
case <-time.After(5 * time.Second):
}
} }
}() }()
@@ -542,6 +553,9 @@ func (t *TelegramClient) Disconnect() {
if t.clientCloseC != nil { if t.clientCloseC != nil {
<-t.clientCloseC <-t.clientCloseC
} }
if t.updatesCloseC != nil {
<-t.updatesCloseC
}
} }
func (t *TelegramClient) getInputUser(ctx context.Context, id int64) (*tg.InputUser, error) { func (t *TelegramClient) getInputUser(ctx context.Context, id int64) (*tg.InputUser, error) {