mirror of
https://github.com/simon-ding/polaris.git
synced 2026-05-28 13:37:43 +08:00
refactor: name testing
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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+`)
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -160,7 +159,7 @@ func SearchMovie(db1 *db.Client, param *SearchParam) ([]torznab.Result, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
res := searchWithTorznab(db1, movieDetail.NameEn, movieDetail.NameCn, movieDetail.OriginalName)
|
res := searchWithTorznab(db1, movieDetail.NameEn, movieDetail.NameCn, movieDetail.OriginalName)
|
||||||
if movieDetail.Extras.IsJav(){
|
if movieDetail.Extras.IsJav() {
|
||||||
res1 := searchWithTorznab(db1, movieDetail.Extras.JavId)
|
res1 := searchWithTorznab(db1, movieDetail.Extras.JavId)
|
||||||
res = append(res, res1...)
|
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 !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)
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user