diff options
author | Robin Jarry <robin@jarry.cc> | 2024-05-17 16:03:04 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2024-07-01 00:09:16 +0200 |
commit | 588776f42574567f907c190a5ff089256b21e598 (patch) | |
tree | 011e78e52d4e70afeb6e11ffe315eb5aa45dc2e2 /lib | |
parent | 0efcf2b3b08de22bcd5994a671c2b276db3488eb (diff) | |
download | aerc-588776f42574567f907c190a5ff089256b21e598.tar.gz |
imap: report errors from server
Avoid eternal spinner on the message list when the imap server
advertises some message UIDs but fails to provide their headers when
aerc asks from them.
When an error occurs, or if some UIDs are not returned, make sure to
report the errors to the message list UI.
Signed-off-by: Robin Jarry <robin@jarry.cc>
Reviewed-by: Tristan Partin <tristan@partin.io>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/msgstore.go | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/msgstore.go b/lib/msgstore.go index 45b9cfd7..d5501a4c 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -241,6 +241,7 @@ func merge(to *models.MessageInfo, from *models.MessageInfo) { } to.Flags = from.Flags to.Labels = from.Labels + to.Error = from.Error if from.Size != 0 { to.Size = from.Size } @@ -304,9 +305,10 @@ func (store *MessageStore) Update(msg types.WorkerMessage) { store.Messages = newMap update = true case *types.MessageInfo: + infoUpdated := msg.Info.Envelope != nil || msg.Info.Error != nil if existing, ok := store.Messages[msg.Info.Uid]; ok && existing != nil { merge(existing, msg.Info) - } else if msg.Info.Envelope != nil { + } else if infoUpdated { store.Messages[msg.Info.Uid] = msg.Info if store.selectedUid == msg.Info.Uid { store.onSelect(msg.Info) @@ -323,7 +325,7 @@ func (store *MessageStore) Update(msg types.WorkerMessage) { if !seen && recent && msg.Info.Envelope != nil { store.triggerNewEmail(msg.Info) } - if _, ok := store.pendingHeaders[msg.Info.Uid]; msg.Info.Envelope != nil && ok { + if _, ok := store.pendingHeaders[msg.Info.Uid]; infoUpdated && ok { delete(store.pendingHeaders, msg.Info.Uid) } if store.builder != nil { |