61 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package config | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"errors" | ||
|  | 	"github.com/BurntSushi/toml" | ||
|  | 	"github.com/adrg/xdg" | ||
|  | 	"github.com/kirsle/configdir" | ||
|  | 	"os" | ||
|  | 	"path/filepath" | ||
|  | ) | ||
|  | 
 | ||
|  | type Config struct { | ||
|  | 	Source    string `toml:"source"` | ||
|  | 	SavePath  string `toml:"save_path"` | ||
|  | 	MusicPath string `toml:"music_path"` | ||
|  | } | ||
|  | 
 | ||
|  | var config Config | ||
|  | 
 | ||
|  | func newConfig() Config { | ||
|  | 	return Config{ | ||
|  | 		Source:    xdg.UserDirs.Download, | ||
|  | 		SavePath:  filepath.Join(xdg.UserDirs.Documents, "StripBeats"), | ||
|  | 		MusicPath: xdg.UserDirs.Music, | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func init() { | ||
|  | 	config = newConfig() | ||
|  | 	configPath := configdir.LocalConfig("strip-beats") | ||
|  | 	if err := configdir.MakePath(configPath); err != nil { | ||
|  | 		panic(err) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	configFile := filepath.Join(configPath, "profile.toml") | ||
|  | 	if !exists(configFile) { | ||
|  | 		file, err := os.Create(configFile) | ||
|  | 		if err != nil { | ||
|  | 			panic(err) | ||
|  | 		} | ||
|  | 		err = toml.NewEncoder(file).Encode(config) | ||
|  | 		if err != nil { | ||
|  | 			panic(err) | ||
|  | 		} | ||
|  | 		file.Close() | ||
|  | 	} else { | ||
|  | 		if _, err := toml.DecodeFile(configFile, &config); err != nil { | ||
|  | 			panic(err) | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func GetConfig() Config { | ||
|  | 	return config | ||
|  | } | ||
|  | 
 | ||
|  | func exists(path string) bool { | ||
|  | 	_, err := os.Stat(path) | ||
|  | 	return !errors.Is(err, os.ErrNotExist) | ||
|  | } |