Files
admin e6956aa001 Initial commit: TaskPool React panel
- React frontend with route-level code splitting
- Backend rebranded from Baihu to TaskPool
- DB brand migration script and local compatibility
2026-07-26 08:43:52 +08:00

72 lines
1.8 KiB
Go

package repo
import (
"github.com/engigu/taskpool/internal/models"
"regexp"
"strings"
)
// QinglongStrategy 实现与青龙兼容的解析逻辑
type QinglongStrategy struct{}
func (s *QinglongStrategy) SupportExtension(ext string, exts []string) bool {
for _, e := range exts {
if ext == e {
return true
}
}
return false
}
func (s *QinglongStrategy) ShouldProcess(relRepoPath, filename string, cfg models.RepoConfig) bool {
// 只有在显式设置了白名单时才进行白名单校验 (青龙行为)
if cfg.WhitelistPaths != "" {
if !matchesQLPattern(relRepoPath, filename, cfg.WhitelistPaths) {
return false
}
}
// 校验黑名单
if cfg.Blacklist != "" {
if matchesQLPattern(relRepoPath, filename, cfg.Blacklist) {
return false
}
}
return true
}
func (s *QinglongStrategy) ExtractMeta(path string, ext string, cfg models.RepoConfig) (taskName string, taskCron string) {
return ExtractScriptMeta(path, ext)
}
// matchesQLPattern 应用关键字过滤逻辑(正则或包含匹配)
func matchesQLPattern(rel, filename string, keywordsStr string) bool {
if keywordsStr == "" {
return false
}
keywords := splitKeywords(keywordsStr)
for _, k := range keywords {
// 1. 尝试作为正则整体进行匹配,默认不区分大小写 (?i)
pattern := k
if !strings.HasPrefix(pattern, "(?i)") {
pattern = "(?i)" + pattern
}
reg, err := regexp.Compile(pattern)
if err == nil {
// 优先匹配文件名(解决 ^jd[^_] 这种锚点在相对路径下失效的问题)
if reg.MatchString(filename) || reg.MatchString(rel) {
return true
}
} else {
// 回退逻辑:全小写包含判断
kLower := strings.ToLower(k)
if strings.Contains(strings.ToLower(rel), kLower) || strings.Contains(strings.ToLower(filename), kLower) {
return true
}
}
}
return false
}