diff --git a/server_apps.go b/server_apps.go index fe20e0cf30fb11e2de9e8c4599203534e1ecd7d4..ddedd333bb490ec602857af0b406ca8b8617658d 100644 --- a/server_apps.go +++ b/server_apps.go @@ -18,7 +18,7 @@ import ( "strings" "strconv" "time" - "math" + "math" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/config" @@ -28,10 +28,21 @@ import ( "github.com/pelletier/go-toml/v2" ) +type appStyleFloatie struct { + Symbol string `json:"symbol"` + Color string `json:"color"` +} + +type appStyle struct { + Background string `json:"background"` + Floaties []appStyleFloatie `json:"floaties"` +} + type appPatch struct{ - repository string - zip []byte - targz []byte + version int + repository string + zip []byte + targz []byte } type appStatus struct{ @@ -62,6 +73,7 @@ type appInfo struct { author string description string version int + slug string commit string stars int flow3rSeed string @@ -73,6 +85,7 @@ type appInfo struct { firstErr error tags []string status *appStatus + style *appStyle } type GLProject struct { @@ -296,6 +309,7 @@ func (s *server) parseAppToml(ctx context.Context, pathInRepo string, obj *objec Description string Version int } + Style map[string]interface{} } dec := toml.NewDecoder(reader) err = dec.Decode(&data) @@ -329,7 +343,7 @@ func (s *server) parseAppToml(ctx context.Context, pathInRepo string, obj *objec return nil, fmt.Errorf("metadata description too long (must be <= 140 chars)") } - return &appInfo{ + ret := appInfo{ name: data.App.Name, author: data.Metadata.Author, menu: data.App.Category, @@ -337,7 +351,37 @@ func (s *server) parseAppToml(ctx context.Context, pathInRepo string, obj *objec version: data.Metadata.Version, commit: obj.Hash.String(), commitObj: obj, - }, nil + style: nil, + } + + if col, ok := data.Style["background"].(string); ok { + style := appStyle{ + Background: col, + } + if floaties, ok := data.Style["floaties"].([]interface{}); ok { + for x:=0; x<len(floaties); x++ { + floatie, ok := floaties[x].(map[string]interface{}) + if !ok { + continue + } + col, ok := floatie["color"].(string) + if !ok { + continue + } + symbol, ok := floatie["symbol"].(string) + if !ok { + symbol = "flow3r" + } + f := appStyleFloatie{ + Symbol: symbol, + Color: col, + } + style.Floaties = append(style.Floaties, f) + } + } + ret.style = &style + } + return &ret, nil } func (s *server) getAppInfo(ctx context.Context, pathInRepo, repo string, slug *string) (*appInfo, error) { @@ -438,6 +482,8 @@ func (s *server) getAppInfo(ctx context.Context, pathInRepo, repo string, slug * } app.targz = tbytes + app.slug = strings.ReplaceAll(slug_str, "/", "-") + // Calculate an 8 digit flow3r seed which can be used to install the // app. This is based on md5 so ambitious hack3rs can force a certain // app seed :) @@ -617,6 +663,7 @@ func (s *server) getAppRegistry(ctx context.Context) (*appRegistry, error) { repository: patch, zip: patch_info.zip, targz: patch_info.targz, + version: patch_info.version, } } } @@ -635,9 +682,10 @@ func (s *server) getAppRegistry(ctx context.Context) (*appRegistry, error) { } type jsonAppPatch struct{ - RepoURL string `json:"repoUrl"` - DownloadURL string `json:"downloadUrl"` - TarDownloadURL string `json:"tarDownloadUrl"` + Version int `json:"version"` + RepoURL string `json:"repoUrl"` + DownloadURL string `json:"downloadUrl"` + TarDownloadURL string `json:"tarDownloadUrl"` } type jsonAppStatus struct{ @@ -657,10 +705,12 @@ type jsonApp struct { Description string `json:"description"` Version int `json:"version"` Stars int `json:"stars"` + Slug string `json:"slug"` Tags []string `json:"tags"` Timestamp time.Time `json:"timestamp"` Flow3rSeed string `json:"flow3rSeed"` - Status *jsonAppStatus `json:"status"` + Status *jsonAppStatus `json:"status"` + Style *appStyle `json:"style"` } func makeJsonApp(a *appDescriptor) jsonApp { @@ -678,6 +728,8 @@ func makeJsonApp(a *appDescriptor) jsonApp { Stars: a.appInfo.stars, Flow3rSeed: a.appInfo.flow3rSeed, Tags: a.appInfo.tags, + Slug: a.appInfo.slug, + Style: a.appInfo.style, } if a.appInfo.status != nil{ ret.Status = &jsonAppStatus{ @@ -690,6 +742,7 @@ func makeJsonApp(a *appDescriptor) jsonApp { RepoURL: "https://git.flow3r.garden/" + pa, DownloadURL: fmt.Sprintf("%sapps/zip/%s.zip", flagBaseURL, pa), TarDownloadURL: fmt.Sprintf("%sapps/tar/%s.tar.gz", flagBaseURL, pa), + Version: a.appInfo.status.patch.version, } } }