kpsync/app/application.go

74 lines
987 B
Go

package app
import (
"os"
"os/signal"
"syscall"
"fyne.io/systray"
"mikescher.com/kpsync"
)
type Application struct {
config kpsync.Config
trayReady bool
sigStopChan chan bool
sigErrChan chan error
dbFile string
stateFile string
}
func NewApplication() *Application {
cfg := kpsync.LoadConfig()
return &Application{
config: cfg,
trayReady: false,
sigStopChan: make(chan bool, 128),
sigErrChan: make(chan error, 128),
}
}
func (app *Application) Run() {
go func() { app.initTray() }()
go func() {
err := app.initSync()
if err != nil {
app.sigErrChan <- err
return
}
err = app.runSyncLoop()
if err != nil {
app.sigErrChan <- err
return
}
}()
sigTerm := make(chan os.Signal, 1)
signal.Notify(sigTerm, os.Interrupt, syscall.SIGTERM)
select {
case <-sigTerm:
// TODO term
case _ = <-app.sigErrChan:
// TODO stop
case _ = <-app.sigStopChan:
// TODO stop
}
if app.trayReady {
systray.Quit()
}
}