From 0900b04c7c231d74a7381a7d63dcacf989526ec4 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 20 Aug 2025 18:37:01 +0200 Subject: [PATCH] init --- go.mod | 8 +++++++ go.sum | 4 ++++ main.go | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..091e408 --- /dev/null +++ b/go.mod @@ -0,0 +1,8 @@ +module gitnet.fr/deblan/smart-screensaver + +go 1.23.0 + +require ( + github.com/vitali-fedulov/hyper v1.0.1 // indirect + github.com/vitali-fedulov/images3 v1.0.16 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..eb1d7cf --- /dev/null +++ b/go.sum @@ -0,0 +1,4 @@ +github.com/vitali-fedulov/hyper v1.0.1 h1:juW5AgxqAVbAAlakTcc1IeO/iqT8R+KdIyia8tz29zE= +github.com/vitali-fedulov/hyper v1.0.1/go.mod h1:nQqkBaCL7ETNg7c90cbfFeJWoKchMrPejZYr+kiuSQI= +github.com/vitali-fedulov/images3 v1.0.16 h1:FBFR9v/MpA5H6VcoEMrpfX3epPxWhWZKhvA9R/VzssU= +github.com/vitali-fedulov/images3 v1.0.16/go.mod h1:E53TQh4WO/byLuozZvfgJ/JIsSKsfbhnjaOnMAb4ZjM= diff --git a/main.go b/main.go new file mode 100644 index 0000000..ae570f9 --- /dev/null +++ b/main.go @@ -0,0 +1,65 @@ +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) + } +}