aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffas <dev@jeffas.io>2019-07-21 22:39:36 +0100
committerDrew DeVault <sir@cmpwn.com>2019-07-26 14:15:27 -0400
commit1b673b5ea7d06ef914e9d48ff7299f8b5f2119fd (patch)
tree7b6598470500ec2fd923fb6f0939409c25963d79
parentdc4c36adbfbffd34319ddc007bad437ef802ee72 (diff)
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.
-rw-r--r--lib/dirstore.go15
-rw-r--r--widgets/account.go48
-rw-r--r--widgets/dirlist.go12
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)
+}