steam-immich/internal/screenshots.go
2025-10-29 01:34:11 +01:00

53 lines
1.1 KiB
Go

package steamimmich
import (
"os"
"path/filepath"
"regexp"
"strings"
)
func listScreenshots(steamUserdataDir string) (map[string][]string, error) {
if _, err := os.Stat(steamUserdataDir); os.IsNotExist(err) {
return nil, err
}
// Pattern: userdata/<steamid>/760/remote/<appid>/screenshots
reAppDir := regexp.MustCompile(`.*/760/remote/([0-9]+)/screenshots$`)
screenshotFiles := make(map[string][]string)
err := filepath.WalkDir(steamUserdataDir, func(path string, d os.DirEntry, err error) error {
if err != nil {
return nil
}
if !d.IsDir() {
return nil
}
if reAppDir.MatchString(path) {
appid := reAppDir.FindStringSubmatch(path)[1]
files, _ := os.ReadDir(path)
for _, f := range files {
if f.IsDir() {
continue
}
name := strings.ToLower(f.Name())
if strings.HasSuffix(name, ".jpg") ||
strings.HasSuffix(name, ".jpeg") ||
strings.HasSuffix(name, ".png") {
fullPath := filepath.Join(path, f.Name())
screenshotFiles[appid] = append(screenshotFiles[appid], fullPath)
}
}
}
return nil
})
if err != nil {
return nil, err
}
return screenshotFiles, nil
}