merge fix
This commit is contained in:
commit
78ad86c594
33
config.go
33
config.go
|
@ -27,27 +27,42 @@ func makeDefaultConfig() Config {
|
|||
}
|
||||
}
|
||||
|
||||
func (config *Config) load() {
|
||||
func (config *Config) load() error {
|
||||
j := jsonc.New()
|
||||
|
||||
homeDir, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
log.Fatal("could not get home directory!", err)
|
||||
log.Println("could not get home directory!")
|
||||
return err
|
||||
}
|
||||
|
||||
configPath := homeDir + "/.config/gopaper/config.jsonc"
|
||||
configRaw, err := os.ReadFile(configPath)
|
||||
configDir := homeDir + "/.config/gopaper/"
|
||||
configRaw, err := os.ReadFile(configDir)
|
||||
if err != nil {
|
||||
if !os.IsExist(err) {
|
||||
defaultConfig := makeDefaultConfig()
|
||||
defaultConfigJSON, err := json.MarshalIndent(defaultConfig, "", "")
|
||||
if err != nil {
|
||||
log.Fatal("could not encode default config!", err)
|
||||
log.Println("could not encode default config!")
|
||||
return err
|
||||
}
|
||||
file, err := os.Create(configPath)
|
||||
//TODO: make parent directories if they don't exist
|
||||
err = os.Mkdir(homeDir+"/.config", 755)
|
||||
if err != nil && !os.IsExist(err) {
|
||||
log.Println("could not create .config directory", err)
|
||||
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()
|
||||
if err != nil {
|
||||
log.Fatal("could not create config file!", err)
|
||||
log.Println("could not create config file!")
|
||||
return err
|
||||
}
|
||||
file.Write(defaultConfigJSON)
|
||||
*config = defaultConfig
|
||||
|
@ -57,7 +72,8 @@ func (config *Config) load() {
|
|||
configRaw = j.Strip(configRaw)
|
||||
err = json.Unmarshal(configRaw, &config)
|
||||
if err != nil {
|
||||
log.Fatal("Couldn't unmarshal config!\n", err)
|
||||
log.Println("Couldn't unmarshal config!")
|
||||
return err
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -71,4 +87,5 @@ func (config *Config) load() {
|
|||
}
|
||||
|
||||
config.ImagesDir = homeDir + "/" + config.ImagesDir + "/"
|
||||
return nil
|
||||
}
|
||||
|
|
23
main.go
23
main.go
|
@ -8,14 +8,18 @@ import (
|
|||
|
||||
var config Config
|
||||
|
||||
const sockfile = "/tmp/gopaper.sock"
|
||||
|
||||
func main() {
|
||||
//TODO:kill existing processes
|
||||
|
||||
config.load()
|
||||
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
||||
|
||||
//TODO: only log to file if flagged
|
||||
err := config.load()
|
||||
logfile, err := openLogfile()
|
||||
if err != nil {
|
||||
log.Printf("error opening logfile %v: %v", config.Cache, err)
|
||||
log.Println("failed to load config", err)
|
||||
cleanExit(1)
|
||||
}
|
||||
log.SetOutput(logfile)
|
||||
log.SetFlags(log.LstdFlags | log.Lshortfile | log.Lmicroseconds)
|
||||
|
@ -24,8 +28,17 @@ func main() {
|
|||
var waitGroup sync.WaitGroup
|
||||
waitGroup.Add(1)
|
||||
slideshowDir := make(chan string)
|
||||
go server(slideshowDir)
|
||||
go slideshow(slideshowDir)
|
||||
|
||||
func() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
log.Println("Panic recovered at top level. Closing gracefully.", r)
|
||||
cleanExit(1)
|
||||
}
|
||||
}()
|
||||
go server(slideshowDir)
|
||||
go slideshow(slideshowDir)
|
||||
}()
|
||||
|
||||
var dir string
|
||||
args := os.Args[1:]
|
||||
|
|
|
@ -11,7 +11,8 @@ import (
|
|||
|
||||
func server(slideshowDir chan string) {
|
||||
|
||||
sockfile := "/tmp/bg-go.sock"
|
||||
defer os.Remove(sockfile)
|
||||
|
||||
//Create a Unix domain socket and listen for incoming connections.
|
||||
socket, err := net.Listen("unix", sockfile)
|
||||
if err != nil {
|
||||
|
@ -27,7 +28,6 @@ func server(slideshowDir chan string) {
|
|||
os.Remove(sockfile)
|
||||
os.Exit(1)
|
||||
}()
|
||||
defer os.Remove(sockfile)
|
||||
|
||||
for {
|
||||
//Accept incoming
|
||||
|
|
20
slideshow.go
20
slideshow.go
|
@ -3,6 +3,7 @@ package main
|
|||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/xyproto/wallutils"
|
||||
|
@ -10,7 +11,7 @@ import (
|
|||
|
||||
func slideshow(ch <-chan string) {
|
||||
dir := <-ch
|
||||
ticker := time.NewTicker(time.Duration(config.Duration) * time.Second)
|
||||
ticker := time.NewTicker(time.Duration(config.Duration) * time.Minute)
|
||||
|
||||
go func() {
|
||||
for {
|
||||
|
@ -35,5 +36,20 @@ func setRandomWallpaper(dir string) error {
|
|||
if err != nil {
|
||||
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 = "zoom"
|
||||
case "hyprland":
|
||||
mode = "fit"
|
||||
default:
|
||||
mode = ""
|
||||
}
|
||||
|
||||
return wallutils.SetWallpaperCustom(img, mode, false)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue