package client import ( "flag" "os" "os/signal" "ChronoTomato/internal/helper" "ChronoTomato/internal/shared" "ChronoTomato/internal/websocket" "atomicgo.dev/keyboard" "atomicgo.dev/keyboard/keys" "git.smsvc.net/pomodoro/GoTomato/pkg/models" ) var interrupt = make(chan os.Signal, 1) func Start() { signal.Notify(interrupt, os.Interrupt) parameter_url := flag.String("url", "", "GoTomato Server URL (eg ws://localhost:8080/ws)") parameter_password := flag.String("password", "", "Control password for pomodoro session (optional)") configfile := flag.String("config", "~/.config/ChronoTomato.yml", "path to config file (optional)") flag.Parse() config := helper.ParseConfig(*configfile) url := *parameter_url if url == "" { url = config.URL } password := *parameter_password if password == "" { password = config.Password } conn := websocket.Connect(url) if config.PomodoroConfig != (models.GoTomatoPomodoroConfig{}) { websocket.Send_updateSettings(conn, config.Password, config.PomodoroConfig) } go websocket.ProcessServerMessages(conn) pomodoro := &shared.ServerMessage keyboard.Listen(func(key keys.Key) (stop bool, err error) { switch key.String() { case "space": if !pomodoro.Ongoing { websocket.SendCmd(conn, password, "start") return false, nil } if pomodoro.Paused { websocket.SendCmd(conn, password, "resume") return false, nil } else { websocket.SendCmd(conn, password, "pause") return false, nil } case "r": websocket.SendCmd(conn, password, "stop") return false, nil case "q": interrupt <- os.Interrupt return true, nil } return false, nil }) websocket.WaitForDisconnect(conn, interrupt) }