feat: parse multi episode like S01E01-S01E21

This commit is contained in:
Simon Ding
2024-11-15 12:38:10 +08:00
parent 53cbca3101
commit 45cd94f65b
2 changed files with 19 additions and 29 deletions

View File

@@ -125,38 +125,28 @@ func findEpisodes(s string) (start int, end int) {
r := rr[i] r := rr[i]
if r == 'e' { if r == 'e' {
n, l := adjacentNumber(s, i+1) n, l := adjacentNumber(s, i+1)
end := i + l
if n > 0 { if n > 0 {
for j := i + l + 1; j < len(rr); j++ {
if len(rr) > end+1 && rr[end+1] == '-' { //multi episodes r1 := rr[j]
if len(rr) > end+2 { if r1 == ' ' || r1 == '-' {
if rr[end+2] == 'e' { continue
n1, _ := adjacentNumber(s, end+3) }
if n1 > 0 { if r1 == 'e' {
return n, n1 continue
} }
} else { if r1 == 's' {
n1, _ := adjacentNumber(s, end+2) s1, l1 := adjacentNumber(s, j+1)
if s1 > 0 { //S01E01-S01E21
n1, _ := adjacentNumber(s, j+l1+2)
if n1 > 0 { if n1 > 0 {
return n, n1 return n, n1
} }
} }
} }
} else if len(rr) > end+2 && rr[end+1] == ' ' && rr[end+2] == '-' { n1, _ := adjacentNumber(s, j)
start := 0 if n1 > 0 {
for j := end + 3; j < len(rr); j++ { return n, n1
if rr[j] == ' ' || rr[j] == 'e' {
continue
}
start = j
break
}
if start != 0 {
n1, _ := adjacentNumber(s, start)
if n1 > 0 {
return n, n1
}
} }
} }
return n, n return n, n
@@ -401,7 +391,7 @@ func parseName(name string) *Info {
if !utils.IsASCII(name) { if !utils.IsASCII(name) {
season = 1 season = 1
} }
p = len(name) -1 p = len(name) - 1
} }
meta.Season = season meta.Season = season
@@ -421,7 +411,7 @@ func parseName(name string) *Info {
//} //}
//tv name //tv name
if utils.IsASCII(name) && p < len(name){ if utils.IsASCII(name) && p < len(name) {
meta.NameEn = name[:p] meta.NameEn = name[:p]
meta.NameCn = meta.NameEn meta.NameCn = meta.NameEn
} else { } else {

View File

@@ -41,7 +41,7 @@ lo:
//log.Infof("torrent resource: %+v", r) //log.Infof("torrent resource: %+v", r)
meta := metadata.ParseTv(r.Name) meta := metadata.ParseTv(r.Name)
if meta.IsSeasonPack {//try to parse episode number with description if meta.IsSeasonPack { //try to parse episode number with description
mm := metadata.ParseTv(r.Description) mm := metadata.ParseTv(r.Description)
if mm.StartEpisode > 0 { //sometimes they put episode info in desc text if mm.StartEpisode > 0 { //sometimes they put episode info in desc text
meta.IsSeasonPack = false meta.IsSeasonPack = false
@@ -70,7 +70,7 @@ lo:
} }
if len(param.Episodes) > 0 { //not season pack, but episode number not equal if len(param.Episodes) > 0 { //not season pack, but episode number not equal
for i := meta.StartEpisode; i < meta.EndEpisode; i++ { for i := meta.StartEpisode; i <= meta.EndEpisode; i++ {
if !slices.Contains(param.Episodes, i) { if !slices.Contains(param.Episodes, i) {
continue lo continue lo
} }