feat: add geofile update schedule settings infrastructure

This commit is contained in:
root 2026-04-28 10:12:04 +08:00
parent b930ec71f9
commit 9bb4cc8d7f
2 changed files with 46 additions and 16 deletions

View file

@ -127,6 +127,11 @@ type AllSetting struct {
BackupFrequency string `json:"backupFrequency" form:"backupFrequency"` BackupFrequency string `json:"backupFrequency" form:"backupFrequency"`
BackupHour int `json:"backupHour" form:"backupHour"` BackupHour int `json:"backupHour" form:"backupHour"`
BackupMaxCount int `json:"backupMaxCount" form:"backupMaxCount"` BackupMaxCount int `json:"backupMaxCount" form:"backupMaxCount"`
// Geofile update schedule settings
GeofileUpdateEnabled bool `json:"geofileUpdateEnabled" form:"geofileUpdateEnabled"`
GeofileUpdateFrequency string `json:"geofileUpdateFrequency" form:"geofileUpdateFrequency"`
GeofileUpdateHour int `json:"geofileUpdateHour" form:"geofileUpdateHour"`
} }
// CheckValid validates all settings in the AllSetting struct, checking IP addresses, ports, SSL certificates, and other configuration values. // CheckValid validates all settings in the AllSetting struct, checking IP addresses, ports, SSL certificates, and other configuration values.

View file

@ -133,6 +133,11 @@ var defaultValueMap = map[string]string{
"backupFrequency": "daily", "backupFrequency": "daily",
"backupHour": "3", "backupHour": "3",
"backupMaxCount": "10", "backupMaxCount": "10",
// Geofile update schedule settings
"geofileUpdateEnabled": "false",
"geofileUpdateFrequency": "daily",
"geofileUpdateHour": "4",
} }
// settingGroups defines the nested JSON structure for on-disk settings. // settingGroups defines the nested JSON structure for on-disk settings.
@ -259,6 +264,11 @@ var settingGroups = map[string]map[string]string{
"hour": "backupHour", "hour": "backupHour",
"maxCount": "backupMaxCount", "maxCount": "backupMaxCount",
}, },
"geofileUpdate": {
"enabled": "geofileUpdateEnabled",
"frequency": "geofileUpdateFrequency",
"hour": "geofileUpdateHour",
},
} }
var legacySettingGroups = map[string]map[string]string{ var legacySettingGroups = map[string]map[string]string{
@ -1166,6 +1176,18 @@ func (s *SettingService) GetBackupMaxCount() (int, error) {
return s.getInt("backupMaxCount") return s.getInt("backupMaxCount")
} }
func (s *SettingService) GetGeofileUpdateEnabled() (bool, error) {
return s.getBool("geofileUpdateEnabled")
}
func (s *SettingService) GetGeofileUpdateFrequency() (string, error) {
return s.getString("geofileUpdateFrequency")
}
func (s *SettingService) GetGeofileUpdateHour() (int, error) {
return s.getInt("geofileUpdateHour")
}
func (s *SettingService) UpdateAllSetting(allSetting *entity.AllSetting, presentKeys map[string]struct{}) error { func (s *SettingService) UpdateAllSetting(allSetting *entity.AllSetting, presentKeys map[string]struct{}) error {
if err := allSetting.CheckValid(); err != nil { if err := allSetting.CheckValid(); err != nil {
return err return err
@ -1233,22 +1255,25 @@ func extractHostname(host string) string {
func (s *SettingService) GetDefaultSettings(host string) (any, error) { func (s *SettingService) GetDefaultSettings(host string) (any, error) {
type settingFunc func() (any, error) type settingFunc func() (any, error)
settings := map[string]settingFunc{ settings := map[string]settingFunc{
"expireDiff": func() (any, error) { return s.GetExpireDiff() }, "expireDiff": func() (any, error) { return s.GetExpireDiff() },
"trafficDiff": func() (any, error) { return s.GetTrafficDiff() }, "trafficDiff": func() (any, error) { return s.GetTrafficDiff() },
"pageSize": func() (any, error) { return s.GetPageSize() }, "pageSize": func() (any, error) { return s.GetPageSize() },
"defaultCert": func() (any, error) { return s.GetCertFile() }, "defaultCert": func() (any, error) { return s.GetCertFile() },
"defaultKey": func() (any, error) { return s.GetKeyFile() }, "defaultKey": func() (any, error) { return s.GetKeyFile() },
"tgBotEnable": func() (any, error) { return s.GetTgbotEnabled() }, "tgBotEnable": func() (any, error) { return s.GetTgbotEnabled() },
"subEnable": func() (any, error) { return s.GetSubEnable() }, "subEnable": func() (any, error) { return s.GetSubEnable() },
"subJsonEnable": func() (any, error) { return s.GetSubJsonEnable() }, "subJsonEnable": func() (any, error) { return s.GetSubJsonEnable() },
"subClashEnable": func() (any, error) { return s.GetSubClashEnable() }, "subClashEnable": func() (any, error) { return s.GetSubClashEnable() },
"subTitle": func() (any, error) { return s.GetSubTitle() }, "subTitle": func() (any, error) { return s.GetSubTitle() },
"subURI": func() (any, error) { return s.GetSubURI() }, "subURI": func() (any, error) { return s.GetSubURI() },
"subJsonURI": func() (any, error) { return s.GetSubJsonURI() }, "subJsonURI": func() (any, error) { return s.GetSubJsonURI() },
"subClashURI": func() (any, error) { return s.GetSubClashURI() }, "subClashURI": func() (any, error) { return s.GetSubClashURI() },
"remarkModel": func() (any, error) { return s.GetRemarkModel() }, "remarkModel": func() (any, error) { return s.GetRemarkModel() },
"datepicker": func() (any, error) { return s.GetDatepicker() }, "datepicker": func() (any, error) { return s.GetDatepicker() },
"ipLimitEnable": func() (any, error) { return s.GetIpLimitEnable() }, "ipLimitEnable": func() (any, error) { return s.GetIpLimitEnable() },
"geofileUpdateEnabled": func() (any, error) { return s.GetGeofileUpdateEnabled() },
"geofileUpdateFrequency": func() (any, error) { return s.GetGeofileUpdateFrequency() },
"geofileUpdateHour": func() (any, error) { return s.GetGeofileUpdateHour() },
} }
result := make(map[string]any) result := make(map[string]any)