smart-screensaver/main.go
2025-08-20 18:37:01 +02:00

65 lines
1.3 KiB
Go

package main
import (
"flag"
"fmt"
"log"
"os"
"os/exec"
"time"
"github.com/vitali-fedulov/images3"
)
var display string
var imagesStore string
var delay int
func main() {
flag.StringVar(&display, "d", "", "Display")
flag.StringVar(&imagesStore, "s", "", "Images directory")
flag.IntVar(&delay, "t", 60, "Delay between checks")
flag.Parse()
directory, _ := os.MkdirTemp("", "smart-screensaver")
images := []string{}
i := 0
for {
image := fmt.Sprintf("%s/%d.jpg", directory, i)
_, err := exec.Command("import", "-display", display, "-window", "root", image).Output()
i++
if err == nil {
images = append(images, image)
}
log.Println("Checking...")
if len(images) == 2 {
img1, _ := images3.Open(images[0])
img2, _ := images3.Open(images[1])
icon1 := images3.Icon(img1, images[0])
icon2 := images3.Icon(img2, images[1])
if images3.Similar(icon1, icon2) {
log.Println("Starting screensaver...")
cmd := exec.Command("feh", "-F", "-r", "--on-last-slide", "resume", "-z", "-D", "2", imagesStore)
cmd.Env = []string{fmt.Sprintf("DISPLAY=%s", display)}
_, err := cmd.Output()
if err != nil {
log.Println(err.Error())
}
}
os.Remove(images[0])
images = []string{images[1]}
}
time.Sleep(time.Duration(delay) * time.Second)
}
}