diff --git a/pkg/metadata/movie.go b/pkg/metadata/movie.go index ee07c41..211ce2a 100644 --- a/pkg/metadata/movie.go +++ b/pkg/metadata/movie.go @@ -14,13 +14,18 @@ type MovieMetadata struct { IsQingban bool } -func (m *MovieMetadata) IsAcceptable(name string) bool { - re := regexp.MustCompile(`[^\p{L}\w\s]`) - name = re.ReplaceAllString(strings.ToLower(name), " ") - name2 := re.ReplaceAllString(strings.ToLower(m.Name), " ") - name = strings.Join(strings.Fields(name), " ") - name2 = strings.Join(strings.Fields(name2), " ") - return strings.Contains(name2, name) +func (m *MovieMetadata) IsAcceptable(names... string) bool { + for _, name := range names { + re := regexp.MustCompile(`[^\p{L}\w\s]`) + name = re.ReplaceAllString(strings.ToLower(name), " ") + name2 := re.ReplaceAllString(strings.ToLower(m.Name), " ") + name = strings.Join(strings.Fields(name), " ") + name2 = strings.Join(strings.Fields(name2), " ") + if strings.Contains(name2, name) { + return true + } + } + return false } diff --git a/pkg/metadata/tv.go b/pkg/metadata/tv.go index 46994b2..985dd67 100644 --- a/pkg/metadata/tv.go +++ b/pkg/metadata/tv.go @@ -18,15 +18,21 @@ type Metadata struct { IsSeasonPack bool } -func (m *Metadata) IsAcceptable(name string) bool { - re := regexp.MustCompile(`[^\p{L}\w\s]`) - name = re.ReplaceAllString(strings.ToLower(name), " ") - nameCN := re.ReplaceAllString(strings.ToLower(m.NameCn), " ") - nameEN := re.ReplaceAllString(strings.ToLower(m.NameEn), " ") - name = strings.Join(strings.Fields(name), " ") - nameCN = strings.Join(strings.Fields(nameCN), " ") - nameEN = strings.Join(strings.Fields(nameEN), " ") - return strings.Contains(nameCN, name) || strings.Contains(nameEN, name) +func (m *Metadata) IsAcceptable(names... string) bool { + for _, name := range names { + re := regexp.MustCompile(`[^\p{L}\w\s]`) + name = re.ReplaceAllString(strings.ToLower(name), " ") + nameCN := re.ReplaceAllString(strings.ToLower(m.NameCn), " ") + nameEN := re.ReplaceAllString(strings.ToLower(m.NameEn), " ") + name = strings.Join(strings.Fields(name), " ") + nameCN = strings.Join(strings.Fields(nameCN), " ") + nameEN = strings.Join(strings.Fields(nameEN), " ") + if strings.Contains(nameCN, name) || strings.Contains(nameEN, name) { + return true + } + + } + return false } diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 7383893..bb89048 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -56,17 +56,17 @@ func RandString(n int) string { return string(b) } -func IsNameAcceptable(name1, name2 string) bool { - re := regexp.MustCompile(`[^\p{L}\w\s]`) - name1 = re.ReplaceAllString(strings.ToLower(name1), " ") - name2 = re.ReplaceAllString(strings.ToLower(name2), " ") - name1 = strings.Join(strings.Fields(name1), " ") - name2 = strings.Join(strings.Fields(name2), " ") - if strings.Contains(name1, name2) || strings.Contains(name2, name1) { - return true - } - return false -} +// func IsNameAcceptable(name1, name2 string) bool { +// re := regexp.MustCompile(`[^\p{L}\w\s]`) +// name1 = re.ReplaceAllString(strings.ToLower(name1), " ") +// name2 = re.ReplaceAllString(strings.ToLower(name2), " ") +// name1 = strings.Join(strings.Fields(name1), " ") +// name2 = strings.Join(strings.Fields(name2), " ") +// if strings.Contains(name1, name2) || strings.Contains(name2, name1) { +// return true +// } +// return false +// } func FindSeasonEpisodeNum(name string) (se int, ep int, err error) { seRe := regexp.MustCompile(`S\d+`) diff --git a/server/core/torrent.go b/server/core/torrent.go index 43ec8a1..d28f0b8 100644 --- a/server/core/torrent.go +++ b/server/core/torrent.go @@ -7,7 +7,6 @@ import ( "polaris/log" "polaris/pkg/metadata" "polaris/pkg/torznab" - "regexp" "slices" "sort" "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 !torrentNameOk(series, r.Name) { + if !torrentNameOk(series, meta) { continue } } @@ -160,7 +159,7 @@ func SearchMovie(db1 *db.Client, param *SearchParam) ([]torznab.Result, error) { } res := searchWithTorznab(db1, movieDetail.NameEn, movieDetail.NameCn, movieDetail.OriginalName) - if movieDetail.Extras.IsJav(){ + if movieDetail.Extras.IsJav() { res1 := searchWithTorznab(db1, movieDetail.Extras.JavId) res = append(res, res1...) } @@ -177,7 +176,7 @@ func SearchMovie(db1 *db.Client, param *SearchParam) ([]torznab.Result, error) { } if !imdbIDMatchExact(movieDetail.ImdbID, r.ImdbId) { - if !torrentNameOk(movieDetail, r.Name) { + if !torrentNameOk(movieDetail, meta) { continue } if !movieDetail.Extras.IsJav() { @@ -300,19 +299,13 @@ func dedup(list []torznab.Result) []torznab.Result { return res } -func torrentNameOk(detail *db.MediaDetails, torrentName string) bool { - if detail.Extras.IsJav() && isNameAcceptable(torrentName, detail.Extras.JavId) { - return true - } - return isNameAcceptable(torrentName, detail.NameCn) || isNameAcceptable(torrentName, detail.NameEn) || - isNameAcceptable(torrentName, detail.OriginalName) +type NameTester interface { + IsAcceptable(names ...string) bool } -func isNameAcceptable(torrentName, wantedName string) bool { - re := regexp.MustCompile(`[^\p{L}\w\s]`) - torrentName = re.ReplaceAllString(strings.ToLower(torrentName), " ") - wantedName = re.ReplaceAllString(strings.ToLower(wantedName), " ") - torrentName = strings.Join(strings.Fields(torrentName), " ") - wantedName = strings.Join(strings.Fields(wantedName), " ") - return strings.Contains(torrentName, wantedName) +func torrentNameOk(detail *db.MediaDetails, tester NameTester) bool { + if detail.Extras.IsJav() && tester.IsAcceptable(detail.Extras.JavId) { + return true + } + return tester.IsAcceptable(detail.NameCn, detail.NameEn, detail.OriginalName) }