aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/dirstore.go20
-rw-r--r--widgets/dirlist.go11
2 files changed, 27 insertions, 4 deletions
diff --git a/lib/dirstore.go b/lib/dirstore.go
new file mode 100644
index 0000000..e7ebb77
--- /dev/null
+++ b/lib/dirstore.go
@@ -0,0 +1,20 @@
+package lib
+
+type DirStore struct {
+ dirs []string
+}
+
+func NewDirStore() *DirStore {
+ return &DirStore{
+ dirs: make([]string, 0),
+ }
+}
+
+func (store *DirStore) Update(dirs []string) {
+ store.dirs = make([]string, len(dirs))
+ copy(store.dirs, dirs)
+}
+
+func (store *DirStore) List() []string {
+ return store.dirs
+}
diff --git a/widgets/dirlist.go b/widgets/dirlist.go
index 71cf79d..944b72e 100644
--- a/widgets/dirlist.go
+++ b/widgets/dirlist.go
@@ -7,6 +7,7 @@ import (
"github.com/gdamore/tcell"
"git.sr.ht/~sircmpwn/aerc/config"
+ "git.sr.ht/~sircmpwn/aerc/lib"
"git.sr.ht/~sircmpwn/aerc/lib/ui"
"git.sr.ht/~sircmpwn/aerc/worker/types"
)
@@ -15,6 +16,7 @@ type DirectoryList struct {
ui.Invalidatable
acctConf *config.AccountConfig
uiConf *config.UIConfig
+ store *lib.DirStore
dirs []string
logger *log.Logger
selecting string
@@ -31,6 +33,7 @@ func NewDirectoryList(acctConf *config.AccountConfig, uiConf *config.UIConfig,
uiConf: uiConf,
logger: logger,
spinner: NewSpinner(),
+ store: lib.NewDirStore(),
worker: worker,
}
dirlist.spinner.OnInvalidate(func(_ ui.Drawable) {
@@ -54,7 +57,7 @@ func (dirlist *DirectoryList) UpdateList(done func(dirs []string)) {
dirs = append(dirs, msg.Name)
case *types.Done:
sort.Strings(dirs)
- dirlist.dirs = dirs
+ dirlist.store.Update(dirs)
dirlist.spinner.Stop()
dirlist.Invalidate()
if done != nil {
@@ -107,14 +110,14 @@ func (dirlist *DirectoryList) Draw(ctx *ui.Context) {
return
}
- if len(dirlist.dirs) == 0 {
+ if len(dirlist.store.List()) == 0 {
style := tcell.StyleDefault
ctx.Printf(0, 0, style, dirlist.uiConf.EmptyDirlist)
return
}
row := 0
- for _, name := range dirlist.dirs {
+ for _, name := range dirlist.store.List() {
if row >= ctx.Height() {
break
}
@@ -180,7 +183,7 @@ func (dirlist *DirectoryList) filterDirsByFoldersConfig() {
return
}
var filtered []string
- for _, folder := range dirlist.dirs {
+ for _, folder := range dirlist.store.List() {
for _, cfgfolder := range dirlist.acctConf.Folders {
if folder == cfgfolder {
filtered = append(filtered, folder)