aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/format/format.go4
-rw-r--r--lib/msgstore.go14
2 files changed, 17 insertions, 1 deletions
diff --git a/lib/format/format.go b/lib/format/format.go
index 42dd34a1..055e2c73 100644
--- a/lib/format/format.go
+++ b/lib/format/format.go
@@ -83,6 +83,10 @@ func ParseMessageFormat(format string, timeFmt string, thisDayTimeFmt string,
thisWeekTimeFmt string, thisYearTimeFmt string, ctx Ctx) (
string, []interface{}, error,
) {
+ if ctx.MsgInfo.Error != nil {
+ return "", nil,
+ errors.New("(unable to fetch header)")
+ }
retval := make([]byte, 0, len(format))
var args []interface{}
diff --git a/lib/msgstore.go b/lib/msgstore.go
index 33c2439a..a545f62f 100644
--- a/lib/msgstore.go
+++ b/lib/msgstore.go
@@ -112,8 +112,9 @@ func (store *MessageStore) FetchHeaders(uids []uint32,
}
if len(toFetch) > 0 {
store.worker.PostAction(&types.FetchMessageHeaders{Uids: toFetch}, func(msg types.WorkerMessage) {
- if _, ok := msg.(*types.Error); ok {
+ if msg, ok := msg.(*types.Error); ok {
for _, uid := range toFetch {
+ store.postInvalidMessageInfo(uid, msg.Error)
delete(store.pendingHeaders, uid)
}
}
@@ -124,6 +125,17 @@ func (store *MessageStore) FetchHeaders(uids []uint32,
}
}
+func (store *MessageStore) postInvalidMessageInfo(uid uint32, err error) {
+ logging.Errorf("Unable to fetch header %d: %w", uid, err)
+ info := &models.MessageInfo{
+ Envelope: &models.Envelope{},
+ Flags: []models.Flag{models.SeenFlag},
+ Uid: uid,
+ Error: err,
+ }
+ store.Update(&types.MessageInfo{Info: info})
+}
+
func (store *MessageStore) FetchFull(uids []uint32, cb func(*types.FullMessage)) {
// TODO: this could be optimized by pre-allocating toFetch and trimming it
// at the end. In practice we expect to get most messages back in one frame.