// +build !js package gioui import ( "encoding/json" "io/ioutil" "path/filepath" "gopkg.in/yaml.v3" "github.com/sqweek/dialog" "github.com/vsariola/sointu" ) func (t *Tracker) LoadSongFile() { filename, err := dialog.File().Filter("Sointu YAML song", "yml").Filter("Sointu JSON song", "json").Title("Load song").Load() if err != nil { return } bytes, err := ioutil.ReadFile(filename) if err != nil { return } var song sointu.Song if errJSON := json.Unmarshal(bytes, &song); errJSON != nil { if errYaml := yaml.Unmarshal(bytes, &song); errYaml != nil { return } } t.SetSong(song) } func (t *Tracker) SaveSongFile() { filename, err := dialog.File().Filter("Sointu YAML song", "yml").Filter("Sointu JSON song", "json").Title("Save song").Save() if err != nil { return } var extension = filepath.Ext(filename) var contents []byte if extension == "json" { contents, err = json.Marshal(t.Song()) } else { contents, err = yaml.Marshal(t.Song()) } if err != nil { return } if extension == "" { filename = filename + ".yml" } ioutil.WriteFile(filename, contents, 0644) }