From 546dfcd76dd228e0605359e9985f0b6a5672e8fa Mon Sep 17 00:00:00 2001
From: Gregory Mullen <greg@cmdline.org>
Date: Thu, 27 Jun 2019 10:33:12 -0700
Subject: Add new lib/dirstore to source completions from

---
 lib/dirstore.go    | 20 ++++++++++++++++++++
 widgets/dirlist.go | 11 +++++++----
 2 files changed, 27 insertions(+), 4 deletions(-)
 create mode 100644 lib/dirstore.go

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)
-- 
cgit 1.4.1-2-gfad0