From 430e1968596e417d985bfe0f4fc016823c9f2806 Mon Sep 17 00:00:00 2001 From: David Ashby Date: Wed, 14 May 2025 22:42:04 -0400 Subject: [PATCH] cut down on the number of loops through the directory listing --- main.go | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/main.go b/main.go index fa47aff..c1c426b 100644 --- a/main.go +++ b/main.go @@ -93,24 +93,26 @@ func newBrowse(file string) { log.Printf("could not open dir: %v", err) return } - directoryState.images = []string{} - for _, v := range dirfiles { - if filetypes.IsImage(v) { - directoryState.images = append(directoryState.images, v.Name()) - } - } - slices.SortFunc(directoryState.images, func(a, b string) int { - if natural.Less(a, b) { + // natsort the directory listing first... + slices.SortFunc(dirfiles, func(a, b os.DirEntry) int { + if natural.Less(a.Name(), b.Name()) { return -1 } return 1 }) + // ...that way we only have to do this loop once. clearFileList() - for i, v := range directoryState.images { - insertIntoFileList(directoryState.images[i]) - if v == filepath.Base(file) { - directoryState.i = i - moveSelectionInFileList(i) + directoryState.images = []string{} + i := 0 + for _, v := range dirfiles { + if filetypes.IsImage(v) { + directoryState.images = append(directoryState.images, v.Name()) + insertIntoFileList(directoryState.images[i]) + if v.Name() == filepath.Base(file) { + directoryState.i = i + moveSelectionInFileList(i) + } + i++ } } updateImage(file) @@ -225,19 +227,18 @@ func constructFileList() { fileList = nil fileListBindVar.Set("0") })) + clearFileList() + for i := range directoryState.images { + insertIntoFileList(directoryState.images[i]) + if directoryState.i == i { + moveSelectionInFileList(i) + } + } } func showFileList() { if fileList == nil { constructFileList() - // repopulate - lb.Delete("0", "end") - for i := range directoryState.images { - lb.Insert("end", directoryState.images[i]) - if directoryState.i == i { - lb.SelectionSet(i) - } - } } tk.WmDeiconify(fileList.Window) fileListBindVar.Set("1")