Skip to content

Commit 2137276

Browse files
authored
fix(pvr): only support v3 arrs (#52)
language_profile is now needed for sonarr config
1 parent 3ffa713 commit 2137276

File tree

8 files changed

+267
-177
lines changed

8 files changed

+267
-177
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ pvr:
1818
url: https://sonarr.domain.com
1919
api_key: your-api-key
2020
quality_profile: WEBDL-1080p
21+
language_profile: English
2122
root_folder: /mnt/unionfs/Media/TV
2223
filters:
2324
ignores:

config/pvr.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package config
22

33
type Pvr struct {
4-
Type string
5-
URL string
6-
ApiKey string `mapstructure:"api_key"`
7-
QualityProfile string `mapstructure:"quality_profile"`
8-
RootFolder string `mapstructure:"root_folder"`
9-
Filters PvrFilters
4+
Type string
5+
URL string
6+
ApiKey string `mapstructure:"api_key"`
7+
QualityProfile string `mapstructure:"quality_profile"`
8+
LanguageProfile string `mapstructure:"language_profile"`
9+
RootFolder string `mapstructure:"root_folder"`
10+
Filters PvrFilters
1011
}
1112

1213
type PvrFilters struct {

go.mod

+11-21
Original file line numberDiff line numberDiff line change
@@ -5,41 +5,31 @@ go 1.13
55
require (
66
github.com/antonmedv/expr v1.8.9
77
github.com/blang/semver v3.5.1+incompatible
8-
github.com/fsnotify/fsnotify v1.4.9 // indirect
9-
github.com/golang/protobuf v1.4.3 // indirect
8+
github.com/google/go-querystring v1.1.0 // indirect
109
github.com/imroc/req v0.3.0
1110
github.com/jinzhu/gorm v1.9.16
1211
github.com/jpillora/backoff v1.0.0
13-
github.com/json-iterator/go v1.1.10
14-
github.com/magefile/mage v1.11.0 // indirect
15-
github.com/magiconair/properties v1.8.4 // indirect
12+
github.com/json-iterator/go v1.1.11
1613
github.com/mattn/go-colorable v0.1.8 // indirect
14+
github.com/mattn/go-isatty v0.0.13 // indirect
1715
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
1816
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
19-
github.com/mitchellh/mapstructure v1.4.1 // indirect
2017
github.com/natefinch/lumberjack v2.0.0+incompatible
2118
github.com/onsi/ginkgo v1.11.0 // indirect
2219
github.com/onsi/gomega v1.8.1 // indirect
23-
github.com/pelletier/go-toml v1.8.1 // indirect
2420
github.com/pkg/errors v0.9.1
2521
github.com/rhysd/go-github-selfupdate v1.2.3
26-
github.com/sirupsen/logrus v1.8.0
27-
github.com/spf13/afero v1.5.1 // indirect
28-
github.com/spf13/cast v1.3.1 // indirect
22+
github.com/sirupsen/logrus v1.8.1
2923
github.com/spf13/cobra v1.1.3
30-
github.com/spf13/jwalterweatherman v1.1.0 // indirect
31-
github.com/spf13/viper v1.7.1
24+
github.com/spf13/viper v1.8.0
3225
github.com/ulikunitz/xz v0.5.10 // indirect
3326
github.com/x-cray/logrus-prefixed-formatter v0.5.2
34-
go.uber.org/atomic v1.5.1 // indirect
35-
go.uber.org/ratelimit v0.1.0
36-
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 // indirect
37-
golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d // indirect
38-
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 // indirect
39-
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43 // indirect
40-
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d // indirect
41-
google.golang.org/appengine v1.6.7 // indirect
27+
go.uber.org/ratelimit v0.2.0
28+
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e // indirect
29+
golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect
30+
golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 // indirect
31+
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22 // indirect
32+
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect
4233
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
43-
gopkg.in/ini.v1 v1.62.0 // indirect
4434
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
4535
)

go.sum

+160-38
Large diffs are not rendered by default.

provider/tmdb.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ func (p *Tmdb) loadGenres() error {
252252
}
253253

254254
// send request
255-
resp, err := web.GetResponse(web.GET, web.JoinURL(p.apiUrl, "/genre/movie/list"), p.timeout, params,
255+
resp, err := web.GetResponse(web.GET, web.JoinURL(p.apiUrl, "genre", "movie", "list"), p.timeout, params,
256256
&providerDefaultTimeout, p.reqRatelimit)
257257
if err != nil {
258258
return errors.WithMessage(err, "failed retrieving genres api response")
@@ -299,7 +299,7 @@ func (p *Tmdb) loadGenres() error {
299299
// }
300300
//
301301
// // send request
302-
// resp, err := web.GetResponse(web.GET, web.JoinURL(p.apiUrl, "/movie/"+tmdbId), p.timeout, params,
302+
// resp, err := web.GetResponse(web.GET, web.JoinURL(p.apiUrl, "movie", tmdbId), p.timeout, params,
303303
// &providerDefaultTimeout, p.reqRatelimit)
304304
// if err != nil {
305305
// return nil, errors.WithMessage(err, "failed retrieving movie details api response")

provider/tvmaze.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ func (p *TvMaze) GetMovies(searchType string, logic map[string]interface{}, para
195195

196196
func (p *TvMaze) getScheduleShows(logic map[string]interface{}, _ map[string]string) (map[string]config.MediaItem, error) {
197197
// send request
198-
resp, err := web.GetResponse(web.GET, web.JoinURL(p.apiUrl, "/schedule/full"), p.timeout, &p.reqRetry,
198+
resp, err := web.GetResponse(web.GET, web.JoinURL(p.apiUrl, "schedule", "full"), p.timeout, &p.reqRetry,
199199
p.reqRatelimit)
200200
if err != nil {
201201
return nil, errors.WithMessage(err, "failed retrieving full schedule api response")

pvr/radarr.go

+4-41
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func NewRadarr(name string, c *config.Pvr) *Radarr {
7373
if strings.Contains(c.URL, "/api") {
7474
apiUrl = c.URL
7575
} else {
76-
apiUrl = web.JoinURL(c.URL, "/api")
76+
apiUrl = web.JoinURL(c.URL, "api", "v3")
7777
}
7878

7979
// set headers
@@ -92,29 +92,6 @@ func NewRadarr(name string, c *config.Pvr) *Radarr {
9292

9393
/* Private */
9494

95-
func (p *Radarr) getSystemStatus() (*RadarrSystemStatus, error) {
96-
// send request
97-
resp, err := web.GetResponse(web.GET, web.JoinURL(p.apiUrl, "/system/status"), p.timeout, p.reqHeaders,
98-
&pvrDefaultRetry)
99-
if err != nil {
100-
return nil, errors.New("failed retrieving system status api response")
101-
}
102-
defer web.DrainAndClose(resp.Response().Body)
103-
104-
// validate response
105-
if resp.Response().StatusCode != 200 {
106-
return nil, fmt.Errorf("failed retrieving valid system status api response: %s", resp.Response().Status)
107-
}
108-
109-
// decode response
110-
var s RadarrSystemStatus
111-
if err := resp.ToJSON(&s); err != nil {
112-
return nil, errors.WithMessage(err, "failed decoding system status api response")
113-
}
114-
115-
return &s, nil
116-
}
117-
11895
func (p *Radarr) compileExpressions() error {
11996
exprEnv := &config.ExprEnv{}
12097

@@ -147,20 +124,6 @@ func (p *Radarr) Init(mediaType MediaType) error {
147124
return err
148125
}
149126

150-
// retrieve system status
151-
status, err := p.getSystemStatus()
152-
if err != nil {
153-
return errors.WithMessage(err, "failed initializing radarr pvr")
154-
}
155-
156-
// validate supported version
157-
switch status.Version[0:1] {
158-
case "0", "3":
159-
break
160-
default:
161-
return fmt.Errorf("unsupported version of radarr pvr: %s", status.Version)
162-
}
163-
164127
// find quality profile
165128
if id, err := p.GetQualityProfileId(p.cfg.QualityProfile); err != nil {
166129
return err
@@ -200,7 +163,7 @@ func (p *Radarr) ShouldIgnore(mediaItem *config.MediaItem) (bool, error) {
200163

201164
func (p *Radarr) GetQualityProfileId(profileName string) (int, error) {
202165
// send request
203-
resp, err := web.GetResponse(web.GET, web.JoinURL(p.apiUrl, "/profile"), p.timeout, p.reqHeaders,
166+
resp, err := web.GetResponse(web.GET, web.JoinURL(p.apiUrl, "qualityprofile"), p.timeout, p.reqHeaders,
204167
&pvrDefaultRetry)
205168
if err != nil {
206169
return 0, errors.New("failed retrieving quality profiles api response")
@@ -254,7 +217,7 @@ func (p *Radarr) AddMedia(item *config.MediaItem) error {
254217
}
255218

256219
// send request
257-
resp, err := web.GetResponse(web.POST, web.JoinURL(p.apiUrl, "/movie"), p.timeout, p.reqHeaders,
220+
resp, err := web.GetResponse(web.POST, web.JoinURL(p.apiUrl, "movie"), p.timeout, p.reqHeaders,
258221
req.BodyJSON(params))
259222
if err != nil {
260223
return errors.New("failed retrieving add movies api response")
@@ -271,7 +234,7 @@ func (p *Radarr) AddMedia(item *config.MediaItem) error {
271234

272235
func (p *Radarr) GetExistingMedia() (map[string]config.MediaItem, error) {
273236
// send request
274-
resp, err := web.GetResponse(web.GET, web.JoinURL(p.apiUrl, "/movie"), p.timeout, p.reqHeaders,
237+
resp, err := web.GetResponse(web.GET, web.JoinURL(p.apiUrl, "movie"), p.timeout, p.reqHeaders,
275238
&pvrDefaultRetry)
276239
if err != nil {
277240
return nil, errors.New("failed retrieving movies api response")

0 commit comments

Comments
 (0)