diff --git a/config.go b/config.go index 168e136..f57ce23 100644 --- a/config.go +++ b/config.go @@ -8,7 +8,8 @@ import ( type Config struct { ImageFilters - Root string + Root string + Duration int } func (config *Config) load() { diff --git a/config.json b/config.json index 35f3eaa..3feee89 100644 --- a/config.json +++ b/config.json @@ -3,5 +3,6 @@ "colorize":[ 247,40,60 ], "contrast":-35, "gamma":0.8, -"root":"/home/andrzej/bgs" +"root":"/home/andrzej/bgs", +"duration":1 } diff --git a/files.go b/files.go index da7a83a..33cfac4 100644 --- a/files.go +++ b/files.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "math/rand" "os" "regexp" @@ -12,25 +13,24 @@ func getRandomFile(dir string) (path string, filename string, error error) { return "", "", err } - // for _, file := range files { fmt.Println(file.Name(), file.IsDir()) - // } - var randomIndex int var randomImg os.DirEntry for { randomIndex = rand.Intn(len(files)) randomImg = files[randomIndex] //re-roll if you get a directory - if files[randomIndex].IsDir() == false { - break + if files[randomIndex].IsDir() { + fmt.Printf("%v is a directory\n", randomImg.Name()) + continue } //re-roll if not a recognised image type isImage, _ := regexp.Match(".jpg$|.jpeg$|.png$|.bmp$|.webp$", []byte(randomImg.Name())) - if isImage { - break + if !isImage { + fmt.Printf("%v is not a recognised image format\n", randomImg.Name()) + continue } + return dir + "/" + randomImg.Name(), randomImg.Name(), nil } - return dir + "/" + randomImg.Name(), randomImg.Name(), nil } func fileExistsInCache(filename string) (bool, error) { diff --git a/image.go b/image.go index cda0d95..e8c4644 100644 --- a/image.go +++ b/image.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "image" "log" "os" @@ -38,6 +39,7 @@ func pickRandomImage(dir string) (string, error) { curr := wd + "/images/" + filenameNoExt if !fileExists { img, err := loadImage(randomImg) + fmt.Printf("failed to load image %v", randomImg) if err != nil { return "", err } @@ -52,6 +54,7 @@ func pickRandomImage(dir string) (string, error) { func loadImage(filename string) (image.Image, error) { f, err := os.Open(filename) if err != nil { + return nil, err } defer f.Close() diff --git a/main.go b/main.go index 982646f..a8b47c3 100644 --- a/main.go +++ b/main.go @@ -15,12 +15,15 @@ func main() { config.load() fmt.Printf("%+v\n", config) - args := []string{""} - if len(os.Args) > 0 { - args = os.Args[1:] + var dir string + args := os.Args[1:] + if len(args) > 0 { + dir = args[0] + } else { + dir = "" } - curr, err := pickRandomImage(args[0]) + curr, err := pickRandomImage(dir) if err != nil { log.Fatal("failed to pick image!", err) } @@ -29,6 +32,8 @@ func main() { var waitGroup sync.WaitGroup waitGroup.Add(1) - go server(&waitGroup) + go server() + + go slideshow(dir) waitGroup.Wait() } diff --git a/server.go b/server.go index 290b60c..a8db531 100644 --- a/server.go +++ b/server.go @@ -6,11 +6,10 @@ import ( "os" "os/signal" "strings" - "sync" "syscall" ) -func server(waitGroup *sync.WaitGroup) { +func server() { sockfile := "/tmp/bg-go.sock" //Create a Unix domain socket and listen for incoming connections. @@ -57,11 +56,6 @@ func server(waitGroup *sync.WaitGroup) { } hyprpaperSet(newbg) - // // Echo the data back to the connection - // _, err = conn.Write(buf[:n]) - // if err != nil { - // log.Fatal(err) - // } }(conn) } diff --git a/slideshow.go b/slideshow.go index bce00f4..ba4289e 100644 --- a/slideshow.go +++ b/slideshow.go @@ -1,5 +1,24 @@ package main -func slideshow(dir string) { +import ( + "log" + "time" +) +func slideshow(dir string) { + //TODO: use channel to allow changing dir mid flow + log.Println("starting slideshow goroutine") + img, err := pickRandomImage(dir) + if err != nil { + panic(err) + } + for { + time.Sleep(time.Duration(config.Duration) * time.Minute) + hyprpaperSet(img) + log.Println("hyprpaper set!") + img, err = pickRandomImage(dir) + if err != nil { + panic(err) + } + } }