55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
)
|
|
|
|
type ScoreSet struct {
|
|
Name string `json:"name"`
|
|
Type string `json:"type,omitempty"`
|
|
Shapes []ShapeDefinition `json:"shapes"`
|
|
}
|
|
|
|
type ScoreSetsData struct {
|
|
Sets []ScoreSet `json:"sets"`
|
|
Selected int `json:"selected"`
|
|
}
|
|
|
|
func DefaultScoreSetsData() ScoreSetsData {
|
|
return ScoreSetsData{
|
|
Sets: []ScoreSet{
|
|
{Name: "Standard Shapes", Shapes: DefaultShapes()},
|
|
{Name: "Chord Density", Type: "density", Shapes: DefaultShapes()},
|
|
},
|
|
Selected: 0,
|
|
}
|
|
}
|
|
|
|
func LoadScoreSets(path string) (ScoreSetsData, error) {
|
|
var data ScoreSetsData
|
|
raw, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return data, err
|
|
}
|
|
err = json.Unmarshal(raw, &data)
|
|
if err != nil {
|
|
return data, err
|
|
}
|
|
if len(data.Sets) == 0 {
|
|
return DefaultScoreSetsData(), nil
|
|
}
|
|
if data.Selected < 0 || data.Selected >= len(data.Sets) {
|
|
data.Selected = 0
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
func SaveScoreSets(path string, data ScoreSetsData) error {
|
|
raw, err := json.MarshalIndent(data, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(path, raw, 0644)
|
|
}
|