aerc

Working clone of aerc-mail.org
git clone git://git.danielmoch.com/aerc.git
Log | Files | Refs | README | LICENSE

commit 4465646fedc5dd3efa680a7cc8d06671350b75b9
parent 77ede6eb5a22a5407541ac587736189fcca0037f
Author: Drew DeVault <sir@cmpwn.com>
Date:   Sat, 30 Mar 2019 10:40:55 -0400

Show deleted emails pending server ack in grey

TODO: Don't let the user select or interact with deleted messages

Diffstat:
Mlib/msgstore.go | 17+++++++++++++++--
Mwidgets/msglist.go | 3+++
2 files changed, 18 insertions(+), 2 deletions(-)

diff --git 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 @@ -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)