package client import ( "flag" "os" "os/signal" "ChronoTomato/internal/shared" "ChronoTomato/internal/websocket" "atomicgo.dev/keyboard" "atomicgo.dev/keyboard/keys" ) var interrupt = make(chan os.Signal, 1) func Start() { signal.Notify(interrupt, os.Interrupt) GoTomatoUrl := flag.String("url", "ws://localhost:8080/ws", "GoTomato Server URL") password := flag.String("password", "", "Control password for pomodoro session (optional)") autoStart := flag.Bool("start", false, "Immediately start a Pomodoro") flag.Parse() conn := websocket.Connect(*GoTomatoUrl) websocket.Send_updateSettings(conn, *password) if *autoStart { websocket.SendCmd(conn, *password, "start") } go websocket.ProcessServerMessages(conn) keyboard.Listen(func(key keys.Key) (stop bool, err error) { switch key.String() { case "space": if !shared.ServerMessage.Ongoing { websocket.SendCmd(conn, *password, "start") return false, nil } if shared.ServerMessage.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) }