refactor: name testing

This commit is contained in:
Simon Ding
2024-09-29 18:43:29 +08:00
parent f9556ec2d2
commit 84a0197776
4 changed files with 48 additions and 44 deletions

View File

@@ -14,13 +14,18 @@ type MovieMetadata struct {
IsQingban bool IsQingban bool
} }
func (m *MovieMetadata) IsAcceptable(name string) bool { func (m *MovieMetadata) IsAcceptable(names... string) bool {
for _, name := range names {
re := regexp.MustCompile(`[^\p{L}\w\s]`) re := regexp.MustCompile(`[^\p{L}\w\s]`)
name = re.ReplaceAllString(strings.ToLower(name), " ") name = re.ReplaceAllString(strings.ToLower(name), " ")
name2 := re.ReplaceAllString(strings.ToLower(m.Name), " ") name2 := re.ReplaceAllString(strings.ToLower(m.Name), " ")
name = strings.Join(strings.Fields(name), " ") name = strings.Join(strings.Fields(name), " ")
name2 = strings.Join(strings.Fields(name2), " ") name2 = strings.Join(strings.Fields(name2), " ")
return strings.Contains(name2, name) if strings.Contains(name2, name) {
return true
}
}
return false
} }

View File

@@ -18,7 +18,8 @@ type Metadata struct {
IsSeasonPack bool IsSeasonPack bool
} }
func (m *Metadata) IsAcceptable(name string) bool { func (m *Metadata) IsAcceptable(names... string) bool {
for _, name := range names {
re := regexp.MustCompile(`[^\p{L}\w\s]`) re := regexp.MustCompile(`[^\p{L}\w\s]`)
name = re.ReplaceAllString(strings.ToLower(name), " ") name = re.ReplaceAllString(strings.ToLower(name), " ")
nameCN := re.ReplaceAllString(strings.ToLower(m.NameCn), " ") nameCN := re.ReplaceAllString(strings.ToLower(m.NameCn), " ")
@@ -26,7 +27,12 @@ func (m *Metadata) IsAcceptable(name string) bool {
name = strings.Join(strings.Fields(name), " ") name = strings.Join(strings.Fields(name), " ")
nameCN = strings.Join(strings.Fields(nameCN), " ") nameCN = strings.Join(strings.Fields(nameCN), " ")
nameEN = strings.Join(strings.Fields(nameEN), " ") nameEN = strings.Join(strings.Fields(nameEN), " ")
return strings.Contains(nameCN, name) || strings.Contains(nameEN, name) if strings.Contains(nameCN, name) || strings.Contains(nameEN, name) {
return true
}
}
return false
} }

View File

@@ -56,17 +56,17 @@ func RandString(n int) string {
return string(b) return string(b)
} }
func IsNameAcceptable(name1, name2 string) bool { // func IsNameAcceptable(name1, name2 string) bool {
re := regexp.MustCompile(`[^\p{L}\w\s]`) // re := regexp.MustCompile(`[^\p{L}\w\s]`)
name1 = re.ReplaceAllString(strings.ToLower(name1), " ") // name1 = re.ReplaceAllString(strings.ToLower(name1), " ")
name2 = re.ReplaceAllString(strings.ToLower(name2), " ") // name2 = re.ReplaceAllString(strings.ToLower(name2), " ")
name1 = strings.Join(strings.Fields(name1), " ") // name1 = strings.Join(strings.Fields(name1), " ")
name2 = strings.Join(strings.Fields(name2), " ") // name2 = strings.Join(strings.Fields(name2), " ")
if strings.Contains(name1, name2) || strings.Contains(name2, name1) { // if strings.Contains(name1, name2) || strings.Contains(name2, name1) {
return true // return true
} // }
return false // return false
} // }
func FindSeasonEpisodeNum(name string) (se int, ep int, err error) { func FindSeasonEpisodeNum(name string) (se int, ep int, err error) {
seRe := regexp.MustCompile(`S\d+`) seRe := regexp.MustCompile(`S\d+`)

View File

@@ -7,7 +7,6 @@ import (
"polaris/log" "polaris/log"
"polaris/pkg/metadata" "polaris/pkg/metadata"
"polaris/pkg/torznab" "polaris/pkg/torznab"
"regexp"
"slices" "slices"
"sort" "sort"
"strconv" "strconv"
@@ -47,7 +46,7 @@ func SearchTvSeries(db1 *db.Client, param *SearchParam) ([]torznab.Result, error
} }
if !imdbIDMatchExact(series.ImdbID, r.ImdbId) { //imdb id not exact match, check file name if !imdbIDMatchExact(series.ImdbID, r.ImdbId) { //imdb id not exact match, check file name
if !torrentNameOk(series, r.Name) { if !torrentNameOk(series, meta) {
continue continue
} }
} }
@@ -177,7 +176,7 @@ func SearchMovie(db1 *db.Client, param *SearchParam) ([]torznab.Result, error) {
} }
if !imdbIDMatchExact(movieDetail.ImdbID, r.ImdbId) { if !imdbIDMatchExact(movieDetail.ImdbID, r.ImdbId) {
if !torrentNameOk(movieDetail, r.Name) { if !torrentNameOk(movieDetail, meta) {
continue continue
} }
if !movieDetail.Extras.IsJav() { if !movieDetail.Extras.IsJav() {
@@ -300,19 +299,13 @@ func dedup(list []torznab.Result) []torznab.Result {
return res return res
} }
func torrentNameOk(detail *db.MediaDetails, torrentName string) bool { type NameTester interface {
if detail.Extras.IsJav() && isNameAcceptable(torrentName, detail.Extras.JavId) { IsAcceptable(names ...string) bool
return true
}
return isNameAcceptable(torrentName, detail.NameCn) || isNameAcceptable(torrentName, detail.NameEn) ||
isNameAcceptable(torrentName, detail.OriginalName)
} }
func isNameAcceptable(torrentName, wantedName string) bool { func torrentNameOk(detail *db.MediaDetails, tester NameTester) bool {
re := regexp.MustCompile(`[^\p{L}\w\s]`) if detail.Extras.IsJav() && tester.IsAcceptable(detail.Extras.JavId) {
torrentName = re.ReplaceAllString(strings.ToLower(torrentName), " ") return true
wantedName = re.ReplaceAllString(strings.ToLower(wantedName), " ") }
torrentName = strings.Join(strings.Fields(torrentName), " ") return tester.IsAcceptable(detail.NameCn, detail.NameEn, detail.OriginalName)
wantedName = strings.Join(strings.Fields(wantedName), " ")
return strings.Contains(torrentName, wantedName)
} }