diff options
| -rw-r--r-- | lib/dirstore.go | 20 | ||||
| -rw-r--r-- | widgets/dirlist.go | 11 | 
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) | 
