diff options
author | Reto Brunner <reto@labrat.space> | 2019-07-04 11:17:23 +0200 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-07-04 12:24:16 -0400 |
commit | b12eba55c3cac7e754d1a17c4da4ffa230846af9 (patch) | |
tree | fcca1e58282267b313b4ddc13fbe7a47bd64ad0d | |
parent | 0abca31c1519cac19914fa7b1849126c2c512529 (diff) | |
download | aerc-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.go | 36 |
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() { |