Wrote function to copy embedded config files to a config directory
This commit is contained in:
		
							
								
								
									
										63
									
								
								config.go
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								config.go
									
									
									
									
									
								
							@@ -2,13 +2,76 @@ package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"ccat/stack"
 | 
			
		||||
	"embed"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"io/fs"
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/user"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"gopkg.in/yaml.v2"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
//go:embed config
 | 
			
		||||
var storedConfigs embed.FS // Embed the folder containing config files
 | 
			
		||||
 | 
			
		||||
func runningOnWindows() bool {
 | 
			
		||||
	return runtime.GOOS == "windows"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// generateDefaultConfigs is used to generate a folder of default config files
 | 
			
		||||
// for common languages. These default config files are embedded into the program, and will
 | 
			
		||||
// be outputted into a directory.
 | 
			
		||||
//
 | 
			
		||||
// If there is an error encountered, the error is returned.
 | 
			
		||||
func generateDefaultConfigs() error {
 | 
			
		||||
 | 
			
		||||
	var configOutputPath string // Location of config files, depends on OS
 | 
			
		||||
	if runningOnWindows() {
 | 
			
		||||
		configOutputPath = "%APPDATA%\\ccat"
 | 
			
		||||
	} else {
 | 
			
		||||
		currentUser, err := user.Current()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
		configOutputPath = filepath.Join("/home/" + currentUser.Username + "/.config/ccat/")
 | 
			
		||||
	}
 | 
			
		||||
	err := os.MkdirAll(configOutputPath, 0755)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if os.IsExist(err) {
 | 
			
		||||
			return errors.New("Directory already exists.")
 | 
			
		||||
		} else {
 | 
			
		||||
			return errors.New("Unable to create directory.")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Copy each folder from the embedded filesystem, into the destination path
 | 
			
		||||
	err = fs.WalkDir(storedConfigs, "config", func(path string, d fs.DirEntry, err error) error {
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		if d.IsDir() { // Skip directories
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
		relPath, _ := filepath.Rel("config", path)
 | 
			
		||||
		dstPath := filepath.Join(configOutputPath, relPath) // Destination path
 | 
			
		||||
 | 
			
		||||
		data, err := os.ReadFile(path)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if err := os.WriteFile(dstPath, data, 0644); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// loadConfig takes in the filename of a config file. It reads the file,
 | 
			
		||||
// and returns a stack of RegColors, with the item at the bottom being the one that
 | 
			
		||||
// was read first. This ensures that, _when accessing the RegColors in the stack, the last
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user