forked from Silverfish/proton-bridge
Merge branch 'release/perth_narrows' into devel
This commit is contained in:
@ -2,6 +2,13 @@
|
|||||||
|
|
||||||
Changelog [format](http://keepachangelog.com/en/1.0.0/)
|
Changelog [format](http://keepachangelog.com/en/1.0.0/)
|
||||||
|
|
||||||
|
## [Bridge 3.0.8] Perth Narrows
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Other: Add sentry reports for event processing failures.
|
||||||
|
* Other: Do not fail on label events.
|
||||||
|
|
||||||
|
|
||||||
## [Bridge 3.0.7] Perth Narrows
|
## [Bridge 3.0.7] Perth Narrows
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
2
Makefile
2
Makefile
@ -11,7 +11,7 @@ ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
|
|||||||
.PHONY: build build-gui build-nogui build-launcher versioner hasher
|
.PHONY: build build-gui build-nogui build-launcher versioner hasher
|
||||||
|
|
||||||
# Keep version hardcoded so app build works also without Git repository.
|
# Keep version hardcoded so app build works also without Git repository.
|
||||||
BRIDGE_APP_VERSION?=3.0.7+git
|
BRIDGE_APP_VERSION?=3.0.8+git
|
||||||
APP_VERSION:=${BRIDGE_APP_VERSION}
|
APP_VERSION:=${BRIDGE_APP_VERSION}
|
||||||
APP_FULL_NAME:=Proton Mail Bridge
|
APP_FULL_NAME:=Proton Mail Bridge
|
||||||
APP_VENDOR:=Proton AG
|
APP_VENDOR:=Proton AG
|
||||||
|
|||||||
@ -155,16 +155,31 @@ func (user *User) handleAddressEvents(ctx context.Context, addressEvents []proto
|
|||||||
switch event.Action {
|
switch event.Action {
|
||||||
case proton.EventCreate:
|
case proton.EventCreate:
|
||||||
if err := user.handleCreateAddressEvent(ctx, event); err != nil {
|
if err := user.handleCreateAddressEvent(ctx, event); err != nil {
|
||||||
|
if rerr := user.reporter.ReportMessageWithContext("Failed to apply address create event", reporter.Context{
|
||||||
|
"error": err,
|
||||||
|
}); rerr != nil {
|
||||||
|
user.log.WithError(err).Error("Failed to report address create event error")
|
||||||
|
}
|
||||||
return fmt.Errorf("failed to handle create address event: %w", err)
|
return fmt.Errorf("failed to handle create address event: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
case proton.EventUpdate, proton.EventUpdateFlags:
|
case proton.EventUpdate, proton.EventUpdateFlags:
|
||||||
if err := user.handleUpdateAddressEvent(ctx, event); err != nil {
|
if err := user.handleUpdateAddressEvent(ctx, event); err != nil {
|
||||||
|
if rerr := user.reporter.ReportMessageWithContext("Failed to apply address update event", reporter.Context{
|
||||||
|
"error": err,
|
||||||
|
}); rerr != nil {
|
||||||
|
user.log.WithError(err).Error("Failed to report address update event error")
|
||||||
|
}
|
||||||
return fmt.Errorf("failed to handle update address event: %w", err)
|
return fmt.Errorf("failed to handle update address event: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
case proton.EventDelete:
|
case proton.EventDelete:
|
||||||
if err := user.handleDeleteAddressEvent(ctx, event); err != nil {
|
if err := user.handleDeleteAddressEvent(ctx, event); err != nil {
|
||||||
|
if rerr := user.reporter.ReportMessageWithContext("Failed to apply address delete event", reporter.Context{
|
||||||
|
"error": err,
|
||||||
|
}); rerr != nil {
|
||||||
|
user.log.WithError(err).Error("Failed to report address delete event error")
|
||||||
|
}
|
||||||
return fmt.Errorf("failed to delete address: %w", err)
|
return fmt.Errorf("failed to delete address: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -303,10 +318,8 @@ func (user *User) handleCreateLabelEvent(_ context.Context, event proton.LabelEv
|
|||||||
}).Info("Handling label created event")
|
}).Info("Handling label created event")
|
||||||
|
|
||||||
if _, ok := user.apiLabels[event.Label.ID]; ok {
|
if _, ok := user.apiLabels[event.Label.ID]; ok {
|
||||||
return fmt.Errorf("label %q already exists", event.ID)
|
|
||||||
}
|
|
||||||
|
|
||||||
user.apiLabels[event.Label.ID] = event.Label
|
user.apiLabels[event.Label.ID] = event.Label
|
||||||
|
}
|
||||||
|
|
||||||
for _, updateCh := range xslices.Unique(maps.Values(user.updateCh)) {
|
for _, updateCh := range xslices.Unique(maps.Values(user.updateCh)) {
|
||||||
updateCh.Enqueue(newMailboxCreatedUpdate(imap.MailboxID(event.ID), getMailboxName(event.Label)))
|
updateCh.Enqueue(newMailboxCreatedUpdate(imap.MailboxID(event.ID), getMailboxName(event.Label)))
|
||||||
@ -330,10 +343,8 @@ func (user *User) handleUpdateLabelEvent(_ context.Context, event proton.LabelEv
|
|||||||
}).Info("Handling label updated event")
|
}).Info("Handling label updated event")
|
||||||
|
|
||||||
if _, ok := user.apiLabels[event.Label.ID]; !ok {
|
if _, ok := user.apiLabels[event.Label.ID]; !ok {
|
||||||
return fmt.Errorf("label %q does not exist", event.ID)
|
|
||||||
}
|
|
||||||
|
|
||||||
user.apiLabels[event.Label.ID] = event.Label
|
user.apiLabels[event.Label.ID] = event.Label
|
||||||
|
}
|
||||||
|
|
||||||
for _, updateCh := range xslices.Unique(maps.Values(user.updateCh)) {
|
for _, updateCh := range xslices.Unique(maps.Values(user.updateCh)) {
|
||||||
updateCh.Enqueue(imap.NewMailboxUpdated(
|
updateCh.Enqueue(imap.NewMailboxUpdated(
|
||||||
@ -358,10 +369,8 @@ func (user *User) handleDeleteLabelEvent(_ context.Context, event proton.LabelEv
|
|||||||
|
|
||||||
label, ok := user.apiLabels[event.ID]
|
label, ok := user.apiLabels[event.ID]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("label %q does not exist", event.ID)
|
|
||||||
}
|
|
||||||
|
|
||||||
delete(user.apiLabels, event.ID)
|
delete(user.apiLabels, event.ID)
|
||||||
|
}
|
||||||
|
|
||||||
for _, updateCh := range xslices.Unique(maps.Values(user.updateCh)) {
|
for _, updateCh := range xslices.Unique(maps.Values(user.updateCh)) {
|
||||||
updateCh.Enqueue(imap.NewMailboxDeleted(imap.MailboxID(event.ID)))
|
updateCh.Enqueue(imap.NewMailboxDeleted(imap.MailboxID(event.ID)))
|
||||||
@ -378,7 +387,7 @@ func (user *User) handleDeleteLabelEvent(_ context.Context, event proton.LabelEv
|
|||||||
}
|
}
|
||||||
|
|
||||||
// handleMessageEvents handles the given message events.
|
// handleMessageEvents handles the given message events.
|
||||||
func (user *User) handleMessageEvents(ctx context.Context, messageEvents []proton.MessageEvent) error {
|
func (user *User) handleMessageEvents(ctx context.Context, messageEvents []proton.MessageEvent) error { //nolint:funlen
|
||||||
for _, event := range messageEvents {
|
for _, event := range messageEvents {
|
||||||
ctx = logging.WithLogrusField(ctx, "messageID", event.ID)
|
ctx = logging.WithLogrusField(ctx, "messageID", event.ID)
|
||||||
|
|
||||||
@ -388,6 +397,11 @@ func (user *User) handleMessageEvents(ctx context.Context, messageEvents []proto
|
|||||||
logging.WithLogrusField(ctx, "action", "create message"),
|
logging.WithLogrusField(ctx, "action", "create message"),
|
||||||
event,
|
event,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
|
if rerr := user.reporter.ReportMessageWithContext("Failed to apply create message event", reporter.Context{
|
||||||
|
"error": err,
|
||||||
|
}); rerr != nil {
|
||||||
|
user.log.WithError(err).Error("Failed to report create message event error")
|
||||||
|
}
|
||||||
return fmt.Errorf("failed to handle create message event: %w", err)
|
return fmt.Errorf("failed to handle create message event: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -398,6 +412,11 @@ func (user *User) handleMessageEvents(ctx context.Context, messageEvents []proto
|
|||||||
logging.WithLogrusField(ctx, "action", "update draft"),
|
logging.WithLogrusField(ctx, "action", "update draft"),
|
||||||
event,
|
event,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
|
if rerr := user.reporter.ReportMessageWithContext("Failed to apply update draft message event", reporter.Context{
|
||||||
|
"error": err,
|
||||||
|
}); rerr != nil {
|
||||||
|
user.log.WithError(err).Error("Failed to report update draft message event error")
|
||||||
|
}
|
||||||
return fmt.Errorf("failed to handle update draft event: %w", err)
|
return fmt.Errorf("failed to handle update draft event: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -412,6 +431,11 @@ func (user *User) handleMessageEvents(ctx context.Context, messageEvents []proto
|
|||||||
logging.WithLogrusField(ctx, "action", "update message"),
|
logging.WithLogrusField(ctx, "action", "update message"),
|
||||||
event,
|
event,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
|
if rerr := user.reporter.ReportMessageWithContext("Failed to apply update message event", reporter.Context{
|
||||||
|
"error": err,
|
||||||
|
}); rerr != nil {
|
||||||
|
user.log.WithError(err).Error("Failed to report update message event error")
|
||||||
|
}
|
||||||
return fmt.Errorf("failed to handle update message event: %w", err)
|
return fmt.Errorf("failed to handle update message event: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -420,6 +444,11 @@ func (user *User) handleMessageEvents(ctx context.Context, messageEvents []proto
|
|||||||
logging.WithLogrusField(ctx, "action", "delete message"),
|
logging.WithLogrusField(ctx, "action", "delete message"),
|
||||||
event,
|
event,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
|
if rerr := user.reporter.ReportMessageWithContext("Failed to apply delete message event", reporter.Context{
|
||||||
|
"error": err,
|
||||||
|
}); rerr != nil {
|
||||||
|
user.log.WithError(err).Error("Failed to report delete message event error")
|
||||||
|
}
|
||||||
return fmt.Errorf("failed to handle delete message event: %w", err)
|
return fmt.Errorf("failed to handle delete message event: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -523,7 +552,7 @@ func (user *User) handleUpdateDraftEvent(ctx context.Context, event proton.Messa
|
|||||||
user.log.WithError(err).Error("Failed to add failed message ID to vault")
|
user.log.WithError(err).Error("Failed to add failed message ID to vault")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := user.reporter.ReportMessageWithContext("Failed to build message (event update)", reporter.Context{
|
if err := user.reporter.ReportMessageWithContext("Failed to build draft message (event update)", reporter.Context{
|
||||||
"messageID": res.messageID,
|
"messageID": res.messageID,
|
||||||
"error": res.err,
|
"error": res.err,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user