diff --git a/main.go b/main.go index 719e53c..ec89f0b 100644 --- a/main.go +++ b/main.go @@ -2,12 +2,70 @@ package main import( "after-lock/evdev" - "log" + "after-lock/screensaver" + "after-lock/atomicflag" + "time" + "sync" ) +const ( + initialDelay = 3 + loopDelay = 6 + keyboardDeviceNode = "/dev/input/by-id/usb-Dell_Dell_USB_Entry_Keyboard-event-kbd" +) + + func main() { - err := evdev.BlockUntilKeypress("/dev/input/by-id/usb-Dell_Dell_USB_Entry_Keyboard-event-kbd") - if err != nil { - log.Fatal(err) + var wg sync.WaitGroup + wg.Add(1) + stopFlag := atomicflag.New(false) + keypressFlag := atomicflag.New(false) + + go func() { + for { + err := evdev.BlockUntilKeypress(keyboardDeviceNode) + if err != nil { + panic(err) + } + if stopFlag.Get() { + wg.Done() + return + } else { + keypressFlag.Set(true) + } + } + }() + + time.Sleep(initialDelay * time.Second) + for { + active, err := screensaver.IsActive() + if err != nil { + panic(err) + } + if !active { + stopFlag.Set(true) + wg.Wait() + return + } + + shouldSleepDisplay, err := screensaver.ShouldBeActive() + if err != nil { + panic(err) + } + if shouldSleepDisplay { + err := screensaver.Activate() + if err != nil { + panic(err) + } + for { + time.Sleep(loopDelay * time.Second) + if keypressFlag.Get() { + keypressFlag.Set(false) + continue + } else { + break + } + } + } } } \ No newline at end of file