diff --git a/ini.go b/ini.go index 898c8ad..85e48fd 100644 --- a/ini.go +++ b/ini.go @@ -20,13 +20,12 @@ func NewConfiguration(fileLocation string) *Configuration { return conf } -func (config *Configuration) GetSection(sectionName string) *ini.Section { +func (config *Configuration) GetSection(sectionName string) (*ini.Section, error) { section, err := config.file.GetSection(sectionName) if err != nil { - fmt.Printf("Error getting section %v in config: %v", sectionName, err) - os.Exit(1) + return nil, err } - return section + return section, nil } func GetChildSection(section *ini.Section, childSectionName string) (childSection *ini.Section, err error) { @@ -43,37 +42,77 @@ func GetChildSections(section *ini.Section) (childSections []*ini.Section) { return section.ChildSections() } -func (config *Configuration) GetKey(path string) *ini.Key { +func CreateSection(path string, file *ini.File) error { + pathSplit := strings.Split(path, ".") + for i := 0; i < len(pathSplit)-1; i++ { + file.NewSections() + } + + return nil +} + +func (config *Configuration) GetKey(path string) (*ini.Key, error) { splitPaths := strings.Split(path, ".") if len(splitPaths) == 1 { splitPaths = append([]string{"."}, splitPaths...) } sectionMask := strings.Join(splitPaths[0:len(splitPaths)-1], ".") - section := config.GetSection(sectionMask) + section, err := config.GetSection(sectionMask) + if err != nil { + return nil, err + } keyName := splitPaths[len(splitPaths)-1] key, err := section.GetKey(keyName) if err != nil { - fmt.Printf("Error getting key %v: %v", keyName, err) + return nil, err } - return key -} - -func (config *Configuration) GetAsString(path string) string { - return config.GetKey(path).String() + return key, nil } func (config *Configuration) SetValue(path string, value string) { - config.GetKey(path).SetValue(value) + key, err := config.GetKey(path) + if err != nil { + err = nil + splitPath := strings.Split(path, ".") + err = config.file.NewSections(splitPath[0 : len(splitPath)-1]...) + if err != nil { + fmt.Printf("Error creating section %v in config: %v", path, err) + os.Exit(1) + } + fmt.Printf("New Val: Split Path: %v", splitPath) + } + key, err = config.GetKey(path) + if err != nil { + fmt.Printf("Error getting path %v in config: %v", path, err) + os.Exit(1) + } + key.SetValue(value) +} + +func (config *Configuration) GetAsString(path string) string { + key, err := config.GetKey(path) + if err != nil { + fmt.Printf("Error getting path %v in config: %v", path, err) + } + return key.String() } func (config *Configuration) GetAsStrings(path string) []string { - return config.GetKey(path).Strings(",") + key, err := config.GetKey(path) + if err != nil { + fmt.Printf("Error getting path %v in config: %v", path, err) + } + return key.Strings(",") } func (config *Configuration) GetAsInt(path string) int { var i int var err error - i, err = config.GetKey(path).Int() + key, err := config.GetKey(path) + if err != nil { + fmt.Printf("Error getting path %v in config: %v", path, err) + } + i, err = key.Int() if err != nil { fmt.Printf("Error parsing integer: %v", err) os.Exit(1) @@ -82,13 +121,21 @@ func (config *Configuration) GetAsInt(path string) int { } func (config *Configuration) GetAsInts(path string) []int { - return config.GetKey(path).Ints(",") + key, err := config.GetKey(path) + if err != nil { + fmt.Printf("Error getting path %v in config: %v", path, err) + } + return key.Ints(",") } func (config *Configuration) GetAsUInt(path string) uint { var i uint var err error - i, err = config.GetKey(path).Uint() + key, err := config.GetKey(path) + if err != nil { + fmt.Printf("Error getting path %v in config: %v", path, err) + } + i, err = key.Uint() if err != nil { fmt.Printf("Error parsing integer: %v", err) os.Exit(1) @@ -97,13 +144,21 @@ func (config *Configuration) GetAsUInt(path string) uint { } func (config *Configuration) GetAsUInts(path string) []uint { - return config.GetKey(path).Uints(",") + key, err := config.GetKey(path) + if err != nil { + fmt.Printf("Error getting path %v in config: %v", path, err) + } + return key.Uints(",") } func (config *Configuration) GetAsFloat(path string) float64 { var f float64 var err error - f, err = config.GetKey(path).Float64() + key, err := config.GetKey(path) + if err != nil { + fmt.Printf("Error getting path %v in config: %v", path, err) + } + f, err = key.Float64() if err != nil { fmt.Printf("Error parsing float: %v", err) os.Exit(1) @@ -112,13 +167,21 @@ func (config *Configuration) GetAsFloat(path string) float64 { } func (config *Configuration) GetAsFloats(path string) []float64 { - return config.GetKey(path).Float64s(",") + key, err := config.GetKey(path) + if err != nil { + fmt.Printf("Error getting path %v in config: %v", path, err) + } + return key.Float64s(",") } func (config *Configuration) GetAsBoolean(path string) bool { var b bool var err error - b, err = config.GetKey(path).Bool() + key, err := config.GetKey(path) + if err != nil { + fmt.Printf("Error getting path %v in config: %v", path, err) + } + b, err = key.Bool() if err != nil { fmt.Printf("Error parsingn bool: %v", err) os.Exit(1) @@ -127,11 +190,27 @@ func (config *Configuration) GetAsBoolean(path string) bool { } func (config *Configuration) GetAsBooleans(path string) []bool { - return config.GetKey(path).Bools(",") + key, err := config.GetKey(path) + if err != nil { + fmt.Printf("Error getting path %v in config: %v", path, err) + } + return key.Bools(",") } func (config *Configuration) load() { - var err error = nil + if _, err := os.Stat(config.fileLocation); err != nil { + file, err := os.Create(config.fileLocation) + if err != nil { + fmt.Printf("Failed to create configuration file: %v", err) + os.Exit(1) + } + _, err = file.WriteString("[General]\nserver = sfs.example.com\nport = 7392\nusername = user\nauth-token = token\n; http:// or https:// is necessary\n; port is optional\nhttp-server = http://sfs.example.com:80\npublic-key =\n\n[Share]\nsync-interval = 60") + if err != nil { + fmt.Printf("Error creating configuration file: %v", err) + os.Exit(1) + } + } + var err error config.file, err = ini.Load(config.fileLocation) if err != nil { fmt.Printf("Failed to open configuration file: %v", err) @@ -139,10 +218,6 @@ func (config *Configuration) load() { } } -func (config *Configuration) Reload() { - config.load() -} - func (config *Configuration) Save() { err := config.file.SaveTo(config.fileLocation) if err != nil {