diff options
author | Kevin Kuehler <keur@xcf.berkeley.edu> | 2019-10-28 12:07:04 -0700 |
---|---|---|
committer | Ben Burwell <ben@benburwell.com> | 2019-10-29 11:07:41 -0400 |
commit | 4c8d9ad26cce588cc4ea2259cd7ca83d2801c102 (patch) | |
tree | 00727671e49a580c3c60edab39beecb48cd3237b /lib/msgstore.go | |
parent | d1414f13c929df81133d7c3cf9192c4e368162bc (diff) |
lib/msgstore: Handle DirectoryThreaded msg
This method is called after a worker fetches a threaded directory
contents from the backend. We iterate over the threads in the same order
that they will be printed in the msglist.
Signed-off-by: Kevin Kuehler <keur@xcf.berkeley.edu>
Diffstat (limited to 'lib/msgstore.go')
-rw-r--r-- | lib/msgstore.go | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/msgstore.go b/lib/msgstore.go index c0e4136..c2361dc 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -15,7 +15,8 @@ type MessageStore struct { DirInfo models.DirectoryInfo Messages map[uint32]*models.MessageInfo // Ordered list of known UIDs - uids []uint32 + uids []uint32 + Threads []*types.Thread selected int bodyCallbacks map[uint32][]func(io.Reader) @@ -173,6 +174,27 @@ func (store *MessageStore) Update(msg types.WorkerMessage) { }, nil) } update = true + case *types.DirectoryThreaded: + var uids []uint32 + newMap := make(map[uint32]*models.MessageInfo) + + for i := len(msg.Threads) - 1; i >= 0; i-- { + msg.Threads[i].FormatThread(func(t *types.Thread, x string) bool { + uid := t.Uid + uids = append([]uint32{uid}, uids...) + if msg, ok := store.Messages[uid]; ok { + newMap[uid] = msg + } else { + newMap[uid] = nil + directoryChange = true + } + return false + }) + } + store.Messages = newMap + store.uids = uids + store.Threads = msg.Threads + update = true case *types.DirectoryContents: newMap := make(map[uint32]*models.MessageInfo) for _, uid := range msg.Uids { |