config.go 1.5 KB

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