rudimentary slideshow functionality
This commit is contained in:
		
							parent
							
								
									ab5b679896
								
							
						
					
					
						commit
						b5cea803cc
					
				| 
						 | 
					@ -8,7 +8,8 @@ import (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Config struct {
 | 
					type Config struct {
 | 
				
			||||||
	ImageFilters
 | 
						ImageFilters
 | 
				
			||||||
	Root string
 | 
						Root     string
 | 
				
			||||||
 | 
						Duration int
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (config *Config) load() {
 | 
					func (config *Config) load() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,5 +3,6 @@
 | 
				
			||||||
"colorize":[ 247,40,60 ],
 | 
					"colorize":[ 247,40,60 ],
 | 
				
			||||||
"contrast":-35,
 | 
					"contrast":-35,
 | 
				
			||||||
"gamma":0.8,
 | 
					"gamma":0.8,
 | 
				
			||||||
"root":"/home/andrzej/bgs"
 | 
					"root":"/home/andrzej/bgs",
 | 
				
			||||||
 | 
					"duration":1
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										16
									
								
								files.go
								
								
								
								
							
							
						
						
									
										16
									
								
								files.go
								
								
								
								
							| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"math/rand"
 | 
						"math/rand"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"regexp"
 | 
						"regexp"
 | 
				
			||||||
| 
						 | 
					@ -12,25 +13,24 @@ func getRandomFile(dir string) (path string, filename string, error error) {
 | 
				
			||||||
		return "", "", err
 | 
							return "", "", err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// for _, file := range files { fmt.Println(file.Name(), file.IsDir())
 | 
					 | 
				
			||||||
	// }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var randomIndex int
 | 
						var randomIndex int
 | 
				
			||||||
	var randomImg os.DirEntry
 | 
						var randomImg os.DirEntry
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
		randomIndex = rand.Intn(len(files))
 | 
							randomIndex = rand.Intn(len(files))
 | 
				
			||||||
		randomImg = files[randomIndex]
 | 
							randomImg = files[randomIndex]
 | 
				
			||||||
		//re-roll if you get a directory
 | 
							//re-roll if you get a directory
 | 
				
			||||||
		if files[randomIndex].IsDir() == false {
 | 
							if files[randomIndex].IsDir() {
 | 
				
			||||||
			break
 | 
								fmt.Printf("%v is a directory\n", randomImg.Name())
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		//re-roll if not a recognised image type
 | 
							//re-roll if not a recognised image type
 | 
				
			||||||
		isImage, _ := regexp.Match(".jpg$|.jpeg$|.png$|.bmp$|.webp$", []byte(randomImg.Name()))
 | 
							isImage, _ := regexp.Match(".jpg$|.jpeg$|.png$|.bmp$|.webp$", []byte(randomImg.Name()))
 | 
				
			||||||
		if isImage {
 | 
							if !isImage {
 | 
				
			||||||
			break
 | 
								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) {
 | 
					func fileExistsInCache(filename string) (bool, error) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								image.go
								
								
								
								
							
							
						
						
									
										3
									
								
								image.go
								
								
								
								
							| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"image"
 | 
						"image"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
| 
						 | 
					@ -38,6 +39,7 @@ func pickRandomImage(dir string) (string, error) {
 | 
				
			||||||
	curr := wd + "/images/" + filenameNoExt
 | 
						curr := wd + "/images/" + filenameNoExt
 | 
				
			||||||
	if !fileExists {
 | 
						if !fileExists {
 | 
				
			||||||
		img, err := loadImage(randomImg)
 | 
							img, err := loadImage(randomImg)
 | 
				
			||||||
 | 
							fmt.Printf("failed to load image %v", randomImg)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return "", err
 | 
								return "", err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -52,6 +54,7 @@ func pickRandomImage(dir string) (string, error) {
 | 
				
			||||||
func loadImage(filename string) (image.Image, error) {
 | 
					func loadImage(filename string) (image.Image, error) {
 | 
				
			||||||
	f, err := os.Open(filename)
 | 
						f, err := os.Open(filename)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer f.Close()
 | 
						defer f.Close()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										15
									
								
								main.go
								
								
								
								
							
							
						
						
									
										15
									
								
								main.go
								
								
								
								
							| 
						 | 
					@ -15,12 +15,15 @@ func main() {
 | 
				
			||||||
	config.load()
 | 
						config.load()
 | 
				
			||||||
	fmt.Printf("%+v\n", config)
 | 
						fmt.Printf("%+v\n", config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	args := []string{""}
 | 
						var dir string
 | 
				
			||||||
	if len(os.Args) > 0 {
 | 
						args := os.Args[1:]
 | 
				
			||||||
		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 {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal("failed to pick image!", err)
 | 
							log.Fatal("failed to pick image!", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -29,6 +32,8 @@ func main() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var waitGroup sync.WaitGroup
 | 
						var waitGroup sync.WaitGroup
 | 
				
			||||||
	waitGroup.Add(1)
 | 
						waitGroup.Add(1)
 | 
				
			||||||
	go server(&waitGroup)
 | 
						go server()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						go slideshow(dir)
 | 
				
			||||||
	waitGroup.Wait()
 | 
						waitGroup.Wait()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,11 +6,10 @@ import (
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"os/signal"
 | 
						"os/signal"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"sync"
 | 
					 | 
				
			||||||
	"syscall"
 | 
						"syscall"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func server(waitGroup *sync.WaitGroup) {
 | 
					func server() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sockfile := "/tmp/bg-go.sock"
 | 
						sockfile := "/tmp/bg-go.sock"
 | 
				
			||||||
	//Create a Unix domain socket and listen for incoming connections.
 | 
						//Create a Unix domain socket and listen for incoming connections.
 | 
				
			||||||
| 
						 | 
					@ -57,11 +56,6 @@ func server(waitGroup *sync.WaitGroup) {
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			hyprpaperSet(newbg)
 | 
								hyprpaperSet(newbg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// // Echo the data back to the connection
 | 
					 | 
				
			||||||
			// _, err = conn.Write(buf[:n])
 | 
					 | 
				
			||||||
			// if err != nil {
 | 
					 | 
				
			||||||
			// 	log.Fatal(err)
 | 
					 | 
				
			||||||
			// }
 | 
					 | 
				
			||||||
		}(conn)
 | 
							}(conn)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										21
									
								
								slideshow.go
								
								
								
								
							
							
						
						
									
										21
									
								
								slideshow.go
								
								
								
								
							| 
						 | 
					@ -1,5 +1,24 @@
 | 
				
			||||||
package main
 | 
					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)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue