X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/0979625154094df73577d6e2be2d0e9a0a87306c..2a528fe2981639cf099c713a6be16b8ea0e2cc67:/whatsapp.go diff --git a/whatsapp.go b/whatsapp.go index 91ee675..27dd3c3 100644 --- a/whatsapp.go +++ b/whatsapp.go @@ -197,7 +197,7 @@ func openWhatsApp(ctx context.Context, dir string, clock func() time.Time, logge w.state, err = openWhatsAppState(filepath.Join(w.dir, whatsappStateFileName)) if err != nil { - return nil, err + return nil, fmt.Errorf("open WhatsApp state: %w", err) } w.inbox = newWhatsAppInbox(w.state, clock, w.groups, &ImageStore{dir: filepath.Join(dir, imageDirName)}, logger) @@ -217,7 +217,7 @@ func openWhatsApp(ctx context.Context, dir string, clock func() time.Time, logge err = w.openSession(ctx) if err != nil { - return nil, err + return nil, fmt.Errorf("open WhatsApp session: %w", err) } if w.device.ID != nil { @@ -239,7 +239,7 @@ func (w *WhatsApp) sessionPath() string { func (w *WhatsApp) openSession(ctx context.Context) error { address, err := whatsappSessionAddress(w.sessionPath()) if err != nil { - return err + return fmt.Errorf("find WhatsApp session address: %w", err) } container, err := sqlstore.New(ctx, "sqlite", address, waLog.Noop) @@ -309,6 +309,7 @@ func (w *WhatsApp) Run(ctx context.Context, l *TurnLoop, notify func(Event)) err cancel := func() { } + defer func() { cancel() pairing.Wait() @@ -322,14 +323,18 @@ func (w *WhatsApp) Run(ctx context.Context, l *TurnLoop, notify func(Event)) err for { err := w.inbox.deliver(ctx, l, w.link(), false) if err != nil { - return err + return fmt.Errorf("deliver WhatsApp inbox: %w", err) } select { case <-ctx.Done(): return nil case err = <-w.inbox.failures: - return err + if err != nil { + return fmt.Errorf("receive WhatsApp inbox: %w", err) + } + + return nil case <-w.inbox.wake: case <-w.inbox.due(): case <-retry: @@ -339,7 +344,7 @@ func (w *WhatsApp) Run(ctx context.Context, l *TurnLoop, notify func(Event)) err err = w.loggedOut(ctx, l) if err != nil { - return err + return fmt.Errorf("handle WhatsApp logout: %w", err) } case request := <-w.requests: cancel() @@ -354,7 +359,7 @@ func (w *WhatsApp) Run(ctx context.Context, l *TurnLoop, notify func(Event)) err err = w.unlink(ctx, l, request.answer) if err != nil { - return err + return fmt.Errorf("unlink WhatsApp: %w", err) } case w.isLinked(): request.answer("WhatsApp is linked already. Run /whatsapp unlink first.") @@ -884,7 +889,7 @@ func (w *WhatsApp) newDevice(ctx context.Context) (*store.Device, error) { err = w.openSession(ctx) if err != nil { - return nil, err + return nil, fmt.Errorf("open new WhatsApp session: %w", err) } }