summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-03-30 10:40:55 -0400
committerDrew DeVault <sir@cmpwn.com>2019-03-30 10:41:12 -0400
commit4465646fedc5dd3efa680a7cc8d06671350b75b9 (patch)
treea00457017cd26aef80bdd78cfd02293a9292e40a
parent77ede6eb5a22a5407541ac587736189fcca0037f (diff)
downloadaerc-4465646fedc5dd3efa680a7cc8d06671350b75b9.tar.gz
Show deleted emails pending server ack in grey
TODO: Don't let the user select or interact with deleted messages
-rw-r--r--lib/msgstore.go17
-rw-r--r--widgets/msglist.go3
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)