settings.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package settings
  2. import (
  3. "github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
  4. "github.com/allanpk716/ChineseSubFinder/internal/pkg/strcut_json"
  5. "github.com/huandu/go-clone"
  6. "sync"
  7. )
  8. type Settings struct {
  9. configFPath string
  10. UserInfo *UserInfo `json:"user_info"`
  11. CommonSettings *CommonSettings `json:"common_settings"`
  12. AdvancedSettings *AdvancedSettings `json:"advanced_settings"`
  13. EmbySettings *EmbySettings `json:"emby_settings"`
  14. DeveloperSettings *DeveloperSettings `json:"developer_settings"`
  15. }
  16. // GetSettings 获取 Settings 的实例
  17. func GetSettings() *Settings {
  18. if settings == nil {
  19. settingsOnce.Do(func() {
  20. settings = NewSettings()
  21. if my_util.IsFile(settings.configFPath) == false {
  22. // 配置文件不存在,新建一个空白的
  23. err := settings.Save()
  24. if err != nil {
  25. panic("Can't Save Config File:" + configName + " Error: " + err.Error())
  26. }
  27. } else {
  28. // 读取存在的文件
  29. err := settings.Read()
  30. if err != nil {
  31. panic("Can't Read Config File:" + configName + " Error: " + err.Error())
  32. }
  33. }
  34. })
  35. }
  36. return settings
  37. }
  38. // SetFullNewSettings 从 Web 端传入新的 Settings 完整设置
  39. func SetFullNewSettings(inSettings *Settings) error {
  40. settings = inSettings
  41. return settings.Save()
  42. }
  43. func NewSettings() *Settings {
  44. nowConfigFPath := ""
  45. return &Settings{
  46. configFPath: nowConfigFPath,
  47. UserInfo: &UserInfo{},
  48. CommonSettings: NewCommonSettings(),
  49. AdvancedSettings: NewAdvancedSettings(),
  50. EmbySettings: NewEmbySettings(),
  51. DeveloperSettings: NewDeveloperSettings(),
  52. }
  53. }
  54. func (s *Settings) Read() error {
  55. return strcut_json.ToStruct(s.configFPath, s)
  56. }
  57. func (s *Settings) Save() error {
  58. return strcut_json.ToFile(s.configFPath, s)
  59. }
  60. func (s Settings) GetNoPasswordSettings() *Settings {
  61. nowSettings := clone.Clone(s).(*Settings)
  62. nowSettings.UserInfo.Password = noPassword4Show
  63. return nowSettings
  64. }
  65. var (
  66. settings *Settings
  67. settingsOnce sync.Once
  68. )
  69. const (
  70. noPassword4Show = "******" // 填充使用
  71. configName = "ChineseSubFinderSettings.json"
  72. )