Compare commits

..

No commits in common. "32a33dc68492cb27918afc244a8c0dcfa954ed91" and "0b2f83cd35bbc73fcedd5944277297c351a835db" have entirely different histories.

3 changed files with 17 additions and 12 deletions

View file

@ -14,7 +14,7 @@ var PomodoroConfig = models.GoTomatoTimerConfig{
Sessions: 4, Sessions: 4,
} }
var pomodoroOngoing bool var pomodoroRunning bool
var pomodoroPaused bool var pomodoroPaused bool
var pomodoroResetChannel = make(chan bool, 1) var pomodoroResetChannel = make(chan bool, 1)
@ -26,7 +26,7 @@ var mu sync.Mutex // to synchronize access to shared state
// RunPomodoroTimer iterates the Pomodoro work/break sessions. // RunPomodoroTimer iterates the Pomodoro work/break sessions.
func RunPomodoroTimer(clients map[*websocket.Conn]*models.Client) { func RunPomodoroTimer(clients map[*websocket.Conn]*models.Client) {
mu.Lock() mu.Lock()
pomodoroOngoing = true pomodoroRunning = true
pomodoroPaused = false pomodoroPaused = false
mu.Unlock() mu.Unlock()
@ -46,14 +46,14 @@ func RunPomodoroTimer(clients map[*websocket.Conn]*models.Client) {
} }
mu.Lock() mu.Lock()
pomodoroOngoing = false pomodoroRunning = false
mu.Unlock() mu.Unlock()
} }
// ResetPomodoro resets the running Pomodoro timer. // ResetPomodoro resets the running Pomodoro timer.
func ResetPomodoro(clients map[*websocket.Conn]*models.Client) { func ResetPomodoro(clients map[*websocket.Conn]*models.Client) {
mu.Lock() mu.Lock()
pomodoroOngoing = false // Reset the running state pomodoroRunning = false // Reset the running state
pomodoroPaused = false // Reset the paused state pomodoroPaused = false // Reset the paused state
mu.Unlock() mu.Unlock()
@ -84,10 +84,10 @@ func ResumePomodoro() {
pomodoroResumeChannel <- true pomodoroResumeChannel <- true
} }
func IsPomodoroOngoing() bool { func IsPomodoroRunning() bool {
mu.Lock() mu.Lock()
defer mu.Unlock() // Ensures that the mutex is unlocked after the function is done defer mu.Unlock() // Ensures that the mutex is unlocked after the function is done
return pomodoroOngoing return pomodoroRunning
} }
func IsPomodoroPaused() bool { func IsPomodoroPaused() bool {

View file

@ -15,6 +15,13 @@ var mu sync.Mutex // Mutex to protect access to the Clients map
// handleClientCommands listens for commands from WebSocket clients and dispatches to the timer. // handleClientCommands listens for commands from WebSocket clients and dispatches to the timer.
func handleClientCommands(ws *websocket.Conn) { func handleClientCommands(ws *websocket.Conn) {
// Create a new Client and add it to the Clients map
mu.Lock()
Clients[ws] = &models.Client{
Conn: ws,
}
mu.Unlock()
for { for {
_, message, err := ws.ReadMessage() _, message, err := ws.ReadMessage()
if err != nil { if err != nil {
@ -34,19 +41,19 @@ func handleClientCommands(ws *websocket.Conn) {
// Process the command // Process the command
switch command.Command { switch command.Command {
case "start": case "start":
if !pomodoro.IsPomodoroActive() { if !pomodoro.IsPomodoroRunning() {
go pomodoro.RunPomodoroTimer(Clients) // Start the timer with the list of clients go pomodoro.RunPomodoroTimer(Clients) // Start the timer with the list of clients
} }
case "stop": case "stop":
if pomodoro.IsPomodoroActive() { if pomodoro.IsPomodoroRunning() {
pomodoro.ResetPomodoro(Clients) // Reset Pomodoro pomodoro.ResetPomodoro(Clients) // Reset Pomodoro
} }
case "pause": case "pause":
if pomodoro.IsPomodoroActive() && !pomodoro.IsPomodoroPaused() { if pomodoro.IsPomodoroRunning() && !pomodoro.IsPomodoroPaused() {
pomodoro.PausePomodoro() // Pause the timer pomodoro.PausePomodoro() // Pause the timer
} }
case "resume": case "resume":
if pomodoro.IsPomodoroActive() && pomodoro.IsPomodoroPaused() { if pomodoro.IsPomodoroRunning() && pomodoro.IsPomodoroPaused() {
pomodoro.ResumePomodoro() // Resume the timer pomodoro.ResumePomodoro() // Resume the timer
} }
} }

View file

@ -23,11 +23,9 @@ func HandleConnections(w http.ResponseWriter, r *http.Request) {
defer ws.Close() defer ws.Close()
// Register the new client // Register the new client
mu.Lock()
Clients[ws] = &models.Client{ Clients[ws] = &models.Client{
Conn: ws, // Store the WebSocket connection Conn: ws, // Store the WebSocket connection
} }
mu.Unlock()
// Listen for commands from the connected client // Listen for commands from the connected client
handleClientCommands(ws) handleClientCommands(ws)