Files
rph/cmd/template/store.go
Squibid 2a22f41fac feat(vendordep): add vendordep management
- Add vendordep add
- Add vendordep remove
- Add vendordep list
- Refactor downloading
2025-10-17 14:15:37 -04:00

92 lines
1.7 KiB
Go

package template
import (
"context"
"errors"
"io/fs"
"log/slog"
"os"
"path/filepath"
"rph/state"
"github.com/mholt/archives"
)
const dataFile = "templates.bin"
const zipFile = "templates.zip"
func saveArchiveVersion(version string) error {
return os.WriteFile(
filepath.Join(state.CachePath, dataFile),
[]byte(version),
0644,
)
}
func LoadArchiveVersion() (string, error) {
data, err := os.ReadFile(filepath.Join(state.CachePath, dataFile))
if err != nil {
return "", err
}
return string(data), nil
}
func OpenArchive(ctx context.Context) (fsys fs.FS, err error) {
fsys, err = archives.FileSystem(ctx, filepath.Join(state.CachePath, zipFile), nil)
if err != nil {
return nil, err
}
return fsys, nil
}
func GetLangs() ([]string, error) {
var langs []string
fsys, err := OpenArchive(context.Background())
if err != nil {
slog.Error("Failed to open archive", "err", err)
return nil, err
}
entries, err := fs.ReadDir(fsys, ".")
if err != nil {
slog.Error("No files found in fsys", "err", err)
return nil, err
}
for _, entry := range entries {
if entry.IsDir() {
langs = append(langs, entry.Name())
}
}
return langs, nil
}
func GetProjects(lang string) ([]string, error) {
var projects []string
if lang == "" {
return nil, errors.New("lang must be set")
}
fsys, err := OpenArchive(context.Background())
if err != nil {
slog.Error("Failed to open archive", "err", err)
return nil, err
}
entries, err := fs.ReadDir(fsys, filepath.Join(".", lang))
if err != nil {
slog.Error("No files found in fsys", "err", err)
return nil, err
}
for _, entry := range entries {
if entry.IsDir() {
projects = append(projects, entry.Name())
}
}
return projects, nil
}