From 0029f9367c7697ee97d8de51dca9a67267705f44 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Wed, 27 May 2026 22:48:04 -0700 Subject: Correctly handle errors for missing files --- thumbnailer.go | 62 ++++++++++++++++++++++++++++------------------------------ 1 file changed, 30 insertions(+), 32 deletions(-) (limited to 'thumbnailer.go') diff --git a/thumbnailer.go b/thumbnailer.go index 3e1be07..a593550 100644 --- a/thumbnailer.go +++ b/thumbnailer.go @@ -150,17 +150,14 @@ func compositeImages(w io.Writer, images []img, imageWidth, imagesPerRow int) { } func thumbnailFiles(w io.Writer, cols, lines, imagesPerRow int, args []string) error { - var images []img - for _, arg := range args { + images := make([]img, len(args)) + for i, arg := range args { image, err := load(arg) if err != nil { - if errors.Is(err, errNotAnImage) { - continue - } return err } imageString, width := printImg(image, cols, lines) - images = append(images, img{imageString, width, filepath.Base(arg)}) + images[i] = img{imageString, width, filepath.Base(arg)} } compositeImages(w, images, cols, imagesPerRow) return nil @@ -178,6 +175,27 @@ func readDir(d string) ([]string, error) { return filenames, nil } +func thumbnailDir(w io.Writer, cols, lines, imagesPerRow int, dir string) error { + files, err := readDir(dir) + if err != nil { + return err + } + var images []img + for _, file := range files { + image, err := load(file) + if err != nil { + if errors.Is(err, errNotAnImage) { + continue + } + return err + } + imageString, width := printImg(image, cols, lines) + images = append(images, img{imageString, width, filepath.Base(file)}) + } + compositeImages(w, images, cols, imagesPerRow) + return nil +} + func thumbnailer(args []string) error { cols := *x lines := *y @@ -192,27 +210,9 @@ func thumbnailer(args []string) error { imagesPerRow := termCols / (cols + 1) var files, dirs []string - switch len(args) { - case 0: - files, err = readDir(".") - if err != nil { - return err - } - case 1: - arg := args[0] - isDir, err := isDir(arg) - if err != nil { - return err - } - if isDir { - files, err = readDir(arg) - if err != nil { - return err - } - } else { - files = []string{arg} - } - default: + if len(args) == 0 { + dirs = []string{"."} + } else { for _, arg := range args { isDir, err := isDir(arg) if err != nil { @@ -237,12 +237,10 @@ func thumbnailer(args []string) error { if i > 0 { fmt.Fprintln(w) } - fmt.Fprintf(w, "%s:\n", d) - dirFiles, err := readDir(d) - if err != nil { - return err + if len(dirs) > 1 { + fmt.Fprintf(w, "%s:\n", d) } - if err := thumbnailFiles(w, cols, lines, imagesPerRow, dirFiles); err != nil { + if err := thumbnailDir(w, cols, lines, imagesPerRow, d); err != nil { return err } } -- cgit v1.3.1