Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit 73ed5189783ecbef7e648be82032966c72969ce7 Author: Wim <wim@42.be> Date: Sun Mar 13 01:01:42 2022 +0000 Refactor login logic (whatsapp) diff --git a/bridge/whatsapp/whatsapp.go b/bridge/whatsapp/whatsapp.go index c28b3c8..ee18f45 100644 --- a/bridge/whatsapp/whatsapp.go +++ b/bridge/whatsapp/whatsapp.go @@ -7411 +7414 @@ func (b *Bwhatsapp) Connect() error {   b.wc = whatsmeow.NewClient(device, waLog.Stdout("Client", "INFO", true))   b.wc.AddEventHandler(b.eventHandler)   - // No ID stored, new login - qrChan, err := b.wc.GetQRChannel(context.Background()) - // This error means that we're already logged in, so ignore it. - if err != nil && !errors.Is(err, whatsmeow.ErrQRStoreContainsID) { - return errors.New("failed to to get QR channel:" + err.Error()) + firstlogin := false + var qrChan <-chan whatsmeow.QRChannelItem + if b.wc.Store.ID == nil { + firstlogin = true + qrChan, err = b.wc.GetQRChannel(context.Background()) + if err != nil && !errors.Is(err, whatsmeow.ErrQRStoreContainsID) { + return errors.New("failed to to get QR channel:" + err.Error()) + }   }     err = b.wc.Connect() @@ -8612 +8925 @@ func (b *Bwhatsapp) Connect() error {   return errors.New("failed to connect to WhatsApp: " + err.Error())   }   - for evt := range qrChan { - if evt.Event == "code" { - // Render the QR code here - qrterminal.GenerateHalfBlock(evt.Code, qrterminal.L, os.Stdout) - } else { - b.Log.Infof("QR channel result: %s", evt.Event) + if b.wc.Store.ID == nil { + for evt := range qrChan { + if evt.Event == "code" { + qrterminal.GenerateHalfBlock(evt.Code, qrterminal.L, os.Stdout) + } else { + b.Log.Infof("QR channel result: %s", evt.Event) + } + } + } + + // disconnect and reconnect on our first login/pairing + // for some reason the GetJoinedGroups in JoinChannel doesn't work on first login + if firstlogin { + b.wc.Disconnect() + time.Sleep(time.Second) + + err = b.wc.Connect() + if err != nil { + return errors.New("failed to connect to WhatsApp: " + err.Error())   }   }   @@ -1137 +1296 @@ func (b *Bwhatsapp) Connect() error {   }     // get user avatar asynchronously - // go func() {   b.Log.Info("Getting user avatars..")     for jid := range b.users { @@ -12213 +13714 @@ func (b *Bwhatsapp) Connect() error {   b.Log.Warnf("Could not get profile photo of %s: %v", jid, err)   } else {   b.Lock() - b.userAvatars[jid] = info.URL + if info != nil { + b.userAvatars[jid] = info.URL + }   b.Unlock()   }   }     b.Log.Info("Finished getting avatars..") - // }()     return nil  }