Compare commits

..

No commits in common. "9b4acc1dca6bdb89449b6dbe48377788c89db42c" and "568dc2b8d4ddeeaa1422c3aa28eb5688dc922b8e" have entirely different histories.

5 changed files with 16 additions and 64 deletions

View File

@ -27,42 +27,27 @@ func makeDefaultConfig() Config {
} }
} }
func (config *Config) load() error { func (config *Config) load() {
j := jsonc.New() j := jsonc.New()
homeDir, err := os.UserHomeDir() homeDir, err := os.UserHomeDir()
if err != nil { if err != nil {
log.Println("could not get home directory!") log.Fatal("could not get home directory!", err)
return err
} }
configDir := homeDir + "/.config/gopaper/" configPath := homeDir + "/.config/gopaper/config.jsonc"
configRaw, err := os.ReadFile(configDir) configRaw, err := os.ReadFile(configPath)
if err != nil { if err != nil {
if !os.IsExist(err) { if !os.IsExist(err) {
defaultConfig := makeDefaultConfig() defaultConfig := makeDefaultConfig()
defaultConfigJSON, err := json.MarshalIndent(defaultConfig, "", "") defaultConfigJSON, err := json.MarshalIndent(defaultConfig, "", "")
if err != nil { if err != nil {
log.Println("could not encode default config!") log.Fatal("could not encode default config!", err)
return err
} }
//TODO: make parent directories if they don't exist file, err := os.Create(configPath)
err = os.Mkdir(homeDir+".config", 755)
if err != nil && !os.IsExist(err) {
log.Println("could not create .config directory")
return err
}
err = os.Mkdir(configDir, 755)
if err != nil && !os.IsExist(err) {
log.Println("could not create .config/gopaper directory")
return err
}
file, err := os.Create(configDir + "config.jsonc")
defer file.Close() defer file.Close()
if err != nil { if err != nil {
log.Println("could not create config file!") log.Fatal("could not create config file!", err)
return err
} }
file.Write(defaultConfigJSON) file.Write(defaultConfigJSON)
*config = defaultConfig *config = defaultConfig
@ -72,8 +57,7 @@ func (config *Config) load() error {
configRaw = j.Strip(configRaw) configRaw = j.Strip(configRaw)
err = json.Unmarshal(configRaw, &config) err = json.Unmarshal(configRaw, &config)
if err != nil { if err != nil {
log.Println("Couldn't unmarshal config!") log.Fatal("Couldn't unmarshal config!\n", err)
return err
} }
} }
@ -87,5 +71,4 @@ func (config *Config) load() error {
} }
config.ImagesDir = homeDir + "/" + config.ImagesDir + "/" config.ImagesDir = homeDir + "/" + config.ImagesDir + "/"
return nil
} }

BIN
gopaper

Binary file not shown.

23
main.go
View File

@ -1,32 +1,22 @@
package main package main
import ( import (
"log" "fmt"
// "log"
"os" "os"
"sync" "sync"
) )
var config Config var config Config
const sockfile = "/tmp/gopaper.sock"
func main() { func main() {
//TODO:kill existing processes
log.SetFlags(log.LstdFlags | log.Lshortfile) config.load()
fmt.Printf("%+v\n", config)
err := config.load()
if err != nil {
log.Println("failed to load config", err)
cleanExit(1)
}
log.Printf("%+v\n", config)
var waitGroup sync.WaitGroup var waitGroup sync.WaitGroup
waitGroup.Add(1) waitGroup.Add(1)
slideshowDir := make(chan string) slideshowDir := make(chan string)
go server(slideshowDir) go server(slideshowDir)
go slideshow(slideshowDir) go slideshow(slideshowDir)
@ -41,8 +31,3 @@ func main() {
waitGroup.Wait() waitGroup.Wait()
} }
func cleanExit(code int) {
os.Remove(sockfile)
os.Exit(code)
}

View File

@ -11,8 +11,7 @@ import (
func server(slideshowDir chan string) { func server(slideshowDir chan string) {
defer os.Remove(sockfile) 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.
socket, err := net.Listen("unix", sockfile) socket, err := net.Listen("unix", sockfile)
if err != nil { if err != nil {
@ -28,6 +27,7 @@ func server(slideshowDir chan string) {
os.Remove(sockfile) os.Remove(sockfile)
os.Exit(1) os.Exit(1)
}() }()
defer os.Remove(sockfile)
for { for {
//Accept incoming //Accept incoming

View File

@ -3,7 +3,6 @@ package main
import ( import (
"fmt" "fmt"
"log" "log"
"os"
"time" "time"
"github.com/xyproto/wallutils" "github.com/xyproto/wallutils"
@ -11,7 +10,7 @@ import (
func slideshow(ch <-chan string) { func slideshow(ch <-chan string) {
dir := <-ch dir := <-ch
ticker := time.NewTicker(time.Duration(config.Duration) * time.Minute) ticker := time.NewTicker(time.Duration(config.Duration) * time.Second)
go func() { go func() {
for { for {
@ -36,20 +35,5 @@ func setRandomWallpaper(dir string) error {
if err != nil { if err != nil {
return err return err
} }
return wallutils.SetWallpaperCustom(img, "fit", false)
desktopEnv, bool := os.LookupEnv("DESKTOP_SESSION")
if !bool {
panic("cannot determine desktop environment")
}
var mode string
switch desktopEnv {
case "cinnamon":
mode = "span"
case "hyprland":
mode = "fit"
default:
mode = ""
}
return wallutils.SetWallpaperCustom(img, mode, false)
} }