Move msgstore map to dirstore

This map represents a mapping from directory names to their associated
messagestores anyway so they should be under dirstore. This simply moves
them there and adds some methods required to interact with them.
This commit is contained in:
Jeffas 2019-07-21 22:39:36 +01:00 committed by Drew DeVault
parent dc4c36adbf
commit 1b673b5ea7
3 changed files with 48 additions and 27 deletions

View File

@ -1,11 +1,13 @@
package lib
type DirStore struct {
dirs []string
dirs []string
msgStores map[string]*MessageStore
}
func NewDirStore() *DirStore {
return &DirStore{}
msgStores := make(map[string]*MessageStore)
return &DirStore{msgStores: msgStores}
}
func (store *DirStore) Update(dirs []string) {
@ -16,3 +18,12 @@ func (store *DirStore) Update(dirs []string) {
func (store *DirStore) List() []string {
return store.dirs
}
func (store *DirStore) MessageStore(dirname string) (*MessageStore, bool) {
msgStore, ok := store.msgStores[dirname]
return msgStore, ok
}
func (store *DirStore) SetMessageStore(name string, msgStore *MessageStore) {
store.msgStores[name] = msgStore
}

View File

@ -16,15 +16,14 @@ import (
)
type AccountView struct {
acct *config.AccountConfig
conf *config.AercConfig
dirlist *DirectoryList
grid *ui.Grid
host TabHost
logger *log.Logger
msglist *MessageList
msgStores map[string]*lib.MessageStore
worker *types.Worker
acct *config.AccountConfig
conf *config.AercConfig
dirlist *DirectoryList
grid *ui.Grid
host TabHost
logger *log.Logger
msglist *MessageList
worker *types.Worker
}
func NewAccountView(conf *config.AercConfig, acct *config.AccountConfig,
@ -58,15 +57,14 @@ func NewAccountView(conf *config.AercConfig, acct *config.AccountConfig,
grid.AddChild(msglist).At(0, 1)
view := &AccountView{
acct: acct,
conf: conf,
dirlist: dirlist,
grid: grid,
host: host,
logger: logger,
msglist: msglist,
msgStores: make(map[string]*lib.MessageStore),
worker: worker,
acct: acct,
conf: conf,
dirlist: dirlist,
grid: grid,
host: host,
logger: logger,
msglist: msglist,
worker: worker,
}
go worker.Backend.Run()
@ -187,7 +185,7 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) {
case *types.Done:
switch msg.InResponseTo().(type) {
case *types.OpenDirectory:
if store, ok := acct.msgStores[acct.dirlist.selected]; ok {
if store, ok := acct.dirlist.SelectedMsgStore(); ok {
// If we've opened this dir before, we can re-render it from
// memory while we wait for the update and the UI feels
// snappier. If not, we'll unset the store and show the spinner
@ -200,7 +198,7 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) {
acct.dirlist.UpdateList(nil)
}
case *types.DirectoryInfo:
if store, ok := acct.msgStores[msg.Info.Name]; ok {
if store, ok := acct.dirlist.MsgStore(msg.Info.Name); ok {
store.Update(msg)
} else {
store = lib.NewMessageStore(acct.worker, msg.Info,
@ -208,26 +206,26 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) {
acct.conf.Triggers.ExecNewEmail(acct.acct,
acct.conf, msg)
})
acct.msgStores[msg.Info.Name] = store
acct.dirlist.SetMsgStore(msg.Info.Name, store)
store.OnUpdate(func(_ *lib.MessageStore) {
store.OnUpdate(nil)
acct.msglist.SetStore(store)
})
}
case *types.DirectoryContents:
if store, ok := acct.msgStores[acct.dirlist.selected]; ok {
if store, ok := acct.dirlist.SelectedMsgStore(); ok {
store.Update(msg)
}
case *types.FullMessage:
if store, ok := acct.msgStores[acct.dirlist.selected]; ok {
if store, ok := acct.dirlist.SelectedMsgStore(); ok {
store.Update(msg)
}
case *types.MessageInfo:
if store, ok := acct.msgStores[acct.dirlist.selected]; ok {
if store, ok := acct.dirlist.SelectedMsgStore(); ok {
store.Update(msg)
}
case *types.MessagesDeleted:
if store, ok := acct.msgStores[acct.dirlist.selected]; ok {
if store, ok := acct.dirlist.SelectedMsgStore(); ok {
store.Update(msg)
}
case *types.Error:

View File

@ -178,3 +178,15 @@ func (dirlist *DirectoryList) filterDirsByFoldersConfig() {
}
dirlist.dirs = filtered
}
func (dirlist *DirectoryList) SelectedMsgStore() (*lib.MessageStore, bool) {
return dirlist.store.MessageStore(dirlist.selected)
}
func (dirlist *DirectoryList) MsgStore(name string) (*lib.MessageStore, bool) {
return dirlist.store.MessageStore(name)
}
func (dirlist *DirectoryList) SetMsgStore(name string, msgStore *lib.MessageStore) {
dirlist.store.SetMessageStore(name, msgStore)
}