mirror of
https://github.com/idanoo/autobrr
synced 2025-07-23 08:49:13 +00:00
fix(feeds): UNIT3D RSS size parsing (#1701)
* fix(feeds): size parsing for UNIT3D RSS feeds * fix(feeds): imports
This commit is contained in:
parent
c3530ac8af
commit
abeb81eea9
1 changed files with 42 additions and 10 deletions
|
@ -17,6 +17,7 @@ import (
|
||||||
"github.com/autobrr/autobrr/internal/release"
|
"github.com/autobrr/autobrr/internal/release"
|
||||||
"github.com/autobrr/autobrr/pkg/errors"
|
"github.com/autobrr/autobrr/pkg/errors"
|
||||||
|
|
||||||
|
"github.com/dustin/go-humanize"
|
||||||
"github.com/mmcdole/gofeed"
|
"github.com/mmcdole/gofeed"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
)
|
)
|
||||||
|
@ -182,11 +183,32 @@ func (j *RSSJob) processItem(item *gofeed.Item) *domain.Release {
|
||||||
rls.Uploader += v.Name
|
rls.Uploader += v.Name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if item.Description != "" {
|
||||||
|
rls.Description = item.Description
|
||||||
|
|
||||||
|
if readSizeFromDescription(item.Description, rls) {
|
||||||
|
j.Log.Trace().Msgf("Set new size %d from description", rls.Size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// When custom->size and enclosures->size differ, `ParseSizeBytesString` will pick the largest one.
|
// When custom->size and enclosures->size differ, `ParseSizeBytesString` will pick the largest one.
|
||||||
if size, ok := item.Custom["size"]; ok {
|
if size, ok := item.Custom["size"]; ok {
|
||||||
rls.ParseSizeBytesString(size)
|
rls.ParseSizeBytesString(size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if customContentLength, ok := item.Custom["contentlength"]; ok {
|
||||||
|
if customContentLength != "" {
|
||||||
|
size, err := strconv.ParseUint(customContentLength, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
j.Log.Error().Err(err).Msgf("could not parse item.Custom.ContentLength: %s", customContentLength)
|
||||||
|
}
|
||||||
|
|
||||||
|
if size > rls.Size {
|
||||||
|
rls.Size = size
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// additional size parsing
|
// additional size parsing
|
||||||
// some feeds have a fixed size for enclosure so lets check for custom elements
|
// some feeds have a fixed size for enclosure so lets check for custom elements
|
||||||
// and parse size from there if it differs
|
// and parse size from there if it differs
|
||||||
|
@ -213,13 +235,6 @@ func (j *RSSJob) processItem(item *gofeed.Item) *domain.Release {
|
||||||
rls.Bonus = []string{"Freeleech"}
|
rls.Bonus = []string{"Freeleech"}
|
||||||
}
|
}
|
||||||
|
|
||||||
if item.Description != "" {
|
|
||||||
rls.Description = item.Description
|
|
||||||
|
|
||||||
readSizeFromDescription(item.Description, rls)
|
|
||||||
j.Log.Trace().Msgf("Set new size %d from description", rls.Size)
|
|
||||||
}
|
|
||||||
|
|
||||||
// add cookie to release for download if needed
|
// add cookie to release for download if needed
|
||||||
if j.Feed.Cookie != "" {
|
if j.Feed.Cookie != "" {
|
||||||
rls.RawCookie = j.Feed.Cookie
|
rls.RawCookie = j.Feed.Cookie
|
||||||
|
@ -340,16 +355,33 @@ func isFreeleech(str []string) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// readSizeFromDescription get size from description
|
// readSizeFromDescription get size from description
|
||||||
func readSizeFromDescription(str string, r *domain.Release) {
|
func readSizeFromDescription(str string, r *domain.Release) bool {
|
||||||
clean := rxpHTML.ReplaceAllString(str, " ")
|
clean := rxpHTML.ReplaceAllString(str, " ")
|
||||||
|
|
||||||
|
found := false
|
||||||
|
|
||||||
for _, sz := range rxpSize.FindAllString(clean, -1) {
|
for _, sz := range rxpSize.FindAllString(clean, -1) {
|
||||||
r.ParseSizeBytesString(sz)
|
if sz == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
s, err := humanize.ParseBytes(sz)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if s > r.Size {
|
||||||
|
found = true
|
||||||
|
r.Size = s
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return found
|
||||||
}
|
}
|
||||||
|
|
||||||
// itemCustomElement
|
// itemCustomElement
|
||||||
// used for some feeds like Aviztas network
|
// used for some feeds like Aviztas network
|
||||||
type itemCustomElement struct {
|
type itemCustomElement struct {
|
||||||
ContentLength int64 `xml:"contentLength"`
|
ContentLength int64 `xml:"contentLength,contentlength"`
|
||||||
InfoHash string `xml:"infoHash"`
|
InfoHash string `xml:"infoHash"`
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue