refactor: make ReadApps main API entrypoint

This allows AppsReadFS/AppsReadWeb to be used behind the scenes of this
API for the conditional loading logic. All functions are left as public
for now while we're experimenting.
This commit is contained in:
2021-07-22 14:51:56 +02:00
parent 56cec1580a
commit 381de28e83

View File

@ -94,6 +94,28 @@ func AppsFSIsLatest() (bool, error) {
return true, nil return true, nil
} }
func ReadApps() (Apps, error) {
apps := make(Apps)
appsFSIsLatest, err := AppsFSIsLatest()
if err != nil {
return nil, err
}
if !appsFSIsLatest {
if err := ReadAppsWeb(&apps); err != nil {
return nil, err
}
return apps, nil
}
if err := ReadAppsFS(&apps); err != nil {
return nil, err
}
return apps, nil
}
func ReadAppsFS(target interface{}) error { func ReadAppsFS(target interface{}) error {
appsJsonFS, err := ioutil.ReadFile(config.APPS_JSON) appsJsonFS, err := ioutil.ReadFile(config.APPS_JSON)
if err != nil { if err != nil {
@ -105,36 +127,21 @@ func ReadAppsFS(target interface{}) error {
return nil return nil
} }
func ReadAppsWeb() (Apps, error) { func ReadAppsWeb(target interface{}) error {
apps := make(Apps) if err := readJson(AppsUrl, &target); err != nil {
return err
}
appsFSIsLatest, err := AppsFSIsLatest() appsJson, err := json.MarshalIndent(target, "", " ")
if err != nil { if err != nil {
return nil, err return err
} }
if !appsFSIsLatest { if err := ioutil.WriteFile(config.APPS_JSON, appsJson, 0644); err != nil {
if err := readJson(AppsUrl, &apps); err != nil { return err
return nil, err
}
appsJson, err := json.MarshalIndent(apps, "", " ")
if err != nil {
return nil, err
}
if err := ioutil.WriteFile(config.APPS_JSON, appsJson, 0644); err != nil {
return nil, err
}
return apps, nil
} }
if err := ReadAppsFS(&apps); err != nil { return nil
return nil, err
}
return apps, nil
} }
func SortByAppName(apps Apps) []string { func SortByAppName(apps Apps) []string {
@ -150,7 +157,7 @@ var recipeListCommand = &cli.Command{
Name: "list", Name: "list",
Aliases: []string{"ls"}, Aliases: []string{"ls"},
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appSpecs, err := ReadAppsWeb() apps, err := ReadApps()
if err != nil { if err != nil {
logrus.Fatal(err.Error()) logrus.Fatal(err.Error())
} }