diff options
| author | Leonardo Bishop <me@leonardobishop.net> | 2025-07-08 23:26:05 +0100 |
|---|---|---|
| committer | Leonardo Bishop <me@leonardobishop.net> | 2025-07-08 23:26:05 +0100 |
| commit | cdb75d3fcbc9339b897f8c6ff4d69a577f017393 (patch) | |
| tree | 5e757cd236540c2cea9874c1bc09f19548db05d5 /pkg/index/scan.go | |
| parent | b56101f1a11552067f594679a497ebd4cf7427d4 (diff) | |
Rewrite in Go
Diffstat (limited to 'pkg/index/scan.go')
| -rw-r--r-- | pkg/index/scan.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/pkg/index/scan.go b/pkg/index/scan.go new file mode 100644 index 0000000..dd3d266 --- /dev/null +++ b/pkg/index/scan.go @@ -0,0 +1,47 @@ +package index + +import ( + "fmt" + "log/slog" + "os" + "path" + + "github.com/LMBishop/scrapbook/pkg/config" + "github.com/LMBishop/scrapbook/pkg/site" +) + +func ScanDirectory(dir string, dst *SiteIndex) error { + entries, err := os.ReadDir(dir) + if err != nil { + return err + } + + for _, e := range entries { + if !e.IsDir() { + continue + } + + siteName := e.Name() + sitePath := path.Join(dir, siteName) + cfg, err := readSiteConfig(sitePath) + if err != nil { + slog.Warn("failed to read site", "site", siteName, "reason", err) + continue + } + + site := site.NewSite(siteName, sitePath, cfg) + dst.AddSite(site) + } + + return nil +} + +func readSiteConfig(dir string) (*config.SiteConfig, error) { + siteFile := path.Join(dir, "site.toml") + cfg := &config.SiteConfig{} + err := config.ReadSiteConfig(siteFile, cfg) + if err != nil { + return nil, fmt.Errorf("site file invalid: %s", err) + } + return cfg, nil +} |
