From 4465646fedc5dd3efa680a7cc8d06671350b75b9 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sat, 30 Mar 2019 10:40:55 -0400 Subject: [PATCH] Show deleted emails pending server ack in grey TODO: Don't let the user select or interact with deleted messages --- lib/msgstore.go | 17 +++++++++++++++-- widgets/msglist.go | 3 +++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/msgstore.go b/lib/msgstore.go index be124df..3c77c49 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -8,6 +8,7 @@ import ( ) type MessageStore struct { + Deleted map[uint32]interface{} DirInfo types.DirectoryInfo Messages map[uint32]*types.MessageInfo // Ordered list of known UIDs @@ -27,6 +28,7 @@ func NewMessageStore(worker *types.Worker, dirInfo *types.DirectoryInfo) *MessageStore { return &MessageStore{ + Deleted: make(map[uint32]interface{}), DirInfo: *dirInfo, bodyCallbacks: make(map[uint32][]func(*mail.Message)), @@ -142,6 +144,9 @@ func (store *MessageStore) Update(msg types.WorkerMessage) { for _, uid := range msg.Uids { toDelete[uid] = nil delete(store.Messages, uid) + if _, ok := store.Deleted[uid]; ok { + delete(store.Deleted, uid) + } } uids := make([]uint32, len(store.Uids)-len(msg.Uids)) j := 0 @@ -154,8 +159,8 @@ func (store *MessageStore) Update(msg types.WorkerMessage) { store.Uids = uids update = true } - if update && store.onUpdate != nil { - store.onUpdate(store) + if update { + store.update() } } @@ -163,10 +168,18 @@ func (store *MessageStore) OnUpdate(fn func(store *MessageStore)) { store.onUpdate = fn } +func (store *MessageStore) update() { + if store.onUpdate != nil { + store.onUpdate(store) + } +} + func (store *MessageStore) Delete(uids []uint32) { var set imap.SeqSet for _, uid := range uids { set.AddNum(uid) + store.Deleted[uid] = nil } store.worker.PostAction(&types.DeleteMessages{Uids: set}, nil) + store.update() } diff --git a/widgets/msglist.go b/widgets/msglist.go index 18a7019..47be7bc 100644 --- a/widgets/msglist.go +++ b/widgets/msglist.go @@ -81,6 +81,9 @@ func (ml *MessageList) Draw(ctx *ui.Context) { style = style.Background(tcell.ColorWhite). Foreground(tcell.ColorBlack) } + if _, ok := ml.store.Deleted[msg.Uid]; ok { + style = style.Foreground(tcell.ColorGray) + } ctx.Fill(0, row, ctx.Width(), 1, ' ', style) ctx.Printf(0, row, style, "%s", msg.Envelope.Subject)