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

43
main.go
View File

@@ -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")