diff --git a/internal/domain/release.go b/internal/domain/release.go index ba8bae7..581357b 100644 --- a/internal/domain/release.go +++ b/internal/domain/release.go @@ -185,6 +185,7 @@ func NewRelease(indexer string) *Release { Implementation: ReleaseImplementationIRC, Timestamp: time.Now(), Tags: []string{}, + Size: 0, } return r @@ -272,13 +273,13 @@ func (r *Release) ParseReleaseTagsString(tags string) { } } +// ParseSizeBytesString If there are parsing errors, then it keeps the original (or default size 0) +// Otherwise, it will update the size only if the new size is bigger than the previous one. func (r *Release) ParseSizeBytesString(size string) { s, err := humanize.ParseBytes(size) - if err != nil { - // log could not parse into bytes - r.Size = 0 + if err == nil && s > r.Size { + r.Size = s } - r.Size = s } func (r *Release) DownloadTorrentFileCtx(ctx context.Context) error { diff --git a/internal/feed/rss.go b/internal/feed/rss.go index 19a31b5..3d2772f 100644 --- a/internal/feed/rss.go +++ b/internal/feed/rss.go @@ -113,7 +113,7 @@ func (j *RSSJob) processItem(item *gofeed.Item) *domain.Release { if e.Type == "application/x-bittorrent" && e.URL != "" { rls.TorrentURL = e.URL } - if e.Length != "" { + if e.Length != "" && e.Length != "39399" { rls.ParseSizeBytesString(e.Length) } } @@ -154,11 +154,9 @@ func (j *RSSJob) processItem(item *gofeed.Item) *domain.Release { rls.Uploader += v.Name } - if rls.Size == 0 { - // parse size bytes string - if sz, ok := item.Custom["size"]; ok { - rls.ParseSizeBytesString(sz) - } + // When custom->size and enclosures->size differ, `ParseSizeBytesString` will pick the largest one. + if size, ok := item.Custom["size"]; ok { + rls.ParseSizeBytesString(size) } // additional size parsing