diff --git a/internal/app/app.go b/internal/app/app.go index 5725d6a..9e038d1 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -48,7 +48,7 @@ func NewApp(logger *slog.Logger) *App { state: StatePaused, config: nil, lastStarted: nil, - tray: &Tray{}, + tray: NewTray(logger.With("type", "tray")), ha: nil, } } @@ -72,17 +72,14 @@ func (app *App) Pause() error { "previous_state", app.state, "new_state", StatePaused) - // TODO: Implement actual pause logic // - Disconnect from Home Assistant WebSocket - // - Stop background tasks - // - Pause sensor monitoring - // - Stop tray icon event loop - err := app.ha.Close() if err != nil { app.logger.Error("failed to close home assistant connection", "error", err) return err } + + // - Stop tray icon event loop err = app.tray.Stop() if err != nil { app.logger.Error("failed to stop tray", "error", err) diff --git a/internal/app/tray.go b/internal/app/tray.go index 903821b..3f124fc 100644 --- a/internal/app/tray.go +++ b/internal/app/tray.go @@ -3,6 +3,7 @@ package app import ( "fmt" "ha-tray/internal" + "log/slog" "time" "github.com/getlantern/systray" @@ -30,7 +31,16 @@ func (i IconReference) Path() string { type Tray struct { active bool - currentIcon IconReference + currentIcon *IconReference + logger *slog.Logger +} + +func NewTray(logger *slog.Logger) *Tray { + return &Tray{ + logger: logger, + currentIcon: nil, + active: false, + } } func (t *Tray) SetIcon(icon IconReference) error { @@ -43,7 +53,7 @@ func (t *Tray) SetIcon(icon IconReference) error { return fmt.Errorf("failed to read icon: %w", err) } systray.SetIcon(iconBytes) - t.currentIcon = icon + t.currentIcon = &icon return nil } @@ -53,11 +63,13 @@ func (t *Tray) Start(title string) error { return fmt.Errorf("tray is already active") } + t.logger.Info("attempting to start systray", "title", title) readyTimeout := make(chan struct{}, 1) go systray.Run(func() { systray.SetTitle(title) systray.SetTooltip(title) + t.logger.Info("systray started") readyTimeout <- struct{}{} close(readyTimeout) }, func() { @@ -66,11 +78,12 @@ func (t *Tray) Start(title string) error { select { case <-readyTimeout: - fmt.Println("tray started") + t.logger.Info("systray start confirmed") t.active = true return nil case <-time.After(5 * time.Second): close(readyTimeout) + t.logger.Error("systray start timed out") return fmt.Errorf("tray did not start in time") } }