switch directory via unix socket
This commit is contained in:
parent
8cc58b7084
commit
ab5b679896
2
files.go
2
files.go
|
@ -33,7 +33,7 @@ func getRandomFile(dir string) (path string, filename string, error error) {
|
|||
return dir + "/" + randomImg.Name(), randomImg.Name(), nil
|
||||
}
|
||||
|
||||
func fileExists(filename string) (bool, error) {
|
||||
func fileExistsInCache(filename string) (bool, error) {
|
||||
files, err := os.ReadDir("images")
|
||||
if err != nil {
|
||||
return false, err
|
||||
|
|
5
go.mod
5
go.mod
|
@ -2,4 +2,7 @@ module go-img
|
|||
|
||||
go 1.23.2
|
||||
|
||||
require github.com/disintegration/gift v1.2.1
|
||||
require (
|
||||
github.com/disintegration/gift v1.2.1
|
||||
golang.org/x/image v0.21.0
|
||||
)
|
||||
|
|
2
go.sum
2
go.sum
|
@ -1,2 +1,4 @@
|
|||
github.com/disintegration/gift v1.2.1 h1:Y005a1X4Z7Uc+0gLpSAsKhWi4qLtsdEcMIbbdvdZ6pc=
|
||||
github.com/disintegration/gift v1.2.1/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI=
|
||||
golang.org/x/image v0.21.0 h1:c5qV36ajHpdj4Qi0GnE0jUc/yuo33OLFaa0d+crTD5s=
|
||||
golang.org/x/image v0.21.0/go.mod h1:vUbsLavqK/W303ZroQQVKQ+Af3Yl6Uz1Ppu5J/cLz78=
|
||||
|
|
19
hyprpaper.go
19
hyprpaper.go
|
@ -6,8 +6,23 @@ import (
|
|||
"os/exec"
|
||||
)
|
||||
|
||||
func hyprpaperSet(path string) {
|
||||
|
||||
err := hyprpaperPreload(path)
|
||||
if err != nil {
|
||||
log.Fatal("preload failed!", err)
|
||||
}
|
||||
err = hyprpaperWallpaper(path)
|
||||
if err != nil {
|
||||
log.Fatal("set wallpaper failed!", err)
|
||||
}
|
||||
err = hyprpaperUnloadAll()
|
||||
if err != nil {
|
||||
log.Fatal("unload all failed!", err)
|
||||
}
|
||||
}
|
||||
|
||||
func hyprpaperPreload(path string) error {
|
||||
log.Println("path: ", path)
|
||||
out, err := exec.Command("hyprctl", "hyprpaper", "preload", path).Output()
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -16,7 +31,7 @@ func hyprpaperPreload(path string) error {
|
|||
}
|
||||
|
||||
func hyprpaperWallpaper(path string) error {
|
||||
out, err := exec.Command("hyprctl", "hyprpaper", "wallpaper", ","+path).Output()
|
||||
out, err := exec.Command("hyprctl", "hyprpaper", "wallpaper", ",contain:"+path).Output()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
51
image.go
51
image.go
|
@ -4,11 +4,15 @@ import (
|
|||
"image"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/disintegration/gift"
|
||||
|
||||
_ "image/jpeg"
|
||||
"image/png"
|
||||
|
||||
_ "golang.org/x/image/webp"
|
||||
)
|
||||
|
||||
type ImageFilters struct {
|
||||
|
@ -17,31 +21,58 @@ type ImageFilters struct {
|
|||
Gamma float64
|
||||
}
|
||||
|
||||
func loadImage(filename string) image.Image {
|
||||
f, err := os.Open(filename)
|
||||
log.Println("filename: ", filename)
|
||||
func pickRandomImage(dir string) (string, error) {
|
||||
dir = config.Root + "/" + dir
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
log.Fatalf("os.Open failed: %v", err)
|
||||
return "", err
|
||||
}
|
||||
randomImg, filename, _ := getRandomFile(dir)
|
||||
filenameNoExt := strings.TrimSuffix(filename, filepath.Ext(filename))
|
||||
|
||||
//check to see if rendered copy already exists
|
||||
fileExists, err := fileExistsInCache(filenameNoExt)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
curr := wd + "/images/" + filenameNoExt
|
||||
if !fileExists {
|
||||
img, err := loadImage(randomImg)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
dst := processImage(img, config)
|
||||
saveImage(curr, dst)
|
||||
} else {
|
||||
log.Println("file already exists in cache. skipping image processing")
|
||||
}
|
||||
return curr, nil
|
||||
}
|
||||
|
||||
func loadImage(filename string) (image.Image, error) {
|
||||
f, err := os.Open(filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
img, _, err := image.Decode(f)
|
||||
if err != nil {
|
||||
log.Fatalf("image.Decode failed: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
return img
|
||||
return img, nil
|
||||
}
|
||||
|
||||
func saveImage(filename string, img image.Image) {
|
||||
log.Println("new filename: ", filename)
|
||||
func saveImage(filename string, img image.Image) error {
|
||||
f, err := os.Create(filename)
|
||||
if err != nil {
|
||||
log.Fatalf("os.Create failed: %v", err)
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
err = png.Encode(f, img)
|
||||
if err != nil {
|
||||
log.Fatalf("png.Encode failed: %v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func processImage(img image.Image, config Config) image.Image {
|
||||
|
|
48
main.go
48
main.go
|
@ -4,51 +4,31 @@ import (
|
|||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
var config Config
|
||||
|
||||
func main() {
|
||||
var err error
|
||||
|
||||
var config Config
|
||||
config.load()
|
||||
fmt.Printf("%+v\n", config)
|
||||
|
||||
//get working directory
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
log.Fatal("couldn't find working directory", err)
|
||||
args := []string{""}
|
||||
if len(os.Args) > 0 {
|
||||
args = os.Args[1:]
|
||||
}
|
||||
|
||||
dir := config.Root + "/chsck"
|
||||
randomImg, filename, _ := getRandomFile(dir)
|
||||
filenameNoExt := strings.TrimSuffix(filename, filepath.Ext(filename))
|
||||
//check to see if rendered copy already exists
|
||||
fileExists, err := fileExists(filenameNoExt)
|
||||
curr, err := pickRandomImage(args[0])
|
||||
if err != nil {
|
||||
log.Fatal("failure checking if file exists!", err)
|
||||
}
|
||||
curr := wd + "/images/" + filenameNoExt
|
||||
log.Println("curr: ", curr)
|
||||
if !fileExists {
|
||||
img := loadImage(randomImg)
|
||||
dst := processImage(img, config)
|
||||
saveImage(curr, dst)
|
||||
} else {
|
||||
log.Println("file exists! skipping image processing")
|
||||
log.Fatal("failed to pick image!", err)
|
||||
}
|
||||
|
||||
err = hyprpaperPreload(curr)
|
||||
if err != nil {
|
||||
log.Fatal("preload failed!", err)
|
||||
}
|
||||
err = hyprpaperWallpaper(curr)
|
||||
if err != nil {
|
||||
log.Fatal("set wallpaper failed!", err)
|
||||
}
|
||||
err = hyprpaperUnloadAll()
|
||||
if err != nil {
|
||||
log.Fatal("unload all failed!", err)
|
||||
}
|
||||
hyprpaperSet(curr)
|
||||
|
||||
var waitGroup sync.WaitGroup
|
||||
waitGroup.Add(1)
|
||||
go server(&waitGroup)
|
||||
waitGroup.Wait()
|
||||
}
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
func server(waitGroup *sync.WaitGroup) {
|
||||
|
||||
sockfile := "/tmp/bg-go.sock"
|
||||
//Create a Unix domain socket and listen for incoming connections.
|
||||
socket, err := net.Listen("unix", sockfile)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
//cleanup sockfile
|
||||
//TODO: this only works when the program is killed from outside. Make it work via defer() too?
|
||||
c := make(chan os.Signal, 1)
|
||||
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
|
||||
go func() {
|
||||
<-c
|
||||
os.Remove(sockfile)
|
||||
os.Exit(1)
|
||||
}()
|
||||
|
||||
for {
|
||||
//Accept incoming
|
||||
conn, err := socket.Accept()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
//create store for incoming bytes
|
||||
|
||||
//handle connection in separate goroutine
|
||||
go func(conn net.Conn) {
|
||||
defer conn.Close()
|
||||
//create buffer for incoming data
|
||||
buf := make([]byte, 4096)
|
||||
|
||||
//read data from connection
|
||||
n, err := conn.Read(buf)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
str := strings.TrimSpace(string(buf[:n]))
|
||||
newbg, err := pickRandomImage(str)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
hyprpaperSet(newbg)
|
||||
|
||||
// // Echo the data back to the connection
|
||||
// _, err = conn.Write(buf[:n])
|
||||
// if err != nil {
|
||||
// log.Fatal(err)
|
||||
// }
|
||||
}(conn)
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package main
|
||||
|
||||
func slideshow(dir string) {
|
||||
|
||||
}
|
Loading…
Reference in New Issue