mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 02:30:48 +08:00
70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"path"
|
|
"path/filepath"
|
|
"runtime"
|
|
)
|
|
|
|
// FrameworkMetadata contains information about a given framework
|
|
type FrameworkMetadata struct {
|
|
Name string `json:"name"`
|
|
BuildTag string `json:"buildtag"`
|
|
Description string `json:"description"`
|
|
}
|
|
|
|
// Utility function for creating new FrameworkMetadata structs
|
|
func loadFrameworkMetadata(pathToMetadataJSON string) (*FrameworkMetadata, error) {
|
|
result := &FrameworkMetadata{}
|
|
configData, err := ioutil.ReadFile(pathToMetadataJSON)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// Load and unmarshall!
|
|
err = json.Unmarshal(configData, result)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// GetFrameworks returns information about all the available frameworks
|
|
func GetFrameworks() ([]*FrameworkMetadata, error) {
|
|
|
|
var err error
|
|
|
|
// Calculate framework base dir
|
|
_, filename, _, _ := runtime.Caller(1)
|
|
frameworksBaseDir := filepath.Join(path.Dir(filename), "frameworks")
|
|
|
|
// Get the subdirectories
|
|
fs := NewFSHelper()
|
|
frameworkDirs, err := fs.GetSubdirs(frameworksBaseDir)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Prepare result
|
|
result := []*FrameworkMetadata{}
|
|
|
|
// Iterate framework directories, looking for metadata.json files
|
|
for _, frameworkDir := range frameworkDirs {
|
|
var frameworkMetadata FrameworkMetadata
|
|
metadataFile := filepath.Join(frameworkDir, "metadata.json")
|
|
jsonData, err := ioutil.ReadFile(metadataFile)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
err = json.Unmarshal(jsonData, &frameworkMetadata)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result = append(result, &frameworkMetadata)
|
|
}
|
|
|
|
// Read in framework metadata
|
|
return result, nil
|
|
}
|