diff --git a/pkg/prowlarr/prowlarr.go b/pkg/prowlarr/prowlarr.go index 6430f88..aacedd4 100644 --- a/pkg/prowlarr/prowlarr.go +++ b/pkg/prowlarr/prowlarr.go @@ -12,6 +12,13 @@ import ( "golift.io/starr/prowlarr" ) +type ProwlarrSupportType string + +const ( + TV ProwlarrSupportType = "tv" + Movie ProwlarrSupportType = "movie" +) + type Client struct { p *prowlarr.Prowlarr apiKey string @@ -24,7 +31,7 @@ func New(apiKey, url string) *Client { return &Client{p: p, apiKey: apiKey, url: url} } -func (c *Client) GetIndexers() ([]*db.TorznabInfo, error) { +func (c *Client) GetIndexers(t ProwlarrSupportType) ([]*db.TorznabInfo, error) { ins, err := c.p.GetIndexers() if err != nil { return nil, err @@ -34,6 +41,11 @@ func (c *Client) GetIndexers() ([]*db.TorznabInfo, error) { if !in.Enable { continue } + if t == "tv" && len(in.Capabilities.TvSearchParams) == 0 { //no tv resource in this indexer + continue + } else if t == "movie" && len(in.Capabilities.MovieSearchParams) == 0 { //no movie resource in this indexer + continue + } seedRatio := 0.0 for _, f := range in.Fields { if f.Name == "torrentBaseSettings.seedRatio" && f.Value != nil { @@ -57,7 +69,7 @@ func (c *Client) GetIndexers() ([]*db.TorznabInfo, error) { } indexers = append(indexers, &db.TorznabInfo{ - Indexers: &entIndexer, + Indexers: &entIndexer, TorznabSetting: setting, }) } diff --git a/pkg/prowlarr/prowlarr_test.go b/pkg/prowlarr/prowlarr_test.go index be55052..7f59130 100644 --- a/pkg/prowlarr/prowlarr_test.go +++ b/pkg/prowlarr/prowlarr_test.go @@ -7,7 +7,7 @@ import ( func Test111(t *testing.T) { c := New("", "http://10.0.0.8:9696/") - apis , err := c.GetIndexers() + apis , err := c.GetIndexers("tv") log.Infof("errors: %v", err) log.Infof("indexers: %+v", apis[0]) } diff --git a/pkg/torznab/torznab.go b/pkg/torznab/torznab.go index 3135392..aac545b 100644 --- a/pkg/torznab/torznab.go +++ b/pkg/torznab/torznab.go @@ -85,6 +85,12 @@ func (r *Response) ToResults(indexer *db.TorznabInfo) []Result { // log.Warnf("converting link to magnet error, error: %v, link: %v", err, item.Link) // continue // } + imdb := "" + if item.GetAttr("imdbid") != "" { + imdb = item.GetAttr("imdbid") + } else if item.GetAttr("imdb") != "" { + imdb = item.GetAttr("imdb") + } r := Result{ Name: item.Title, Link: item.Link, @@ -92,7 +98,7 @@ func (r *Response) ToResults(indexer *db.TorznabInfo) []Result { Seeders: mustAtoI(item.GetAttr("seeders")), Peers: mustAtoI(item.GetAttr("peers")), Category: mustAtoI(item.GetAttr("category")), - ImdbId: item.GetAttr("imdbid"), + ImdbId: imdb, DownloadVolumeFactor: tryParseFloat(item.GetAttr("downloadvolumefactor")), UploadVolumeFactor: tryParseFloat(item.GetAttr("uploadvolumefactor")), Source: indexer.Name, diff --git a/server/core/torrent.go b/server/core/torrent.go index c5144f5..5ca2ce9 100644 --- a/server/core/torrent.go +++ b/server/core/torrent.go @@ -33,7 +33,7 @@ func SearchTvSeries(db1 *db.Client, param *SearchParam) ([]torznab.Result, error } log.Debugf("check tv series %s, season %d, episode %v", series.NameEn, param.SeasonNum, param.Episodes) - res := searchWithTorznab(db1, series.NameEn, series.NameCn, series.OriginalName) + res := searchWithTorznab(db1, prowlarr.TV, series.NameEn, series.NameCn, series.OriginalName) var filtered []torznab.Result for _, r := range res { @@ -171,9 +171,9 @@ func SearchMovie(db1 *db.Client, param *SearchParam) ([]torznab.Result, error) { return nil, errors.New("no media found of id") } - res := searchWithTorznab(db1, movieDetail.NameEn, movieDetail.NameCn, movieDetail.OriginalName) + res := searchWithTorznab(db1, prowlarr.Movie, movieDetail.NameEn, movieDetail.NameCn, movieDetail.OriginalName) if movieDetail.Extras.IsJav() { - res1 := searchWithTorznab(db1, movieDetail.Extras.JavId) + res1 := searchWithTorznab(db1, prowlarr.Movie, movieDetail.Extras.JavId) res = append(res, res1...) } @@ -227,7 +227,7 @@ func SearchMovie(db1 *db.Client, param *SearchParam) ([]torznab.Result, error) { } -func searchWithTorznab(db *db.Client, queries ...string) []torznab.Result { +func searchWithTorznab(db *db.Client, t prowlarr.ProwlarrSupportType, queries ...string) []torznab.Result { var res []torznab.Result allTorznab := db.GetAllTorznabInfo() @@ -235,7 +235,7 @@ func searchWithTorznab(db *db.Client, queries ...string) []torznab.Result { p, err := db.GetProwlarrSetting() if err == nil { //prowlarr exists c := prowlarr.New(p.ApiKey, p.URL) - all, err := c.GetIndexers() + all, err := c.GetIndexers(t) if err != nil { log.Warnf("get prowlarr all indexer error: %v", err) } else { diff --git a/server/setting.go b/server/setting.go index 8ac7329..40131fa 100644 --- a/server/setting.go +++ b/server/setting.go @@ -319,7 +319,7 @@ func (s *Server) SaveProwlarrSetting(c *gin.Context) (interface{}, error) { return nil, err } client := prowlarr.New(in.ApiKey, in.URL) - if _, err := client.GetIndexers(); err != nil { + if _, err := client.GetIndexers(prowlarr.TV); err != nil { return nil, errors.Wrap(err, "connect to prowlarr error") } err := s.db.SaveProwlarrSetting(&in)