mirror of
https://github.com/idanoo/autobrr
synced 2025-07-23 08:49:13 +00:00
fix(releases): parse missing source and misinterpreted group name (#1820)
fix(releases): parse missing source and groups
This commit is contained in:
parent
50f1e4e7d5
commit
c0882aff84
4 changed files with 162 additions and 0 deletions
|
@ -1030,6 +1030,30 @@ func containsAnySlice(tags []string, filters []string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func basicContainsSlice(tag string, filters []string) bool {
|
||||||
|
return basicContainsMatch([]string{tag}, filters)
|
||||||
|
}
|
||||||
|
|
||||||
|
func basicContainsMatch(tags []string, filters []string) bool {
|
||||||
|
for _, tag := range tags {
|
||||||
|
if tag == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, filter := range filters {
|
||||||
|
if filter == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if tag == filter {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func checkFreeleechPercent(announcePercent int, filterPercent string) bool {
|
func checkFreeleechPercent(announcePercent int, filterPercent string) bool {
|
||||||
filters := strings.Split(filterPercent, ",")
|
filters := strings.Split(filterPercent, ",")
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,21 @@ func TestFilter_CheckFilter(t *testing.T) {
|
||||||
},
|
},
|
||||||
want: true,
|
want: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "movie_parse_1",
|
||||||
|
fields: &Release{
|
||||||
|
TorrentName: "White Christmas 1954 2160p Remux DoVi HDR10 HEVC DTS-HD MA 5.1-VHS",
|
||||||
|
},
|
||||||
|
args: args{
|
||||||
|
filter: Filter{
|
||||||
|
Enabled: true,
|
||||||
|
Sources: []string{"BluRay", "UHD.BluRay"},
|
||||||
|
MatchReleaseGroups: "VHS",
|
||||||
|
},
|
||||||
|
rejectionReasons: &RejectionReasons{data: []Rejection{}},
|
||||||
|
},
|
||||||
|
want: true,
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
name: "movie_parse_2",
|
name: "movie_parse_2",
|
||||||
|
|
|
@ -360,6 +360,50 @@ func (r *Release) ParseString(title string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
r.ParseReleaseTagsString(r.ReleaseTags)
|
r.ParseReleaseTagsString(r.ReleaseTags)
|
||||||
|
r.extraParseSource(rel)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Release) extraParseSource(rel rls.Release) {
|
||||||
|
if rel.Type != rls.Movie && rel.Type != rls.Series && rel.Type != rls.Episode {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tags := rel.Tags()
|
||||||
|
if len(tags) < 3 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle special cases like -VHS
|
||||||
|
if r.Group == "" {
|
||||||
|
// check the next to last item separator to be - or whitespace then check the next and use as group if empty
|
||||||
|
//if tags[len(tags)-1].TagType() == rls.TagTypeSource && (tags[len(tags)-2].TagType() == rls.TagTypeDelim && (tags[len(tags)-2].Delim() == "-" || tags[len(tags)-2].Delim() == " ")) {
|
||||||
|
lastItem := tags[len(tags)-1]
|
||||||
|
if lastItem.TagType() == rls.TagTypeSource && lastItem.Prev() == rls.TagTypeWhitespace {
|
||||||
|
group := lastItem.Text()
|
||||||
|
|
||||||
|
// handle special cases like -VHS
|
||||||
|
if r.Source == group {
|
||||||
|
r.Source = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
r.Group = group
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if basicContainsSlice(r.Source, []string{"WEB-DL", "BluRay", "UHD.BluRay"}) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// check res to be 1080p or 2160p and codec to be AVC, HEVC or if other contains Remux, then set source to BluRay if it differs
|
||||||
|
if !basicContainsSlice(r.Source, []string{"WEB-DL", "BluRay", "UHD.BluRay"}) && basicContainsSlice(r.Resolution, []string{"1080p", "2160p"}) && basicContainsMatch(r.Codec, []string{"AVC", "HEVC"}) && basicContainsMatch(r.Other, []string{"REMUX"}) {
|
||||||
|
// handle missing or unexpected source for some bluray releases
|
||||||
|
if r.Resolution == "1080p" {
|
||||||
|
r.Source = "BluRay"
|
||||||
|
|
||||||
|
} else if r.Resolution == "2160p" {
|
||||||
|
r.Source = "UHD.BluRay"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Release) ParseReleaseTagsString(tags string) {
|
func (r *Release) ParseReleaseTagsString(tags string) {
|
||||||
|
|
|
@ -338,6 +338,85 @@ func TestRelease_Parse(t *testing.T) {
|
||||||
Type: "series",
|
Type: "series",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "parse_missing_source",
|
||||||
|
fields: Release{
|
||||||
|
TorrentName: "Old Movie 1954 2160p Remux DoVi HDR10 HEVC DTS-HD MA 5.1-CiNEPHiLES",
|
||||||
|
},
|
||||||
|
want: Release{
|
||||||
|
TorrentName: "Old Movie 1954 2160p Remux DoVi HDR10 HEVC DTS-HD MA 5.1-CiNEPHiLES",
|
||||||
|
Title: "Old Movie",
|
||||||
|
Year: 1954,
|
||||||
|
Source: "UHD.BluRay",
|
||||||
|
Resolution: "2160p",
|
||||||
|
Other: []string{"REMUX"},
|
||||||
|
HDR: []string{"DV", "HDR10"},
|
||||||
|
Codec: []string{"HEVC"},
|
||||||
|
Audio: []string{"DTS-HD.MA"},
|
||||||
|
AudioChannels: "5.1",
|
||||||
|
Group: "CiNEPHiLES",
|
||||||
|
Type: "movie",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "parse_missing_source",
|
||||||
|
fields: Release{
|
||||||
|
TorrentName: "Death Hunt 1981 1080p Remux AVC DTS-HD MA 2.0-playBD",
|
||||||
|
},
|
||||||
|
want: Release{
|
||||||
|
TorrentName: "Death Hunt 1981 1080p Remux AVC DTS-HD MA 2.0-playBD",
|
||||||
|
Title: "Death Hunt",
|
||||||
|
Year: 1981,
|
||||||
|
Source: "BluRay",
|
||||||
|
Resolution: "1080p",
|
||||||
|
Other: []string{"REMUX"},
|
||||||
|
Codec: []string{"AVC"},
|
||||||
|
Audio: []string{"DTS-HD.MA"},
|
||||||
|
AudioChannels: "2.0",
|
||||||
|
Group: "playBD",
|
||||||
|
Type: "movie",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "parse_confusing_group",
|
||||||
|
fields: Release{
|
||||||
|
TorrentName: "Old Movie 1954 2160p Remux DoVi HDR10 HEVC DTS-HD MA 5.1-VHS",
|
||||||
|
},
|
||||||
|
want: Release{
|
||||||
|
TorrentName: "Old Movie 1954 2160p Remux DoVi HDR10 HEVC DTS-HD MA 5.1-VHS",
|
||||||
|
Title: "Old Movie",
|
||||||
|
Year: 1954,
|
||||||
|
Source: "UHD.BluRay",
|
||||||
|
Resolution: "2160p",
|
||||||
|
Other: []string{"REMUX"},
|
||||||
|
HDR: []string{"DV", "HDR10"},
|
||||||
|
Codec: []string{"HEVC"},
|
||||||
|
Audio: []string{"DTS-HD.MA"},
|
||||||
|
AudioChannels: "5.1",
|
||||||
|
Group: "VHS",
|
||||||
|
Type: "movie",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "parse_confusing_group",
|
||||||
|
fields: Release{
|
||||||
|
TorrentName: "Old Movie 1954 2160p Remux DoVi HDR10 HEVC DTS-HD MA 5.1 VHS",
|
||||||
|
},
|
||||||
|
want: Release{
|
||||||
|
TorrentName: "Old Movie 1954 2160p Remux DoVi HDR10 HEVC DTS-HD MA 5.1 VHS",
|
||||||
|
Title: "Old Movie",
|
||||||
|
Year: 1954,
|
||||||
|
Source: "UHD.BluRay",
|
||||||
|
Resolution: "2160p",
|
||||||
|
Other: []string{"REMUX"},
|
||||||
|
HDR: []string{"DV", "HDR10"},
|
||||||
|
Codec: []string{"HEVC"},
|
||||||
|
Audio: []string{"DTS-HD.MA"},
|
||||||
|
AudioChannels: "5.1",
|
||||||
|
Group: "VHS",
|
||||||
|
Type: "movie",
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue