blob: 0da3bbd54413c6ac47cd895428906bd386b3ca32 [file] [log] [blame]
package apprepo
import (
"io"
"io/fs"
"log"
"strings"
"golang.org/x/mod/semver"
)
type Loader interface {
Load() ([]App, error)
}
type fsApp struct {
name string
version string
fs fs.FS
path string
}
func (a *fsApp) Name() string {
return a.name
}
func (a *fsApp) Version() string {
return a.version
}
func (a *fsApp) Reader() (io.ReadCloser, error) {
return a.fs.Open(a.path)
}
type fsLoader struct {
fs fs.FS
}
func NewFSLoader(fs fs.FS) Loader {
return &fsLoader{fs}
}
func (l *fsLoader) Load() ([]App, error) {
entries, err := fs.ReadDir(l.fs, ".")
if err != nil {
return nil, err
}
apps := make([]App, 0)
for _, e := range entries {
log.Println(e.Name())
if !e.IsDir() && strings.HasSuffix(e.Name(), ".tar.gz") {
items := strings.Split(strings.TrimSuffix(e.Name(), ".tar.gz"), "-")
if len(items) <= 1 {
continue
}
version := items[len(items)-1]
if semver.IsValid(version) || semver.IsValid("v"+version) {
name := strings.Join(items[:len(items)-1], "-")
apps = append(apps, &fsApp{name, strings.TrimPrefix(version, "v"), l.fs, e.Name()})
}
}
}
return apps, nil
}