settings.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. TimelineFixerSettings *TimelineFixerSettings `json:"timeline_fixer_settings"`
  16. }
  17. // GetSettings 获取 Settings 的实例
  18. func GetSettings() *Settings {
  19. if settings == nil {
  20. settingsOnce.Do(func() {
  21. settings = NewSettings()
  22. if my_util.IsFile(settings.configFPath) == false {
  23. // 配置文件不存在,新建一个空白的
  24. err := settings.Save()
  25. if err != nil {
  26. panic("Can't Save Config File:" + configName + " Error: " + err.Error())
  27. }
  28. } else {
  29. // 读取存在的文件
  30. err := settings.Read()
  31. if err != nil {
  32. panic("Can't Read Config File:" + configName + " Error: " + err.Error())
  33. }
  34. }
  35. })
  36. }
  37. return settings
  38. }
  39. // SetFullNewSettings 从 Web 端传入新的 Settings 完整设置
  40. func SetFullNewSettings(inSettings *Settings) error {
  41. settings = inSettings
  42. return settings.Save()
  43. }
  44. func NewSettings() *Settings {
  45. nowConfigFPath := ""
  46. return &Settings{
  47. configFPath: nowConfigFPath,
  48. UserInfo: &UserInfo{},
  49. CommonSettings: NewCommonSettings(),
  50. AdvancedSettings: NewAdvancedSettings(),
  51. EmbySettings: NewEmbySettings(),
  52. DeveloperSettings: NewDeveloperSettings(),
  53. TimelineFixerSettings: NewTimelineFixerSettings(),
  54. }
  55. }
  56. func (s *Settings) Read() error {
  57. return strcut_json.ToStruct(s.configFPath, s)
  58. }
  59. func (s *Settings) Save() error {
  60. return strcut_json.ToFile(s.configFPath, s)
  61. }
  62. func (s Settings) GetNoPasswordSettings() *Settings {
  63. nowSettings := clone.Clone(s).(*Settings)
  64. nowSettings.UserInfo.Password = noPassword4Show
  65. return nowSettings
  66. }
  67. // Check 检测,某些参数有范围限制
  68. func (s *Settings) Check() {
  69. // 每个网站最多找 Top 几的字幕结果,评价系统成熟后,才有设计的意义
  70. if s.AdvancedSettings.Topic < 0 || s.AdvancedSettings.Topic > 3 {
  71. s.AdvancedSettings.Topic = 1
  72. }
  73. // 如果 Debug 模式开启了,强制设置线程数为1,方便定位问题
  74. if s.AdvancedSettings.DebugMode == true {
  75. s.CommonSettings.Threads = 1
  76. } else {
  77. // 并发线程的范围控制
  78. if s.CommonSettings.Threads <= 0 {
  79. s.CommonSettings.Threads = 1
  80. } else if s.CommonSettings.Threads >= 3 {
  81. s.CommonSettings.Threads = 3
  82. }
  83. }
  84. }
  85. var (
  86. settings *Settings
  87. settingsOnce sync.Once
  88. )
  89. const (
  90. noPassword4Show = "******" // 填充使用
  91. configName = "ChineseSubFinderSettings.json"
  92. )