summaryrefslogtreecommitdiff
path: root/lib/msgstore.go
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 /lib/msgstore.go
parent77ede6eb5a22a5407541ac587736189fcca0037f (diff)
downloadaerc-4465646fedc5dd3efa680a7cc8d06671350b75b9.zip
Show deleted emails pending server ack in grey
TODO: Don't let the user select or interact with deleted messages
Diffstat (limited to 'lib/msgstore.go')
-rw-r--r--lib/msgstore.go17
1 files changed, 15 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()
}