65 lines
1.3 KiB
Go
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)
|
|
}
|
|
}
|