aerc/widgets/msglist.go

37 lines
756 B
Go
Raw Normal View History

package widgets
import (
"git.sr.ht/~sircmpwn/aerc2/worker/types"
)
type MessageStore struct {
DirInfo types.DirectoryInfo
Messages map[uint64]*types.MessageInfo
}
func NewMessageStore(dirInfo *types.DirectoryInfo) *MessageStore {
return &MessageStore{DirInfo: *dirInfo}
}
func (store *MessageStore) Update(msg types.WorkerMessage) {
switch msg := msg.(type) {
case *types.DirectoryInfo:
store.DirInfo = *msg
break
case *types.DirectoryContents:
newMap := make(map[uint64]*types.MessageInfo)
for _, uid := range msg.Uids {
if msg, ok := store.Messages[uid]; ok {
newMap[uid] = msg
} else {
newMap[uid] = nil
}
}
store.Messages = newMap
break
case *types.MessageInfo:
store.Messages[msg.Uid] = msg
break
}
}