From 1b673b5ea7d06ef914e9d48ff7299f8b5f2119fd Mon Sep 17 00:00:00 2001 From: Jeffas Date: Sun, 21 Jul 2019 22:39:36 +0100 Subject: 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. --- widgets/account.go | 48 +++++++++++++++++++++++------------------------- widgets/dirlist.go | 12 ++++++++++++ 2 files changed, 35 insertions(+), 25 deletions(-) (limited to 'widgets') diff --git a/widgets/account.go b/widgets/account.go index 92e7a56..86ec00c 100644 --- a/widgets/account.go +++ b/widgets/account.go @@ -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: diff --git a/widgets/dirlist.go b/widgets/dirlist.go index 0a6113a..078973a 100644 --- a/widgets/dirlist.go +++ b/widgets/dirlist.go @@ -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) +} -- cgit v1.2.3