gitee_cli/config/config.go

135 lines
3.4 KiB
Go
Raw Permalink Normal View History

2024-04-07 17:49:39 +08:00
package config
import (
"fmt"
"os"
"path"
"strconv"
"strings"
"gopkg.in/yaml.v3"
)
var Conf Config
type Config struct {
AccessToken string `yaml:"access_token"`
ApiPrefix string `yaml:"api_prefix"`
UserId int `yaml:"user_id"`
UserName string `yaml:"user_name"`
DefaultEntPath string `yaml:"default_ent_path"`
DefaultPathWithNamespace string `yaml:"default_path_with_namespace"`
PremiumBuildPrefix string `yaml:"premium_build_prefix"`
SaasBuildPrefix string `yaml:"saas_build_prefix"`
CookiesJar string `yaml:"cookies_jar"`
DefaultEditor string `yaml:"default_editor"`
}
func Read(key string) (string, error) {
switch key {
case "access_token":
return Conf.AccessToken, nil
case "api_prefix":
return Conf.ApiPrefix, nil
case "user_id":
return fmt.Sprintf("%v", Conf.UserId), nil
case "user_name":
return Conf.UserName, nil
case "default_ent_path":
return Conf.DefaultEntPath, nil
case "default_path_with_namespace":
return Conf.DefaultPathWithNamespace, nil
case "premium_build_prefix":
return Conf.PremiumBuildPrefix, nil
case "saas_build_prefix":
return Conf.SaasBuildPrefix, nil
case "cookies_jar":
return Conf.CookiesJar, nil
case "default_editor":
return Conf.DefaultEditor, nil
default:
return "", fmt.Errorf("Unknown config key: %s", key)
}
}
// Update updates the configuration values from a provided map.
func Update(values map[string]interface{}) error {
for key, value := range values {
switch key {
case "access_token":
Conf.AccessToken = value.(string)
case "api_prefix":
Conf.ApiPrefix = value.(string)
case "user_id":
Conf.UserId, _ = strconv.Atoi(parseInput(value))
case "user_name":
Conf.UserName = value.(string)
case "default_ent_path":
Conf.DefaultEntPath = value.(string)
case "default_path_with_namespace":
Conf.DefaultPathWithNamespace = value.(string)
case "premium_build_prefix":
Conf.PremiumBuildPrefix = value.(string)
case "saas_build_prefix":
Conf.SaasBuildPrefix = value.(string)
case "cookies_jar":
Conf.CookiesJar = strings.TrimSpace(value.(string))
case "default_editor":
Conf.DefaultEditor = value.(string)
default:
return fmt.Errorf("Unknown configuration key: %s", key)
}
}
// Save the updated configuration to the file
config, err := yaml.Marshal(&Conf)
if err != nil {
return fmt.Errorf("Error marshalling configuration: %w", err)
}
homeDir, _ := os.UserHomeDir()
configPath := path.Join(homeDir, ".gitee", "config.yml")
err = os.WriteFile(configPath, config, 0644)
if err != nil {
return fmt.Errorf("Error overwriting configuration file: %w", err)
}
return nil
}
func parseInput(input interface{}) string {
switch input.(type) {
case string:
return input.(string)
case int:
return fmt.Sprintf("%v", input.(int))
default:
return ""
}
}
func init() {
homeDir, _ := os.UserHomeDir()
configPath := path.Join(homeDir, ".gitee", "config.yml")
config, err := os.ReadFile(configPath)
if err != nil {
fmt.Printf("读取配置文件失败!请检查 %s 配置内容!\n", configPath)
os.Exit(1)
}
err = yaml.Unmarshal(config, &Conf)
if err != nil {
fmt.Printf("初始化配置文件失败,请检查 %s 配置内容!\n", configPath)
os.Exit(1)
}
// 兼容 bubbletea border 渲染问题
// https://github.com/charmbracelet/lipgloss/issues/40
os.Setenv("RUNEWIDTH_EASTASIAN", "0")
}