about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorReto Brunner <reto@labrat.space>2019-07-04 11:17:23 +0200
committerDrew DeVault <sir@cmpwn.com>2019-07-04 12:24:16 -0400
commitb12eba55c3cac7e754d1a17c4da4ffa230846af9 (patch)
treefcca1e58282267b313b4ddc13fbe7a47bd64ad0d
parent0abca31c1519cac19914fa7b1849126c2c512529 (diff)
downloadaerc-b12eba55c3cac7e754d1a17c4da4ffa230846af9.tar.gz
dirlist: simplify nextPrev() considerably
Assuming we always have a sorted dirlist
(other code depends on that already), we don't need to loop over the
dirStore.
Any filtering done should be performed elsewhere
-rw-r--r--widgets/dirlist.go36
1 files changed, 11 insertions, 25 deletions
diff --git a/widgets/dirlist.go b/widgets/dirlist.go
index c7469d1..01adfe7 100644
--- a/widgets/dirlist.go
+++ b/widgets/dirlist.go
@@ -133,32 +133,18 @@ func (dirlist *DirectoryList) Draw(ctx *ui.Context) {
 }
 
 func (dirlist *DirectoryList) nextPrev(delta int) {
-	for i, dir := range dirlist.dirs {
-		if dir == dirlist.selected {
-			var j int
-			ndirs := len(dirlist.dirs)
-			for j = i + delta; j != i; j += delta {
-				if j < 0 {
-					j = ndirs - 1
-				}
-				if j >= ndirs {
-					j = 0
-				}
-				name := dirlist.dirs[j]
-				if len(dirlist.acctConf.Folders) > 1 && name != dirlist.selected {
-					idx := sort.SearchStrings(dirlist.acctConf.Folders, name)
-					if idx == len(dirlist.acctConf.Folders) ||
-						dirlist.acctConf.Folders[idx] != name {
-
-						continue
-					}
-				}
-				break
-			}
-			dirlist.Select(dirlist.dirs[j])
-			break
-		}
+	curIdx := sort.SearchStrings(dirlist.dirs, dirlist.selected)
+	if curIdx == len(dirlist.dirs) {
+		return
+	}
+	newIdx := curIdx + delta
+	ndirs := len(dirlist.dirs)
+	if newIdx < 0 {
+		newIdx = ndirs - 1
+	} else if newIdx >= ndirs {
+		newIdx = 0
 	}
+	dirlist.Select(dirlist.dirs[newIdx])
 }
 
 func (dirlist *DirectoryList) Next() {