Skip to content

Commit 465a6cd

Browse files
authored
Merge pull request #61 from kiranshila/develop
Adding rootfolder selection
2 parents 5833b5a + e463642 commit 465a6cd

File tree

8 files changed

+95
-34
lines changed

8 files changed

+95
-34
lines changed

.dropboxignore

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# ----
2+
# Automatically Generated .dropboxignore file at Sun Jan 30 22:58:11 PST 2022
3+
# ----
4+
.DS_Store
5+
pom.xml
6+
pom.xml.asc
7+
*.jar
8+
*.class
9+
.nrepl-port
10+
.cpcache/
11+
.lsp/
12+
.clj-kondo/
13+
target/
14+
# ----

src/doplarr/backends/radarr.clj

+15-6
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,39 @@
1717
(defn additional-options [_ _]
1818
(a/go
1919
(let [quality-profiles (a/<! (impl/quality-profiles))
20+
rootfolders (a/<! (impl/rootfolders))
2021
{:keys [radarr/quality-profile]} @state/config
21-
default-profile-id (utils/profile-name-id quality-profiles quality-profile)]
22+
default-profile-id (utils/id-from-name quality-profiles quality-profile)]
2223
(when (and quality-profile (nil? default-profile-id))
2324
(warn "Default quality profile in config doesn't exist in backend, check spelling"))
2425
{:quality-profile-id
2526
(cond
2627
default-profile-id default-profile-id
2728
(= 1 (count quality-profiles)) (:id (first quality-profiles))
28-
:else quality-profiles)})))
29+
:else quality-profiles)
30+
:rootfolder-id
31+
(cond
32+
(= 1 (count rootfolders)) (:id (first rootfolders))
33+
:else rootfolders)})))
2934

30-
(defn request-embed [{:keys [title quality-profile-id tmdb-id]} _]
35+
(defn request-embed [{:keys [title quality-profile-id tmdb-id rootfolder-id]} _]
3136
(a/go
32-
(let [quality-profiles (a/<! (impl/quality-profiles))
37+
(let [rootfolders (a/<! (impl/rootfolders))
38+
quality-profiles (a/<! (impl/quality-profiles))
3339
details (a/<! (impl/get-from-tmdb tmdb-id))]
3440
{:title title
3541
:overview (:overview details)
3642
:poster (:remote-poster details)
3743
:media-type :movie
3844
:request-formats [""]
39-
:quality-profile (utils/profile-id-name quality-profiles quality-profile-id)})))
45+
:rootfolder (utils/name-from-id rootfolders rootfolder-id)
46+
:quality-profile (utils/name-from-id quality-profiles quality-profile-id)})))
4047

4148
(defn request [payload _]
4249
(a/go
43-
(let [status (impl/status (a/<! (impl/get-from-tmdb (:tmdb-id payload))))]
50+
(let [status (impl/status (a/<! (impl/get-from-tmdb (:tmdb-id payload))))
51+
rfs (a/<! (impl/rootfolders))
52+
payload (assoc payload :root-folder-path (utils/name-from-id rfs (:rootfolder-id payload)))]
4453
(if status
4554
status
4655
(->> (a/<! (impl/POST "/movie" {:form-params (utils/to-camel (impl/request-payload payload))

src/doplarr/backends/radarr/impl.clj

+13-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
(ns doplarr.backends.radarr.impl
22
(:require
3-
[clojure.core.async :as a]
43
[doplarr.state :as state]
54
[doplarr.utils :as utils]))
65

@@ -13,14 +12,24 @@
1312
(defn POST [endpoint & [params]]
1413
(utils/http-request :post (str @base-url endpoint) @api-key params))
1514

16-
(def rootfolder (delay (a/<!! (utils/request-and-process-body GET #(get (first %) "path") "/rootfolder"))))
17-
1815
(defn quality-profiles []
1916
(utils/request-and-process-body
2017
GET
2118
#(map utils/process-profile %)
2219
"/qualityProfile"))
2320

21+
(defn rootfolders []
22+
(utils/request-and-process-body
23+
GET
24+
utils/process-rootfolders
25+
"/rootfolder"))
26+
27+
(defn tags []
28+
(utils/request-and-process-body
29+
GET
30+
utils/process-tags
31+
"/tag"))
32+
2433
(defn get-from-tmdb [tmdb-id]
2534
(utils/request-and-process-body
2635
GET
@@ -40,7 +49,6 @@
4049

4150
(defn request-payload [payload]
4251
(-> payload
43-
(select-keys [:title :tmdb-id :quality-profile-id])
52+
(select-keys [:title :tmdb-id :quality-profile-id :root-folder-path])
4453
(assoc :monitored true
45-
:root-folder-path @rootfolder
4654
:add-options {:search-for-movie true})))

src/doplarr/backends/sonarr.clj

+14-6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
(a/go
1919
(let [quality-profiles (a/<! (impl/quality-profiles))
2020
language-profiles (a/<! (impl/language-profiles))
21+
rootfolders (a/<! (impl/rootfolders))
2122
details (a/<! (impl/get-from-tvdb (:tvdb-id result)))
2223
seasons (->> (:seasons details)
2324
(filter #(pos? (:season-number %)))
@@ -26,8 +27,8 @@
2627
{:keys [sonarr/language-profile
2728
sonarr/quality-profile
2829
partial-seasons]} @state/config
29-
default-profile-id (utils/profile-name-id quality-profiles quality-profile)
30-
default-language-id (utils/profile-name-id language-profiles language-profile)]
30+
default-profile-id (utils/id-from-name quality-profiles quality-profile)
31+
default-language-id (utils/id-from-name language-profiles language-profile)]
3132
(when (and quality-profile (nil? default-profile-id))
3233
(warn "Default quality profile in config doesn't exist in backend, check spelling"))
3334
(when (and language-profile (nil? default-language-id))
@@ -43,11 +44,15 @@
4344
:language-profile-id (cond
4445
language-profile default-language-id
4546
(= 1 (count language-profiles)) (:id (first language-profiles))
46-
:else language-profiles)})))
47+
:else language-profiles)
48+
:rootfolder-id (cond
49+
(= 1 (count rootfolders)) (:id (first rootfolders))
50+
:else rootfolders)})))
4751

48-
(defn request-embed [{:keys [title quality-profile-id language-profile-id tvdb-id season]} _]
52+
(defn request-embed [{:keys [title quality-profile-id language-profile-id tvdb-id season rootfolder-id]} _]
4953
(a/go
50-
(let [quality-profiles (a/<! (impl/quality-profiles))
54+
(let [rootfolders (a/<! (impl/rootfolders))
55+
quality-profiles (a/<! (impl/quality-profiles))
5156
language-profiles (a/<! (impl/language-profiles))
5257
details (a/<! (impl/get-from-tvdb tvdb-id))]
5358
{:title title
@@ -57,13 +62,16 @@
5762
:season season
5863
:request-formats [""]
5964
:quality-profile (:name (first (filter #(= quality-profile-id (:id %)) quality-profiles)))
60-
:language-profile (:name (first (filter #(= language-profile-id (:id %)) language-profiles)))})))
65+
:language-profile (:name (first (filter #(= language-profile-id (:id %)) language-profiles)))
66+
:rootfolder (utils/name-from-id rootfolders rootfolder-id)})))
6167

6268
(defn request [payload _]
6369
(a/go (let [details (a/<! (if-let [id (:id payload)]
6470
(impl/get-from-id id)
6571
(impl/get-from-tvdb (:tvdb-id payload))))
6672
status (impl/status details (:season payload))
73+
rfs (a/<! (impl/rootfolders))
74+
payload (assoc payload :root-folder-path (utils/name-from-id rfs (:rootfolder-id payload)))
6775
request-payload (impl/request-payload payload details)]
6876
(if status
6977
status

src/doplarr/backends/sonarr/impl.clj

+6-3
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
(defn PUT [endpoint & [params]]
1818
(utils/http-request :put (str @base-url endpoint) @api-key params))
1919

20-
(def rootfolder (delay (a/<!! (utils/request-and-process-body GET #(get (first %) "path") "/rootfolder"))))
21-
2220
(defn quality-profiles []
2321
(utils/request-and-process-body
2422
GET
@@ -31,6 +29,12 @@
3129
#(map utils/process-profile %)
3230
"/languageProfile"))
3331

32+
(defn rootfolders []
33+
(utils/request-and-process-body
34+
GET
35+
utils/process-rootfolders
36+
"/rootfolder"))
37+
3438
(defn get-from-tvdb [tvdb-id]
3539
(utils/request-and-process-body
3640
GET
@@ -102,7 +106,6 @@
102106
(-> payload
103107
(assoc :monitored true
104108
:seasons seasons
105-
:root-folder-path @rootfolder
106109
:add-options {:ignore-episodes-with-files true
107110
:search-for-missing-episodes true})
108111
(dissoc :season

src/doplarr/core.clj

+5-2
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,12 @@
6868
(m/stop-connection! messaging-ch)
6969
(a/close! event-ch)))))
7070

71-
(defn startup! []
71+
(defn setup-config! []
7272
(reset! state/config (config/valid-config (load-env)))
73-
(timbre/merge-config! {:min-level [[#{"*"} (:log-level @state/config :info)]]})
73+
(timbre/merge-config! {:min-level [[#{"*"} (:log-level @state/config :info)]]}))
74+
75+
(defn startup! []
76+
(setup-config!)
7477
(start-bot!))
7578

7679
; Program Entry Point

src/doplarr/discord.clj

+5-2
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113
(defn dropdown-result [interaction]
114114
(Integer/parseInt (s/select-one [:payload :values 0] interaction)))
115115

116-
(defn request-embed [{:keys [media-type title overview poster season quality-profile language-profile]}]
116+
(defn request-embed [{:keys [media-type title overview poster season quality-profile language-profile rootfolder tag]}]
117117
{:title title
118118
:description overview
119119
:image {:url poster}
@@ -129,7 +129,10 @@
129129
:value language-profile})
130130
(when season
131131
{:name "Season"
132-
:value (if (= season -1) "All" season)})])})
132+
:value (if (= season -1) "All" season)})
133+
(when rootfolder
134+
{:name "Root Folder"
135+
:value rootfolder})])})
133136

134137
(defn request [embed-data uuid]
135138
{:content (str "Request this " (name (:media-type embed-data)) " ?")

src/doplarr/utils.clj

+23-10
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
[doplarr.state :as state]
99
[fmnoise.flow :as flow :refer [else then]]
1010
[hato.client :as hc]
11-
[taoensso.timbre :refer [fatal trace]]))
11+
[taoensso.timbre :refer [fatal trace]]
12+
[clojure.set :as set]))
1213

1314
(defn deep-merge [a & maps]
1415
(if (map? a)
@@ -47,21 +48,30 @@
4748
(->> (select-keys profile ["id" "name"])
4849
from-camel))
4950

50-
(defn profile-name-id [profiles name]
51+
(defn id-from-name [profiles name]
5152
(->> profiles
5253
(filter #(= name (:name %)))
5354
first
5455
:id))
5556

56-
(defn profile-id-name [profiles id]
57+
(defn name-from-id [profiles id]
5758
(->> profiles
5859
(filter #(= id (:id %)))
5960
first
6061
:name))
6162

63+
(defmacro log-on-error [expr msg]
64+
`(try
65+
~expr
66+
(catch Exception e#
67+
(fatal e# ~msg)
68+
(throw e#))))
69+
6270
(defn request-and-process-body [request-fn process-fn & request-args]
6371
(a/go
64-
(->> (a/<! (apply request-fn request-args))
72+
(->> (log-on-error
73+
(a/<! (apply request-fn request-args))
74+
"Exception from HTTP request")
6575
(then #(process-fn (:body %)))
6676
(else #(fatal %)))))
6777

@@ -79,9 +89,12 @@
7989
(symbol (str "doplarr.backends." (name (config/available-backend-for-media media @state/config)))
8090
f)))
8191

82-
(defmacro log-on-error [expr msg]
83-
`(try
84-
~expr
85-
(catch Exception e#
86-
(fatal e# ~msg)
87-
(throw e#))))
92+
(defn process-rootfolders [resp]
93+
(->> (from-camel resp)
94+
(map #(select-keys % #{:path :id}))
95+
(map #(set/rename-keys % {:path :name}))))
96+
97+
(defn process-tags [resp]
98+
(->> (from-camel resp)
99+
(map #(set/rename-keys % {:label :name}))
100+
(#(conj % {:name "No Tag" :id -1}))))

0 commit comments

Comments
 (0)