forked from Silverfish/proton-bridge
Do not ignore errors
This commit is contained in:
@ -35,7 +35,7 @@ Changelog [format](http://keepachangelog.com/en/1.0.0/)
|
|||||||
* Set first-start to false in bridge, not in frontend.
|
* Set first-start to false in bridge, not in frontend.
|
||||||
* GODT-400 Refactor sendingInfo.
|
* GODT-400 Refactor sendingInfo.
|
||||||
* GODT-513 Update routes to API v4.
|
* GODT-513 Update routes to API v4.
|
||||||
|
* GODT-551 Do not ignore errors during message flagging.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
* GODT-454 Fix send on closed channel when receiving unencrypted send confirmation from GUI.
|
* GODT-454 Fix send on closed channel when receiving unencrypted send confirmation from GUI.
|
||||||
|
|||||||
@ -164,7 +164,9 @@ func (ib *imapBackend) Login(_ *imap.ConnInfo, username, password string) (goIMA
|
|||||||
|
|
||||||
if err := imapUser.user.CheckBridgeLogin(password); err != nil {
|
if err := imapUser.user.CheckBridgeLogin(password); err != nil {
|
||||||
log.WithError(err).Error("Could not check bridge password")
|
log.WithError(err).Error("Could not check bridge password")
|
||||||
_ = imapUser.Logout()
|
if err := imapUser.Logout(); err != nil {
|
||||||
|
log.WithError(err).Warn("Could not logout user after unsuccessful login check")
|
||||||
|
}
|
||||||
// Apple Mail sometimes generates a lot of requests very quickly.
|
// Apple Mail sometimes generates a lot of requests very quickly.
|
||||||
// It's therefore good to have a timeout after a bad login so that we can slow
|
// It's therefore good to have a timeout after a bad login so that we can slow
|
||||||
// those requests down a little bit.
|
// those requests down a little bit.
|
||||||
|
|||||||
@ -80,7 +80,7 @@ func (ib *imapBackend) removeFromCache(userID, label, toRemove string) {
|
|||||||
|
|
||||||
func (ib *imapBackend) getCacheList(userID, label string) (list string) {
|
func (ib *imapBackend) getCacheList(userID, label string) (list string) {
|
||||||
if err := ib.loadIMAPCache(); err != nil {
|
if err := ib.loadIMAPCache(); err != nil {
|
||||||
log.Warn("Could not load cache: ", err)
|
log.WithError(err).Warn("Could not load cache")
|
||||||
}
|
}
|
||||||
|
|
||||||
ib.imapCacheLock.Lock()
|
ib.imapCacheLock.Lock()
|
||||||
@ -97,7 +97,9 @@ func (ib *imapBackend) getCacheList(userID, label string) (list string) {
|
|||||||
|
|
||||||
ib.imapCacheLock.Unlock()
|
ib.imapCacheLock.Unlock()
|
||||||
|
|
||||||
_ = ib.saveIMAPCache()
|
if err := ib.saveIMAPCache(); err != nil {
|
||||||
|
log.WithError(err).Warn("Could not save cache")
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -77,19 +77,29 @@ func (im *imapMailbox) setFlags(messageIDs, flags []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if seen {
|
if seen {
|
||||||
_ = im.storeMailbox.MarkMessagesRead(messageIDs)
|
if err := im.storeMailbox.MarkMessagesRead(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
_ = im.storeMailbox.MarkMessagesUnread(messageIDs)
|
if err := im.storeMailbox.MarkMessagesUnread(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if flagged {
|
if flagged {
|
||||||
_ = im.storeMailbox.MarkMessagesStarred(messageIDs)
|
if err := im.storeMailbox.MarkMessagesStarred(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
_ = im.storeMailbox.MarkMessagesUnstarred(messageIDs)
|
if err := im.storeMailbox.MarkMessagesUnstarred(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if deleted {
|
if deleted {
|
||||||
_ = im.storeMailbox.DeleteMessages(messageIDs)
|
if err := im.storeMailbox.DeleteMessages(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spamMailbox, err := im.storeAddress.GetMailbox("Spam")
|
spamMailbox, err := im.storeAddress.GetMailbox("Spam")
|
||||||
@ -97,9 +107,13 @@ func (im *imapMailbox) setFlags(messageIDs, flags []string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if spam {
|
if spam {
|
||||||
_ = spamMailbox.LabelMessages(messageIDs)
|
if err := spamMailbox.LabelMessages(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
_ = spamMailbox.UnlabelMessages(messageIDs)
|
if err := spamMailbox.UnlabelMessages(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -111,22 +125,32 @@ func (im *imapMailbox) addOrRemoveFlags(operation imap.FlagsOp, messageIDs, flag
|
|||||||
case imap.SeenFlag:
|
case imap.SeenFlag:
|
||||||
switch operation {
|
switch operation {
|
||||||
case imap.AddFlags:
|
case imap.AddFlags:
|
||||||
_ = im.storeMailbox.MarkMessagesRead(messageIDs)
|
if err := im.storeMailbox.MarkMessagesRead(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
case imap.RemoveFlags:
|
case imap.RemoveFlags:
|
||||||
_ = im.storeMailbox.MarkMessagesUnread(messageIDs)
|
if err := im.storeMailbox.MarkMessagesUnread(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case imap.FlaggedFlag:
|
case imap.FlaggedFlag:
|
||||||
switch operation {
|
switch operation {
|
||||||
case imap.AddFlags:
|
case imap.AddFlags:
|
||||||
_ = im.storeMailbox.MarkMessagesStarred(messageIDs)
|
if err := im.storeMailbox.MarkMessagesStarred(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
case imap.RemoveFlags:
|
case imap.RemoveFlags:
|
||||||
_ = im.storeMailbox.MarkMessagesUnstarred(messageIDs)
|
if err := im.storeMailbox.MarkMessagesUnstarred(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case imap.DeletedFlag:
|
case imap.DeletedFlag:
|
||||||
if operation == imap.RemoveFlags {
|
if operation == imap.RemoveFlags {
|
||||||
break // Nothing to do, no message has the \Deleted flag.
|
break // Nothing to do, no message has the \Deleted flag.
|
||||||
}
|
}
|
||||||
_ = im.storeMailbox.DeleteMessages(messageIDs)
|
if err := im.storeMailbox.DeleteMessages(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
case imap.AnsweredFlag, imap.DraftFlag, imap.RecentFlag:
|
case imap.AnsweredFlag, imap.DraftFlag, imap.RecentFlag:
|
||||||
// Not supported.
|
// Not supported.
|
||||||
case message.AppleMailJunkFlag, message.ThunderbirdJunkFlag:
|
case message.AppleMailJunkFlag, message.ThunderbirdJunkFlag:
|
||||||
@ -140,9 +164,13 @@ func (im *imapMailbox) addOrRemoveFlags(operation imap.FlagsOp, messageIDs, flag
|
|||||||
// No label removal is necessary because Spam and Inbox are both exclusive labels so the backend
|
// No label removal is necessary because Spam and Inbox are both exclusive labels so the backend
|
||||||
// will automatically take care of label removal.
|
// will automatically take care of label removal.
|
||||||
case imap.AddFlags:
|
case imap.AddFlags:
|
||||||
_ = storeMailbox.LabelMessages(messageIDs)
|
if err := storeMailbox.LabelMessages(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
case imap.RemoveFlags:
|
case imap.RemoveFlags:
|
||||||
_ = storeMailbox.UnlabelMessages(messageIDs)
|
if err := storeMailbox.UnlabelMessages(messageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -359,7 +359,9 @@ func (su *smtpUser) Send(from string, to []string, messageReader io.Reader) (err
|
|||||||
return errors.New("error decoding subject message " + message.Header.Get("Subject"))
|
return errors.New("error decoding subject message " + message.Header.Get("Subject"))
|
||||||
}
|
}
|
||||||
if !su.continueSendingUnencryptedMail(subject) {
|
if !su.continueSendingUnencryptedMail(subject) {
|
||||||
_ = su.client().DeleteMessages([]string{message.ID})
|
if err := su.client().DeleteMessages([]string{message.ID}); err != nil {
|
||||||
|
log.WithError(err).Warn("Failed to delete canceled messages")
|
||||||
|
}
|
||||||
return errors.New("sending was canceled by user")
|
return errors.New("sending was canceled by user")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,7 +45,9 @@ func (c *Cache) getEventID(userID string) string {
|
|||||||
c.lock.Lock()
|
c.lock.Lock()
|
||||||
defer c.lock.Unlock()
|
defer c.lock.Unlock()
|
||||||
|
|
||||||
_ = c.loadCache()
|
if err := c.loadCache(); err != nil {
|
||||||
|
log.WithError(err).Warn("Problem to load store cache")
|
||||||
|
}
|
||||||
|
|
||||||
if c.cache == nil {
|
if c.cache == nil {
|
||||||
c.cache = map[string]map[string]string{}
|
c.cache = map[string]map[string]string{}
|
||||||
|
|||||||
@ -41,7 +41,7 @@ type Mailbox struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newMailbox(storeAddress *Address, labelID, labelPrefix, labelName, color string) (mb *Mailbox, err error) {
|
func newMailbox(storeAddress *Address, labelID, labelPrefix, labelName, color string) (mb *Mailbox, err error) {
|
||||||
_ = storeAddress.store.db.Update(func(tx *bolt.Tx) error {
|
err = storeAddress.store.db.Update(func(tx *bolt.Tx) error {
|
||||||
mb, err = txNewMailbox(tx, storeAddress, labelID, labelPrefix, labelName, color)
|
mb, err = txNewMailbox(tx, storeAddress, labelID, labelPrefix, labelName, color)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
|||||||
@ -129,6 +129,9 @@ func (storeMailbox *Mailbox) MarkMessagesRead(apiIDs []string) error {
|
|||||||
ids = append(ids, apiID)
|
ids = append(ids, apiID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(ids) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
return storeMailbox.client().MarkMessagesRead(ids)
|
return storeMailbox.client().MarkMessagesRead(ids)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -218,7 +218,9 @@ func (store *Store) deleteMailboxEvent(labelID string) error {
|
|||||||
store.lock.Lock()
|
store.lock.Lock()
|
||||||
defer store.lock.Unlock()
|
defer store.lock.Unlock()
|
||||||
|
|
||||||
_ = store.removeMailboxCount(labelID)
|
if err := store.removeMailboxCount(labelID); err != nil {
|
||||||
|
log.WithError(err).Warn("Problem to remove mailbox counts while deleting mailbox")
|
||||||
|
}
|
||||||
|
|
||||||
for _, a := range store.addresses {
|
for _, a := range store.addresses {
|
||||||
if err := a.deleteMailboxEvent(labelID); err != nil {
|
if err := a.deleteMailboxEvent(labelID); err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user