8501fd074c
Go TUI sleep timer with modular architecture. - Config: YAML-based, profile inheritance, auto WM detection - Engine: timer, executor, stage pipeline (pre→timer→post) - Modules: workspace (niri/hyprland/kde), media, lock, kill, notify, sound, brightness, mute, custom, script - TUI: bubbletea app with profiles, module toggles, progress bar - CLI: run, list-profiles, export, import, history, stats - History: JSONL log with statistics - QR: config export as ASCII QR
49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package notify
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
|
|
"github.com/forust/gosleep-timer/config"
|
|
"github.com/forust/gosleep-timer/modules"
|
|
)
|
|
|
|
type NotifyModule struct{}
|
|
|
|
func (m *NotifyModule) Name() string {
|
|
return "notify"
|
|
}
|
|
|
|
func (m *NotifyModule) Enabled(cfg *config.Modules) bool {
|
|
return cfg.Notify != nil && cfg.Notify.Enabled
|
|
}
|
|
|
|
func (m *NotifyModule) BuildCmds(ctx *modules.ModuleContext, stage modules.Stage) []string {
|
|
if stage != modules.StagePost {
|
|
return nil
|
|
}
|
|
|
|
title := "gosleep-timer"
|
|
body := fmt.Sprintf("Timer %s finished", ctx.Duration)
|
|
cmds := []string{fmt.Sprintf("notify-send %q %q", title, body)}
|
|
|
|
if ctx.Config.Notify.Sound != "" {
|
|
if _, err := exec.LookPath("paplay"); err == nil {
|
|
cmds = append(cmds, fmt.Sprintf("paplay %s", ctx.Config.Notify.Sound))
|
|
} else if _, err := exec.LookPath("aplay"); err == nil {
|
|
cmds = append(cmds, fmt.Sprintf("aplay %s", ctx.Config.Notify.Sound))
|
|
}
|
|
}
|
|
|
|
return cmds
|
|
}
|
|
|
|
func (m *NotifyModule) Validate() error {
|
|
_, err := exec.LookPath("notify-send")
|
|
return err
|
|
}
|
|
|
|
func init() {
|
|
modules.Register(&NotifyModule{})
|
|
}
|