config.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. "os"
  10. "fmt"
  11. "runtime"
  12. )
  13. // GetConfig 统一获取配置的接口
  14. func GetConfig() *types.Config {
  15. configOnce.Do(func() {
  16. configViper, err := initConfigure()
  17. if err != nil {
  18. panic("GetConfig - initConfigure " + err.Error())
  19. }
  20. config, err = readConfig(configViper)
  21. if err != nil {
  22. panic("GetConfig - readConfig " + err.Error())
  23. }
  24. // 读取用户自定义的视频后缀名列表
  25. for _, customExt := range strings.Split(config.CustomVideoExts, ",") {
  26. global_value.CustomVideoExts = append(global_value.CustomVideoExts, "."+customExt)
  27. }
  28. // 这里进行 Default 值的判断
  29. config.SubTimelineFixerConfig.CheckDefault()
  30. })
  31. return config
  32. }
  33. // initConfigure 初始化配置文件实例
  34. func initConfigure() (*viper.Viper, error) {
  35. nowConfigDir := getConfigDir()
  36. if nowConfigDir == "" {
  37. fmt.Sprintf("initConfigure().getConfigDir()")
  38. }
  39. v := viper.New()
  40. v.SetConfigName("config") // 设置文件名称(无后缀)
  41. v.SetConfigType("yaml") // 设置后缀名 {"1.6以后的版本可以不设置该后缀"}
  42. v.AddConfigPath(nowConfigDir) // 设置文件所在路径
  43. err := v.ReadInConfig()
  44. if err != nil {
  45. return nil, errors.New("error reading config:" + err.Error())
  46. }
  47. return v, nil
  48. }
  49. // readConfig 读取配置文件
  50. func readConfig(viper *viper.Viper) (*types.Config, error) {
  51. conf := &types.Config{}
  52. err := viper.Unmarshal(conf)
  53. if err != nil {
  54. return nil, err
  55. }
  56. return conf, nil
  57. }
  58. func getConfigDir() string {
  59. nowConfigDir := ""
  60. sysType := runtime.GOOS
  61. if sysType == "linux" {
  62. nowConfigDir = configDirLinux
  63. }
  64. if sysType == "windows" {
  65. nowConfigDir = configDirWindows
  66. }
  67. if sysType == "darwin" {
  68. home, _ := os.UserHomeDir()
  69. nowConfigDir = home + "/.config/chinesesubfinder/" + configDirDarwin
  70. }
  71. return nowConfigDir
  72. }
  73. var (
  74. config *types.Config
  75. configOnce sync.Once
  76. )
  77. const (
  78. configDirLinux = "/config/"
  79. configDirWindows = ""
  80. configDirDarwin = ""
  81. )