From 115447e57f015b1805d2d58d1ae46beaff2299e5 Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Tue, 7 Jun 2022 10:59:05 -0500 Subject: 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 Acked-by: Robin Jarry --- widgets/account.go | 4 +--- widgets/dirlist.go | 19 +++++-------------- widgets/dirtree.go | 4 ++++ 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/widgets/account.go b/widgets/account.go index 9340370..7c18004 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 8448e4a..2c761a5 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 24094e5..1130329 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 { -- cgit v1.2.3