config.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package pkg
  2. import (
  3. "errors"
  4. "github.com/allanpk716/ChineseSubFinder/internal/types"
  5. "github.com/spf13/viper"
  6. "strings"
  7. "sync"
  8. )
  9. // GetConfig 统一获取配置的接口
  10. func GetConfig() *types.Config {
  11. configOnce.Do(func() {
  12. configViper, err := initConfigure()
  13. if err != nil {
  14. panic("GetConfig - initConfigure " + err.Error())
  15. }
  16. config, err = readConfig(configViper)
  17. if err != nil {
  18. panic("GetConfig - readConfig " + err.Error())
  19. }
  20. // 读取用户自定义的视频后缀名列表
  21. for _, customExt := range strings.Split(config.CustomVideoExts, ",") {
  22. customVideoExts = append(customVideoExts, "."+customExt)
  23. }
  24. // 这里进行 Default 值的判断
  25. config.SubTimelineFixerConfig.CheckDefault()
  26. })
  27. return config
  28. }
  29. // initConfigure 初始化配置文件实例
  30. func initConfigure() (*viper.Viper, error) {
  31. v := viper.New()
  32. v.SetConfigName("config") // 设置文件名称(无后缀)
  33. v.SetConfigType("yaml") // 设置后缀名 {"1.6以后的版本可以不设置该后缀"}
  34. v.AddConfigPath(".") // 设置文件所在路径
  35. err := v.ReadInConfig()
  36. if err != nil {
  37. return nil, errors.New("error reading config:" + err.Error())
  38. }
  39. return v, nil
  40. }
  41. // readConfig 读取配置文件
  42. func readConfig(viper *viper.Viper) (*types.Config, error) {
  43. conf := &types.Config{}
  44. err := viper.Unmarshal(conf)
  45. if err != nil {
  46. return nil, err
  47. }
  48. return conf, nil
  49. }
  50. var (
  51. config *types.Config
  52. configOnce sync.Once
  53. )