GODT-2223: Fix handling of create/update label events
This commit is contained in:
parent
d68014ec7b
commit
e35f3b6056
|
@ -21,10 +21,12 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/ProtonMail/gluon/reporter"
|
||||
"github.com/ProtonMail/proton-bridge/v3/internal/events"
|
||||
"github.com/ProtonMail/proton-bridge/v3/internal/safe"
|
||||
"github.com/ProtonMail/proton-bridge/v3/internal/user"
|
||||
"github.com/ProtonMail/proton-bridge/v3/internal/vault"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
func (bridge *Bridge) handleUserEvent(ctx context.Context, user *user.User, event events.Event) error {
|
||||
|
@ -53,7 +55,7 @@ func (bridge *Bridge) handleUserEvent(ctx context.Context, user *user.User, even
|
|||
bridge.handleUserDeauth(ctx, user)
|
||||
|
||||
case events.UserBadEvent:
|
||||
bridge.handleUserBadEvent(ctx, user)
|
||||
bridge.handleUserBadEvent(ctx, user, event.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -134,8 +136,14 @@ func (bridge *Bridge) handleUserDeauth(ctx context.Context, user *user.User) {
|
|||
}, bridge.usersLock)
|
||||
}
|
||||
|
||||
func (bridge *Bridge) handleUserBadEvent(ctx context.Context, user *user.User) {
|
||||
func (bridge *Bridge) handleUserBadEvent(ctx context.Context, user *user.User, err error) {
|
||||
safe.Lock(func() {
|
||||
if rerr := bridge.reporter.ReportMessageWithContext("Failed to handle event", reporter.Context{
|
||||
"error": err,
|
||||
}); rerr != nil {
|
||||
logrus.WithError(rerr).Error("Failed to report failed event handling")
|
||||
}
|
||||
|
||||
bridge.logoutUser(ctx, user, true, false)
|
||||
}, bridge.usersLock)
|
||||
}
|
||||
|
|
|
@ -21,8 +21,6 @@ import "errors"
|
|||
|
||||
var (
|
||||
ErrNoSuchAddress = errors.New("no such address")
|
||||
ErrNotImplemented = errors.New("not implemented")
|
||||
ErrNotSupported = errors.New("not supported")
|
||||
ErrInvalidReturnPath = errors.New("invalid return path")
|
||||
ErrInvalidRecipient = errors.New("invalid recipient")
|
||||
ErrMissingAddrKey = errors.New("missing address key")
|
||||
|
|
|
@ -333,14 +333,13 @@ func (user *User) handleLabelEvents(ctx context.Context, labelEvents []proton.La
|
|||
func (user *User) handleCreateLabelEvent(ctx context.Context, event proton.LabelEvent) ([]imap.Update, error) { //nolint:unparam
|
||||
return safe.LockRetErr(func() ([]imap.Update, error) {
|
||||
var updates []imap.Update
|
||||
|
||||
user.log.WithFields(logrus.Fields{
|
||||
"labelID": event.ID,
|
||||
"name": logging.Sensitive(event.Label.Name),
|
||||
}).Info("Handling label created event")
|
||||
|
||||
if _, ok := user.apiLabels[event.Label.ID]; ok {
|
||||
user.apiLabels[event.Label.ID] = event.Label
|
||||
}
|
||||
user.apiLabels[event.Label.ID] = event.Label
|
||||
|
||||
for _, updateCh := range xslices.Unique(maps.Values(user.updateCh)) {
|
||||
update := newMailboxCreatedUpdate(imap.MailboxID(event.ID), getMailboxName(event.Label))
|
||||
|
@ -361,14 +360,13 @@ func (user *User) handleCreateLabelEvent(ctx context.Context, event proton.Label
|
|||
func (user *User) handleUpdateLabelEvent(ctx context.Context, event proton.LabelEvent) ([]imap.Update, error) { //nolint:unparam
|
||||
return safe.LockRetErr(func() ([]imap.Update, error) {
|
||||
var updates []imap.Update
|
||||
|
||||
user.log.WithFields(logrus.Fields{
|
||||
"labelID": event.ID,
|
||||
"name": logging.Sensitive(event.Label.Name),
|
||||
}).Info("Handling label updated event")
|
||||
|
||||
if _, ok := user.apiLabels[event.Label.ID]; !ok {
|
||||
user.apiLabels[event.Label.ID] = event.Label
|
||||
}
|
||||
user.apiLabels[event.Label.ID] = event.Label
|
||||
|
||||
for _, updateCh := range xslices.Unique(maps.Values(user.updateCh)) {
|
||||
update := imap.NewMailboxUpdated(
|
||||
|
|
Loading…
Reference in New Issue