package main import ( "context" "gitea.neitzel.de/konrad/funknetz/audio" "gitea.neitzel.de/konrad/funknetz/station" ) // App is the window's view of the station. type App struct { cancel context.CancelFunc station *station.Station } func (a *App) startup(ctx context.Context) { runCtx, cancel := context.WithCancel(ctx) a.cancel = cancel if err := audio.Start(runCtx, a.station.WriteMicrophone, a.station.TakePlayback); err != nil { a.station.Fail("could not open the audio device") return } go func() { _ = a.station.Run(runCtx) }() // Run returns when the window closes. } func (a *App) shutdown(context.Context) { if a.cancel != nil { a.cancel() } } // State returns the station state the page renders. func (a *App) State() station.State { return a.station.State() } // HoldButton reports that the on-screen button is held. func (a *App) HoldButton() { a.station.HoldButton() } // ReleaseButton reports that the on-screen button was released. func (a *App) ReleaseButton() { a.station.ReleaseButton() } // HoldSpace reports that Space is held. func (a *App) HoldSpace() { a.station.HoldSpace() } // ReleaseSpace reports that Space was released. func (a *App) ReleaseSpace() { a.station.ReleaseSpace() } func openStation(args []string) (*station.Station, error) { path, err := resolveConfigPath(args) if err != nil { return nil, err } return station.New(station.Options{ConfigPath: path}) }