2020-08-17 13:50:39 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import(
|
|
|
|
"after-lock/evdev"
|
2020-08-18 09:06:59 +00:00
|
|
|
"after-lock/screensaver"
|
|
|
|
"after-lock/atomicflag"
|
|
|
|
"time"
|
|
|
|
"sync"
|
2020-08-17 13:50:39 +00:00
|
|
|
)
|
|
|
|
|
2020-08-18 09:06:59 +00:00
|
|
|
const (
|
|
|
|
initialDelay = 3
|
|
|
|
loopDelay = 6
|
|
|
|
keyboardDeviceNode = "/dev/input/by-id/usb-Dell_Dell_USB_Entry_Keyboard-event-kbd"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2020-08-17 13:50:39 +00:00
|
|
|
func main() {
|
2020-08-18 09:06:59 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-08-17 13:50:39 +00:00
|
|
|
}
|
|
|
|
}
|