diff options
author | Tim Culverhouse <tim@timculverhouse.com> | 2022-06-07 10:59:05 -0500 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-06-07 18:01:25 +0200 |
commit | 115447e57f015b1805d2d58d1ae46beaff2299e5 (patch) | |
tree | f04d7ab4fa349a36a9fab699aefa51775e3a9b11 /widgets | |
parent | 2027223ab302f803952c486ec40f1e859638a273 (diff) | |
download | aerc-115447e57f015b1805d2d58d1ae46beaff2299e5.tar.gz |
dirlist: fix panic when disconnecting with dirlist-tree=false
Commit 2027223a created a panic when attempting to clear the dirlist
when the config option dirlist-tree is set to false.
This patch fixes that panic by creating a dirlist.ClearList() function
to prevent needing to check a callback.
Tested with both dirlist-tree=false and true
Fixes: 2027223ab302 ("fix: clear dirlist on disconnect")
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/account.go | 4 | ||||
-rw-r--r-- | widgets/dirlist.go | 19 | ||||
-rw-r--r-- | widgets/dirtree.go | 4 |
3 files changed, 10 insertions, 17 deletions
diff --git a/widgets/account.go b/widgets/account.go index 93403709..7c180049 100644 --- a/widgets/account.go +++ b/widgets/account.go @@ -246,7 +246,6 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) { case *types.Connect, *types.Reconnect: acct.SetStatus(statusline.ConnectionActivity("Listing mailboxes...")) acct.logger.Println("Listing mailboxes...") - acct.dirlist.SetConnected(true) acct.dirlist.UpdateList(func(dirs []string) { var dir string for _, _dir := range dirs { @@ -267,8 +266,7 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) { acct.newConn = true }) case *types.Disconnect: - acct.dirlist.SetConnected(false) - acct.dirlist.UpdateList(nil) + acct.dirlist.ClearList() acct.msglist.SetStore(nil) acct.logger.Println("Disconnected.") acct.SetStatus(statusline.SetConnected(false)) diff --git a/widgets/dirlist.go b/widgets/dirlist.go index 8448e4a7..2c761a5c 100644 --- a/widgets/dirlist.go +++ b/widgets/dirlist.go @@ -31,7 +31,7 @@ type DirectoryLister interface { UpdateList(func([]string)) List() []string - SetConnected(bool) + ClearList() NextPrev(int) @@ -93,24 +93,15 @@ func (dirlist *DirectoryList) UiConfig() config.UIConfig { }) } -func (dirlist *DirectoryList) SetConnected(c bool) { - dirlist.connected = c -} - func (dirlist *DirectoryList) List() []string { return dirlist.store.List() } +func (dirlist *DirectoryList) ClearList() { + dirlist.dirs = []string{} +} + func (dirlist *DirectoryList) UpdateList(done func(dirs []string)) { - // Clear out dirlist if not connected - if !dirlist.connected { - // Only dirlist.dirs is used for the UI. No need to update dirstore - dirlist.dirs = []string{} - dirlist.Invalidate() - // Call callback with empty array for dirtree - done(dirlist.dirs) - return - } // TODO: move this logic into dirstore var dirs []string dirlist.worker.PostAction( diff --git a/widgets/dirtree.go b/widgets/dirtree.go index 24094e57..1130329a 100644 --- a/widgets/dirtree.go +++ b/widgets/dirtree.go @@ -32,6 +32,10 @@ func NewDirectoryTree(dirlist *DirectoryList, pathSeparator string) DirectoryLis return dt } +func (dt *DirectoryTree) ClearList() { + dt.list = make([]*types.Thread, 0) +} + func (dt *DirectoryTree) UpdateList(done func([]string)) { dt.DirectoryList.UpdateList(func(dirs []string) { if done != nil { |