From 1b673b5ea7d06ef914e9d48ff7299f8b5f2119fd Mon Sep 17 00:00:00 2001 From: Jeffas Date: Sun, 21 Jul 2019 22:39:36 +0100 Subject: [PATCH] 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. --- lib/dirstore.go | 15 +++++++++++++-- widgets/account.go | 48 ++++++++++++++++++++++------------------------ widgets/dirlist.go | 12 ++++++++++++ 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/lib/dirstore.go b/lib/dirstore.go index 862e97a..bb58a9d 100644 --- a/lib/dirstore.go +++ b/lib/dirstore.go @@ -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 +} 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) +}