mirror of
https://github.com/simon-ding/polaris.git
synced 2026-06-10 03:57:39 +08:00
feat: better prowlarr support
This commit is contained in:
@@ -12,6 +12,13 @@ import (
|
|||||||
"golift.io/starr/prowlarr"
|
"golift.io/starr/prowlarr"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ProwlarrSupportType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
TV ProwlarrSupportType = "tv"
|
||||||
|
Movie ProwlarrSupportType = "movie"
|
||||||
|
)
|
||||||
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
p *prowlarr.Prowlarr
|
p *prowlarr.Prowlarr
|
||||||
apiKey string
|
apiKey string
|
||||||
@@ -24,7 +31,7 @@ func New(apiKey, url string) *Client {
|
|||||||
return &Client{p: p, apiKey: apiKey, url: url}
|
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()
|
ins, err := c.p.GetIndexers()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -34,6 +41,11 @@ func (c *Client) GetIndexers() ([]*db.TorznabInfo, error) {
|
|||||||
if !in.Enable {
|
if !in.Enable {
|
||||||
continue
|
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
|
seedRatio := 0.0
|
||||||
for _, f := range in.Fields {
|
for _, f := range in.Fields {
|
||||||
if f.Name == "torrentBaseSettings.seedRatio" && f.Value != nil {
|
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 = append(indexers, &db.TorznabInfo{
|
||||||
Indexers: &entIndexer,
|
Indexers: &entIndexer,
|
||||||
TorznabSetting: setting,
|
TorznabSetting: setting,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
|
|
||||||
func Test111(t *testing.T) {
|
func Test111(t *testing.T) {
|
||||||
c := New("", "http://10.0.0.8:9696/")
|
c := New("", "http://10.0.0.8:9696/")
|
||||||
apis , err := c.GetIndexers()
|
apis , err := c.GetIndexers("tv")
|
||||||
log.Infof("errors: %v", err)
|
log.Infof("errors: %v", err)
|
||||||
log.Infof("indexers: %+v", apis[0])
|
log.Infof("indexers: %+v", apis[0])
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
// log.Warnf("converting link to magnet error, error: %v, link: %v", err, item.Link)
|
||||||
// continue
|
// continue
|
||||||
// }
|
// }
|
||||||
|
imdb := ""
|
||||||
|
if item.GetAttr("imdbid") != "" {
|
||||||
|
imdb = item.GetAttr("imdbid")
|
||||||
|
} else if item.GetAttr("imdb") != "" {
|
||||||
|
imdb = item.GetAttr("imdb")
|
||||||
|
}
|
||||||
r := Result{
|
r := Result{
|
||||||
Name: item.Title,
|
Name: item.Title,
|
||||||
Link: item.Link,
|
Link: item.Link,
|
||||||
@@ -92,7 +98,7 @@ func (r *Response) ToResults(indexer *db.TorznabInfo) []Result {
|
|||||||
Seeders: mustAtoI(item.GetAttr("seeders")),
|
Seeders: mustAtoI(item.GetAttr("seeders")),
|
||||||
Peers: mustAtoI(item.GetAttr("peers")),
|
Peers: mustAtoI(item.GetAttr("peers")),
|
||||||
Category: mustAtoI(item.GetAttr("category")),
|
Category: mustAtoI(item.GetAttr("category")),
|
||||||
ImdbId: item.GetAttr("imdbid"),
|
ImdbId: imdb,
|
||||||
DownloadVolumeFactor: tryParseFloat(item.GetAttr("downloadvolumefactor")),
|
DownloadVolumeFactor: tryParseFloat(item.GetAttr("downloadvolumefactor")),
|
||||||
UploadVolumeFactor: tryParseFloat(item.GetAttr("uploadvolumefactor")),
|
UploadVolumeFactor: tryParseFloat(item.GetAttr("uploadvolumefactor")),
|
||||||
Source: indexer.Name,
|
Source: indexer.Name,
|
||||||
|
|||||||
@@ -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)
|
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
|
var filtered []torznab.Result
|
||||||
for _, r := range res {
|
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")
|
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() {
|
if movieDetail.Extras.IsJav() {
|
||||||
res1 := searchWithTorznab(db1, movieDetail.Extras.JavId)
|
res1 := searchWithTorznab(db1, prowlarr.Movie, movieDetail.Extras.JavId)
|
||||||
res = append(res, res1...)
|
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
|
var res []torznab.Result
|
||||||
allTorznab := db.GetAllTorznabInfo()
|
allTorznab := db.GetAllTorznabInfo()
|
||||||
@@ -235,7 +235,7 @@ func searchWithTorznab(db *db.Client, queries ...string) []torznab.Result {
|
|||||||
p, err := db.GetProwlarrSetting()
|
p, err := db.GetProwlarrSetting()
|
||||||
if err == nil { //prowlarr exists
|
if err == nil { //prowlarr exists
|
||||||
c := prowlarr.New(p.ApiKey, p.URL)
|
c := prowlarr.New(p.ApiKey, p.URL)
|
||||||
all, err := c.GetIndexers()
|
all, err := c.GetIndexers(t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("get prowlarr all indexer error: %v", err)
|
log.Warnf("get prowlarr all indexer error: %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -319,7 +319,7 @@ func (s *Server) SaveProwlarrSetting(c *gin.Context) (interface{}, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client := prowlarr.New(in.ApiKey, in.URL)
|
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")
|
return nil, errors.Wrap(err, "connect to prowlarr error")
|
||||||
}
|
}
|
||||||
err := s.db.SaveProwlarrSetting(&in)
|
err := s.db.SaveProwlarrSetting(&in)
|
||||||
|
|||||||
Reference in New Issue
Block a user