多项更新优化
This commit is contained in:
@@ -134,11 +134,7 @@ func (m *ShieldManager) LoadRules() error {
|
||||
|
||||
// loadLocalRules 加载自定义规则文件
|
||||
func (m *ShieldManager) loadLocalRules() error {
|
||||
if m.config.LocalRulesFile == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
file, err := os.Open(m.config.LocalRulesFile)
|
||||
file, err := os.Open("data/rules.txt")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -183,7 +179,7 @@ func (m *ShieldManager) getCacheFilePath(url string) string {
|
||||
// 简单处理,移除特殊字符,确保文件名合法
|
||||
hash = strings.ReplaceAll(hash, "/", "_")
|
||||
hash = strings.ReplaceAll(hash, "\\", "_")
|
||||
return filepath.Join(m.config.RemoteRulesCacheDir, hash+".rules")
|
||||
return filepath.Join("data/remote_rules", hash+".rules")
|
||||
}
|
||||
|
||||
// shouldUpdateCache 检查缓存是否需要更新
|
||||
@@ -298,7 +294,7 @@ func (m *ShieldManager) loadCachedRules(filePath string, source string) error {
|
||||
// saveRemoteRulesToCache 保存远程规则到缓存文件
|
||||
func (m *ShieldManager) saveRemoteRulesToCache(filePath string, data []byte) error {
|
||||
// 确保缓存目录存在
|
||||
if err := os.MkdirAll(m.config.RemoteRulesCacheDir, 0755); err != nil {
|
||||
if err := os.MkdirAll("data/remote_rules", 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -308,11 +304,7 @@ func (m *ShieldManager) saveRemoteRulesToCache(filePath string, data []byte) err
|
||||
|
||||
// loadHosts 加载hosts文件
|
||||
func (m *ShieldManager) loadHosts() error {
|
||||
if m.config.HostsFile == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
file, err := os.Open(m.config.HostsFile)
|
||||
file, err := os.Open("data/hosts.txt")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -585,7 +577,7 @@ func (m *ShieldManager) CheckDomainBlockDetails(domain string) map[string]interf
|
||||
|
||||
// 检查子域名排除规则
|
||||
parts := strings.Split(domain, ".")
|
||||
|
||||
|
||||
// 3. 先检查本地子域名排除规则
|
||||
for i := 0; i < len(parts)-1; i++ {
|
||||
subdomain := strings.Join(parts[i:], ".")
|
||||
@@ -653,7 +645,7 @@ func (m *ShieldManager) CheckDomainBlockDetails(domain string) map[string]interf
|
||||
|
||||
// 检查子域名匹配(AdGuardHome风格)
|
||||
// 从最长的子域名开始匹配,确保优先级正确
|
||||
|
||||
|
||||
// 9. 先检查本地子域名阻止规则
|
||||
for i := 0; i < len(parts)-1; i++ {
|
||||
subdomain := strings.Join(parts[i:], ".")
|
||||
@@ -827,11 +819,9 @@ func (m *ShieldManager) AddRule(rule string) error {
|
||||
m.parseRule(rule, true, "自定义规则")
|
||||
|
||||
// 持久化保存规则到文件
|
||||
if m.config.LocalRulesFile != "" {
|
||||
if err := m.saveRulesToFile(); err != nil {
|
||||
logger.Error("保存规则到文件失败", "error", err)
|
||||
return err
|
||||
}
|
||||
if err := m.saveRulesToFile(); err != nil {
|
||||
logger.Error("保存规则到文件失败", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -996,7 +986,7 @@ func (m *ShieldManager) RemoveRule(rule string) error {
|
||||
}
|
||||
|
||||
// 如果有规则被删除,持久化保存更改
|
||||
if removed && m.config.LocalRulesFile != "" {
|
||||
if removed {
|
||||
if err := m.saveRulesToFile(); err != nil {
|
||||
logger.Error("保存规则到文件失败", "error", err)
|
||||
return err
|
||||
@@ -1087,7 +1077,7 @@ func (m *ShieldManager) saveRulesToFile() error {
|
||||
|
||||
// 写入文件
|
||||
content := strings.Join(rules, "\n")
|
||||
return ioutil.WriteFile(m.config.LocalRulesFile, []byte(content), 0644)
|
||||
return ioutil.WriteFile("data/rules.txt", []byte(content), 0644)
|
||||
}
|
||||
|
||||
// AddHostsEntry 添加hosts条目
|
||||
@@ -1098,11 +1088,9 @@ func (m *ShieldManager) AddHostsEntry(ip, domain string) error {
|
||||
m.hostsMap[domain] = ip
|
||||
|
||||
// 持久化保存到hosts文件
|
||||
if m.config.HostsFile != "" {
|
||||
if err := m.saveHostsToFile(); err != nil {
|
||||
logger.Error("保存hosts到文件失败", "error", err)
|
||||
return err
|
||||
}
|
||||
if err := m.saveHostsToFile(); err != nil {
|
||||
logger.Error("保存hosts到文件失败", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -1117,11 +1105,9 @@ func (m *ShieldManager) RemoveHostsEntry(domain string) error {
|
||||
delete(m.hostsMap, domain)
|
||||
|
||||
// 持久化保存到hosts文件
|
||||
if m.config.HostsFile != "" {
|
||||
if err := m.saveHostsToFile(); err != nil {
|
||||
logger.Error("保存hosts到文件失败", "error", err)
|
||||
return err
|
||||
}
|
||||
if err := m.saveHostsToFile(); err != nil {
|
||||
logger.Error("保存hosts到文件失败", "error", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1151,7 +1137,7 @@ func (m *ShieldManager) saveHostsToFile() error {
|
||||
|
||||
// 写入文件
|
||||
content := strings.Join(lines, "\n")
|
||||
return ioutil.WriteFile(m.config.HostsFile, []byte(content), 0644)
|
||||
return ioutil.WriteFile("data/hosts.txt", []byte(content), 0644)
|
||||
}
|
||||
|
||||
// GetStats 获取规则统计信息
|
||||
@@ -1171,15 +1157,10 @@ func (m *ShieldManager) GetStats() map[string]interface{} {
|
||||
|
||||
// loadStatsData 从文件加载计数数据
|
||||
func (m *ShieldManager) loadStatsData() {
|
||||
if m.config.StatsFile == "" {
|
||||
logger.Info("Shield统计文件路径未配置,跳过加载")
|
||||
return
|
||||
}
|
||||
|
||||
// 获取绝对路径以避免工作目录问题
|
||||
statsFilePath, err := filepath.Abs(m.config.StatsFile)
|
||||
statsFilePath, err := filepath.Abs("data/shield_stats.json")
|
||||
if err != nil {
|
||||
logger.Error("获取Shield统计文件绝对路径失败", "path", m.config.StatsFile, "error", err)
|
||||
logger.Error("获取Shield统计文件绝对路径失败", "path", "data/shield_stats.json", "error", err)
|
||||
return
|
||||
}
|
||||
logger.Debug("尝试加载Shield统计数据", "file", statsFilePath)
|
||||
@@ -1271,15 +1252,10 @@ func (m *ShieldManager) loadStatsData() {
|
||||
|
||||
// saveStatsData 保存计数数据到文件
|
||||
func (m *ShieldManager) saveStatsData() {
|
||||
if m.config.StatsFile == "" {
|
||||
logger.Debug("Shield统计文件路径未配置,跳过保存")
|
||||
return
|
||||
}
|
||||
|
||||
// 获取绝对路径以避免工作目录问题
|
||||
statsFilePath, err := filepath.Abs(m.config.StatsFile)
|
||||
statsFilePath, err := filepath.Abs("data/shield_stats.json")
|
||||
if err != nil {
|
||||
logger.Error("获取Shield统计文件绝对路径失败", "path", m.config.StatsFile, "error", err)
|
||||
logger.Error("获取Shield统计文件绝对路径失败", "path", "data/shield_stats.json", "error", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1337,14 +1313,14 @@ func (m *ShieldManager) saveStatsData() {
|
||||
|
||||
// startAutoSaveStats 启动计数数据自动保存功能
|
||||
func (m *ShieldManager) startAutoSaveStats() {
|
||||
if m.config.StatsFile == "" || m.config.StatsSaveInterval <= 0 {
|
||||
if m.config.StatsSaveInterval <= 0 {
|
||||
return
|
||||
}
|
||||
|
||||
ticker := time.NewTicker(time.Duration(m.config.StatsSaveInterval) * time.Second)
|
||||
defer ticker.Stop()
|
||||
|
||||
logger.Info("启动Shield计数数据自动保存功能", "interval", m.config.StatsSaveInterval, "file", m.config.StatsFile)
|
||||
logger.Info("启动Shield计数数据自动保存功能", "interval", m.config.StatsSaveInterval, "file", "data/shield_stats.json")
|
||||
|
||||
// 定期保存数据
|
||||
for {
|
||||
|
||||
Reference in New Issue
Block a user