feat(tracker): save recovery file regularly & load it on startup

This commit is contained in:
5684185+vsariola@users.noreply.github.com 2023-10-01 14:45:45 +03:00
parent 12f15d1066
commit df2605fddd
5 changed files with 357 additions and 292 deletions

View File

@ -33,7 +33,10 @@ func main() {
defer audioContext.Close() defer audioContext.Close()
modelMessages := make(chan interface{}, 1024) modelMessages := make(chan interface{}, 1024)
playerMessages := make(chan tracker.PlayerMessage, 1024) playerMessages := make(chan tracker.PlayerMessage, 1024)
model := tracker.NewModel(modelMessages, playerMessages) model, err := tracker.LoadRecovery(modelMessages, playerMessages)
if err != nil {
model = tracker.NewModel(modelMessages, playerMessages)
}
player := tracker.NewPlayer(cmd.DefaultService, playerMessages, modelMessages) player := tracker.NewPlayer(cmd.DefaultService, playerMessages, modelMessages)
tracker := gioui.NewTracker(model, cmd.DefaultService) tracker := gioui.NewTracker(model, cmd.DefaultService)
output := audioContext.Output() output := audioContext.Output()

View File

@ -49,7 +49,10 @@ func init() {
vst2.PluginAllocator = func(h vst2.Host) (vst2.Plugin, vst2.Dispatcher) { vst2.PluginAllocator = func(h vst2.Host) (vst2.Plugin, vst2.Dispatcher) {
modelMessages := make(chan interface{}, 1024) modelMessages := make(chan interface{}, 1024)
playerMessages := make(chan tracker.PlayerMessage, 1024) playerMessages := make(chan tracker.PlayerMessage, 1024)
model := tracker.NewModel(modelMessages, playerMessages) model, err := tracker.LoadRecovery(modelMessages, playerMessages)
if err != nil {
model = tracker.NewModel(modelMessages, playerMessages)
}
player := tracker.NewPlayer(cmd.DefaultService, playerMessages, modelMessages) player := tracker.NewPlayer(cmd.DefaultService, playerMessages, modelMessages)
tracker := gioui.NewTracker(model, cmd.DefaultService) tracker := gioui.NewTracker(model, cmd.DefaultService)
tracker.SetInstrEnlarged(true) // start the vsti with the instrument editor enlarged tracker.SetInstrEnlarged(true) // start the vsti with the instrument editor enlarged

View File

@ -148,8 +148,6 @@ func NewTracker(model *tracker.Model, synthService sointu.SynthService) *Tracker
t.Theme.Palette.Fg = primaryColor t.Theme.Palette.Fg = primaryColor
t.Theme.Palette.ContrastFg = black t.Theme.Palette.ContrastFg = black
t.TrackEditor.Focus() t.TrackEditor.Focus()
t.SetOctave(4)
t.ResetSong()
t.quitWG.Add(1) t.quitWG.Add(1)
return t return t
} }
@ -160,6 +158,7 @@ func (t *Tracker) Main() {
app.Size(unit.Dp(800), unit.Dp(600)), app.Size(unit.Dp(800), unit.Dp(600)),
app.Title("Sointu Tracker"), app.Title("Sointu Tracker"),
) )
recoveryTicker := time.NewTicker(time.Second * 10)
t.Explorer = explorer.NewExplorer(w) t.Explorer = explorer.NewExplorer(w)
var ops op.Ops var ops op.Ops
mainloop: mainloop:
@ -180,6 +179,7 @@ mainloop:
} }
select { select {
case <-t.quitChannel: case <-t.quitChannel:
recoveryTicker.Stop()
break mainloop break mainloop
case e := <-t.errorChannel: case e := <-t.errorChannel:
t.Alert.Update(e.Error(), Error, time.Second*5) t.Alert.Update(e.Error(), Error, time.Second*5)
@ -211,9 +211,12 @@ mainloop:
t.Layout(gtx, w) t.Layout(gtx, w)
e.Frame(gtx.Ops) e.Frame(gtx.Ops)
} }
case <-recoveryTicker.C:
go t.SaveRecovery()
} }
} }
w.Perform(system.ActionClose) w.Perform(system.ActionClose)
t.SaveRecovery()
t.quitWG.Done() t.quitWG.Done()
} }

File diff suppressed because it is too large Load Diff

View File

@ -296,6 +296,9 @@ loop:
} }
func (p *Player) compileOrUpdateSynth() { func (p *Player) compileOrUpdateSynth() {
if p.bpm <= 0 {
return // bpm not set yet
}
if p.synth != nil { if p.synth != nil {
err := p.synth.Update(p.patch, p.bpm) err := p.synth.Update(p.patch, p.bpm)
if err != nil { if err != nil {