aboutsummaryrefslogtreecommitdiffstats
path: root/widgets
diff options
context:
space:
mode:
authorTim Culverhouse <tim@timculverhouse.com>2022-06-07 10:59:05 -0500
committerRobin Jarry <robin@jarry.cc>2022-06-07 18:01:25 +0200
commit115447e57f015b1805d2d58d1ae46beaff2299e5 (patch)
treef04d7ab4fa349a36a9fab699aefa51775e3a9b11 /widgets
parent2027223ab302f803952c486ec40f1e859638a273 (diff)
downloadaerc-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.go4
-rw-r--r--widgets/dirlist.go19
-rw-r--r--widgets/dirtree.go4
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 {