mirror of
https://github.com/Squibid/rph.git
synced 2025-10-20 03:44:04 +00:00
- Add vendordep add - Add vendordep remove - Add vendordep list - Refactor downloading
92 lines
1.7 KiB
Go
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
|
|
}
|