web-tuner/scoresets.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)
}