feat(indexers): definitions set forcesizeunit (#156)

* feat(indexers): support custom size handling

* fix: change case for yaml key
This commit is contained in:
Ludvig Lundgren 2022-02-28 19:25:39 +01:00 committed by GitHub
parent 1b0d52da85
commit e0e4bf6202
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 40 additions and 8 deletions

View file

@ -217,7 +217,7 @@ func (a *announceProcessor) parseExtract(pattern string, vars []string, tmpVars
func (a *announceProcessor) onLinesMatched(def domain.IndexerDefinition, vars map[string]string, release *domain.Release) error { func (a *announceProcessor) onLinesMatched(def domain.IndexerDefinition, vars map[string]string, release *domain.Release) error {
var err error var err error
err = release.MapVars(vars) err = release.MapVars(def, vars)
if err != nil { if err != nil {
log.Error().Stack().Err(err).Msg("announce: could not map vars for release") log.Error().Stack().Err(err).Msg("announce: could not map vars for release")
return err return err

View file

@ -91,9 +91,10 @@ func (i IndexerIRC) ValidChannel(channel string) bool {
} }
type IndexerParse struct { type IndexerParse struct {
Type string `json:"type"` Type string `json:"type"`
Lines []IndexerParseExtract `json:"lines"` ForceSizeUnit string `json:"forcesizeunit"`
Match IndexerParseMatch `json:"match"` Lines []IndexerParseExtract `json:"lines"`
Match IndexerParseMatch `json:"match"`
} }
type IndexerParseExtract struct { type IndexerParseExtract struct {

View file

@ -918,7 +918,7 @@ func (r *Release) CheckSizeFilter(minSize string, maxSize string) bool {
} }
// MapVars better name // MapVars better name
func (r *Release) MapVars(varMap map[string]string) error { func (r *Release) MapVars(def IndexerDefinition, varMap map[string]string) error {
if torrentName, err := getStringMapValue(varMap, "torrentName"); err != nil { if torrentName, err := getStringMapValue(varMap, "torrentName"); err != nil {
return errors.Wrap(err, "failed parsing required field") return errors.Wrap(err, "failed parsing required field")
@ -956,12 +956,16 @@ func (r *Release) MapVars(varMap map[string]string) error {
} }
if torrentSize, err := getStringMapValue(varMap, "torrentSize"); err == nil { if torrentSize, err := getStringMapValue(varMap, "torrentSize"); err == nil {
// handling for indexer who doesn't explicitly set which size unit is used like (AR)
if def.Parse.ForceSizeUnit != "" {
torrentSize = fmt.Sprintf("%v %v", torrentSize, def.Parse.ForceSizeUnit)
}
size, err := humanize.ParseBytes(torrentSize) size, err := humanize.ParseBytes(torrentSize)
if err != nil { if err != nil {
// log could not parse into bytes // log could not parse into bytes
} }
r.Size = size r.Size = size
// TODO implement other size checks in filter
} }
if scene, err := getStringMapValue(varMap, "scene"); err == nil { if scene, err := getStringMapValue(varMap, "scene"); err == nil {

View file

@ -1258,7 +1258,8 @@ func TestRelease_CheckFilter(t *testing.T) {
func TestRelease_MapVars(t *testing.T) { func TestRelease_MapVars(t *testing.T) {
type args struct { type args struct {
varMap map[string]string varMap map[string]string
definition IndexerDefinition
} }
tests := []struct { tests := []struct {
name string name string
@ -1394,11 +1395,36 @@ func TestRelease_MapVars(t *testing.T) {
"tags": "hip.hop,rhythm.and.blues, 2000s", "tags": "hip.hop,rhythm.and.blues, 2000s",
}}, }},
}, },
{
name: "8",
fields: &Release{},
want: &Release{
TorrentName: "Good show S02 2160p ATVP WEB-DL DDP 5.1 Atmos DV HEVC-GROUP2",
Category: "tv",
Year: 2020,
FreeleechPercent: 100,
Uploader: "Anon",
Size: uint64(10000000000),
Tags: []string{"hip.hop", "rhythm.and.blues", "2000s"},
},
args: args{
varMap: map[string]string{
"torrentName": "Good show S02 2160p ATVP WEB-DL DDP 5.1 Atmos DV HEVC-GROUP2",
"category": "tv",
"year": "2020",
"freeleechPercent": "100%",
"uploader": "Anon",
"torrentSize": "10000",
"tags": "hip.hop,rhythm.and.blues, 2000s",
},
definition: IndexerDefinition{Parse: IndexerParse{ForceSizeUnit: "MB"}},
},
},
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
r := tt.fields r := tt.fields
_ = r.MapVars(tt.args.varMap) _ = r.MapVars(tt.args.definition, tt.args.varMap)
assert.Equal(t, tt.want, r) assert.Equal(t, tt.want, r)
}) })

View file

@ -51,6 +51,7 @@ irc:
parse: parse:
type: multi type: multi
forcesizeunit: MB
lines: lines:
- test: - test:
- "[New Release]-[MovieHD]-[That.Movie.2017.INTERNAL.1080p.BluRay.CRF.x264-GROUP]-[URL]-[ https://alpharatio.cc/torrents.php?id=000000 ]-[ 000000 ]-[ Uploaded 2 Mins, 59 Secs after pre. ]" - "[New Release]-[MovieHD]-[That.Movie.2017.INTERNAL.1080p.BluRay.CRF.x264-GROUP]-[URL]-[ https://alpharatio.cc/torrents.php?id=000000 ]-[ 000000 ]-[ Uploaded 2 Mins, 59 Secs after pre. ]"