79 lines
1.4 KiB
Go
79 lines
1.4 KiB
Go
package timewarrior
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"strings"
|
|
)
|
|
|
|
type TWConfig struct {
|
|
config map[string]string
|
|
}
|
|
|
|
var (
|
|
defaultConfig = map[string]string{
|
|
"uda.timesquire.default.tag": "",
|
|
}
|
|
)
|
|
|
|
func NewConfig(config []string) *TWConfig {
|
|
cfg := parseConfig(config)
|
|
|
|
for key, value := range defaultConfig {
|
|
if _, ok := cfg[key]; !ok {
|
|
cfg[key] = value
|
|
}
|
|
}
|
|
|
|
return &TWConfig{
|
|
config: cfg,
|
|
}
|
|
}
|
|
|
|
func (tc *TWConfig) GetConfig() map[string]string {
|
|
return tc.config
|
|
}
|
|
|
|
func (tc *TWConfig) Get(key string) string {
|
|
if _, ok := tc.config[key]; !ok {
|
|
slog.Debug(fmt.Sprintf("Key not found in config: %s", key))
|
|
return ""
|
|
}
|
|
|
|
return tc.config[key]
|
|
}
|
|
|
|
func parseConfig(config []string) map[string]string {
|
|
configMap := make(map[string]string)
|
|
|
|
for _, line := range config {
|
|
// Skip empty lines and comments
|
|
line = strings.TrimSpace(line)
|
|
if line == "" || strings.HasPrefix(line, "#") {
|
|
continue
|
|
}
|
|
|
|
// Timewarrior config format: key = value or key: value
|
|
var key, value string
|
|
if strings.Contains(line, "=") {
|
|
parts := strings.SplitN(line, "=", 2)
|
|
if len(parts) == 2 {
|
|
key = strings.TrimSpace(parts[0])
|
|
value = strings.TrimSpace(parts[1])
|
|
}
|
|
} else if strings.Contains(line, ":") {
|
|
parts := strings.SplitN(line, ":", 2)
|
|
if len(parts) == 2 {
|
|
key = strings.TrimSpace(parts[0])
|
|
value = strings.TrimSpace(parts[1])
|
|
}
|
|
}
|
|
|
|
if key != "" {
|
|
configMap[key] = value
|
|
}
|
|
}
|
|
|
|
return configMap
|
|
}
|