cut down on the number of loops through the directory listing

This commit is contained in:
2025-05-14 22:42:04 -04:00
parent 0c4572727c
commit 430e196859

37
main.go
View File

@@ -93,25 +93,27 @@ func newBrowse(file string) {
log.Printf("could not open dir: %v", err) log.Printf("could not open dir: %v", err)
return return
} }
directoryState.images = []string{} // natsort the directory listing first...
for _, v := range dirfiles { slices.SortFunc(dirfiles, func(a, b os.DirEntry) int {
if filetypes.IsImage(v) { if natural.Less(a.Name(), b.Name()) {
directoryState.images = append(directoryState.images, v.Name())
}
}
slices.SortFunc(directoryState.images, func(a, b string) int {
if natural.Less(a, b) {
return -1 return -1
} }
return 1 return 1
}) })
// ...that way we only have to do this loop once.
clearFileList() clearFileList()
for i, v := range directoryState.images { directoryState.images = []string{}
i := 0
for _, v := range dirfiles {
if filetypes.IsImage(v) {
directoryState.images = append(directoryState.images, v.Name())
insertIntoFileList(directoryState.images[i]) insertIntoFileList(directoryState.images[i])
if v == filepath.Base(file) { if v.Name() == filepath.Base(file) {
directoryState.i = i directoryState.i = i
moveSelectionInFileList(i) moveSelectionInFileList(i)
} }
i++
}
} }
updateImage(file) updateImage(file)
} }
@@ -225,19 +227,18 @@ func constructFileList() {
fileList = nil fileList = nil
fileListBindVar.Set("0") fileListBindVar.Set("0")
})) }))
clearFileList()
for i := range directoryState.images {
insertIntoFileList(directoryState.images[i])
if directoryState.i == i {
moveSelectionInFileList(i)
}
}
} }
func showFileList() { func showFileList() {
if fileList == nil { if fileList == nil {
constructFileList() 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) tk.WmDeiconify(fileList.Window)
fileListBindVar.Set("1") fileListBindVar.Set("1")