diff --git a/server_apps.go b/server_apps.go index fe20e0cf30fb11e2de9e8c4599203534e1ecd7d4..02214792c8cc9c18e6d9a8c414458ca5cc00b202 100644 --- a/server_apps.go +++ b/server_apps.go @@ -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{ @@ -73,6 +84,7 @@ type appInfo struct { firstErr error tags []string status *appStatus + style *appStyle } type GLProject struct { @@ -296,6 +308,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 +342,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 +350,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) { @@ -617,6 +660,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 +679,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{ @@ -660,7 +705,8 @@ type jsonApp struct { 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 +724,7 @@ func makeJsonApp(a *appDescriptor) jsonApp { Stars: a.appInfo.stars, Flow3rSeed: a.appInfo.flow3rSeed, Tags: a.appInfo.tags, + Style: a.appInfo.style, } if a.appInfo.status != nil{ ret.Status = &jsonAppStatus{ @@ -690,6 +737,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, } } }