diff --git a/internal/components/gallery/dir.go b/internal/components/gallery/dir.go new file mode 100644 index 0000000..0207d70 --- /dev/null +++ b/internal/components/gallery/dir.go @@ -0,0 +1,40 @@ +package gallery + +import ( + "os" + "path" +) + +type fileWithPath struct { + os.FileInfo + path string +} + +func (f fileWithPath) Name() string { + return path.Join(f.path, f.FileInfo.Name()) +} + +func (s *Service) readDirRecursive(path string) (files []os.FileInfo, err error) { + return s.readDirRecursiveTo([]os.FileInfo{}, path) +} + +func (s *Service) readDirRecursiveTo(files []os.FileInfo, p ...string) ([]os.FileInfo, error) { + localFiles, err := s.fs.ReadDir(path.Join(p...)) + if err != nil { + return files, err + } + + for _, file := range localFiles { + if file.IsDir() { + newP := append(p, file.Name()) + files, err = s.readDirRecursiveTo(files, newP...) + if err != nil { + return files, err + } + } else { + files = append(files, fileWithPath{file, path.Join(p[1:]...)}) + } + } + + return files, nil +} diff --git a/internal/components/gallery/image.go b/internal/components/gallery/image.go index f70ff55..5a48548 100644 --- a/internal/components/gallery/image.go +++ b/internal/components/gallery/image.go @@ -41,10 +41,11 @@ func (s *Service) autoRefresh() { } func (s *Service) assembleImageList(ctx context.Context) error { - files, err := s.fs.ReadDir(s.cfg.Path) + files, err := s.readDirRecursive(s.cfg.Path) if err != nil { return fmt.Errorf("could not read contents of %s: %w", s.cfg.Path, err) } + slog.Debug("loaded files", "files", files) savedHash, _ := s.cache.Do(ctx, s.cache.B().Get().Key(hashKey).Build()).AsBytes() @@ -67,6 +68,7 @@ func (s *Service) assembleImageList(ctx context.Context) error { imagePath := path.Join(s.cfg.Path, file.Name()) img, err := s.img.GetImage(imagePath) if err != nil || img.Image == nil { + slog.Warn("could not get image for gallery", "err", err, "img", img) continue }