mirror of
https://github.com/kiranshila/Doplarr.git
synced 2026-03-31 06:24:10 -04:00
Finished making sure direct connection works
This commit is contained in:
@@ -22,21 +22,26 @@
|
||||
:direct {:series sonarr/quality-profiles
|
||||
:movie radarr/quality-profiles}})
|
||||
|
||||
(def process-selection-fn {:overseerr ovsr/post-process-selection
|
||||
:direct #(a/go (identity %))})
|
||||
(def process-selection-fn {:overseerr {:series ovsr/post-process-selection
|
||||
:movie ovsr/post-process-selection}
|
||||
:direct {:series sonarr/post-process-series
|
||||
:movie (fn [movie] (a/go movie))}})
|
||||
|
||||
(def request-selection-fn {:overseerr ovsr/selection-to-request
|
||||
:direct identity})
|
||||
|
||||
(def account-id-fn {:overseerr #(a/go ((a/<! (ovsr/discord-users)) %))
|
||||
:direct (fn [_] (a/go 1))}) ; Dummy id to get around account check
|
||||
|
||||
(def request-fn {:overseerr {:series ovsr/request
|
||||
:movie ovsr/request}
|
||||
:direct {:series sonarr/request
|
||||
:movie radarr/request}})
|
||||
|
||||
(def content-status-fn {:overseerr {:series ovsr/selection-status
|
||||
:movie ovsr/selection-status}
|
||||
:direct {:series sonarr/started-aquisition?
|
||||
:movie (constantly nil)}}) ;FIXME
|
||||
(def content-status-fn {:overseerr {:series ovsr/season-status
|
||||
:movie ovsr/movie-status}
|
||||
:direct {:series sonarr/season-status
|
||||
:movie radarr/movie-status}})
|
||||
|
||||
(defn start-interaction [interaction]
|
||||
(let [uuid (str (java.util.UUID/randomUUID))
|
||||
@@ -63,7 +68,7 @@
|
||||
selection-id (discord/dropdown-index interaction)
|
||||
profiles (->> (a/<! (((profiles-fn @backend) request-type)))
|
||||
(into []))
|
||||
selection (a/<! ((process-selection-fn @backend) (nth results selection-id)))]
|
||||
selection (a/<! (((process-selection-fn @backend) request-type) (nth results selection-id)))]
|
||||
(case request-type
|
||||
:series (discord/update-interaction-response token (discord/select-season selection uuid))
|
||||
:movie (case @backend
|
||||
@@ -91,8 +96,8 @@
|
||||
(a/go
|
||||
(let [{:keys [token selection season profile request-type profile-id is4k]} (get @discord/cache uuid)
|
||||
user-id (:user-id interaction)
|
||||
ovsr-id ((a/<! (ovsr/discord-users)) user-id)]
|
||||
(if (nil? ovsr-id)
|
||||
backend-id ((account-id-fn @backend) user-id)]
|
||||
(if (nil? backend-id)
|
||||
(discord/update-interaction-response token (discord/content-response "You do not have an associated account on Overseerr"))
|
||||
(case (((content-status-fn @backend) request-type) selection :season season :is4k is4k)
|
||||
:pending (discord/update-interaction-response token (discord/content-response "This has been requested, and the request is pending."))
|
||||
@@ -100,7 +105,7 @@
|
||||
:available (discord/update-interaction-response token (discord/content-response "This is already available!"))
|
||||
(->> (a/<! (((request-fn @backend) request-type)
|
||||
((request-selection-fn @backend) selection :season season :is4k (boolean is4k))
|
||||
:ovsr-id ovsr-id
|
||||
:ovsr-id backend-id
|
||||
:profile-id profile-id))
|
||||
(then (fn [_]
|
||||
(discord/update-interaction-response token (discord/content-response "Requested!"))
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
(then :body)
|
||||
(else utils/fatal-error)))))
|
||||
|
||||
(defn season-status [selection season & {:keys [is4k]}]
|
||||
(defn season-status [selection & {:keys [season is4k]}]
|
||||
(when-let [info (:mediaInfo selection)]
|
||||
(when-let [[& seasons] (:seasons info)]
|
||||
(status (dec ((if is4k :status4k :status) (nth seasons (dec season))))))))
|
||||
@@ -102,11 +102,6 @@
|
||||
(when-let [info (:mediaInfo selection)]
|
||||
(status (dec ((if is4k :status4k :status) info)))))
|
||||
|
||||
(defn selection-status [selection & {:keys [season is4k]}]
|
||||
(case (:mediaType selection)
|
||||
"tv" (season-status selection season :is4k is4k)
|
||||
"movie" (movie-status selection :is4k is4k)))
|
||||
|
||||
(defn selection-to-request [selection & {:keys [season is4k]}]
|
||||
(cond-> {:mediaType (:mediaType selection)
|
||||
:mediaId (:id selection)
|
||||
|
||||
@@ -52,3 +52,13 @@
|
||||
:addOptions {:searchForMovie true}})
|
||||
:content-type :json}))
|
||||
nil)
|
||||
|
||||
(defn movie-status [movie & _]
|
||||
(cond
|
||||
(and (:hasFile movie)
|
||||
(:isAvailable movie)
|
||||
(:monitored movie)) :available
|
||||
(and (not (:hasFile movie))
|
||||
(:isAvailable movie)
|
||||
(:monitored movie)) :processing
|
||||
:else nil))
|
||||
|
||||
@@ -110,3 +110,19 @@
|
||||
(if (= -1 season)
|
||||
(request-all series profile-id)
|
||||
(request-season series season profile-id)))
|
||||
|
||||
(defn post-process-series [series]
|
||||
(a/go
|
||||
(if-let [id (:id series)]
|
||||
(merge series (:body (a/<! (GET (str "/series/" id)))))
|
||||
series)))
|
||||
|
||||
(defn season-status [series & {:keys [season]}]
|
||||
(let [ssn (->> (:seasons series)
|
||||
(filter (comp (partial = season) :seasonNumber))
|
||||
first)]
|
||||
(when-let [stats (:statistics ssn)]
|
||||
(when (:monitored ssn)
|
||||
(cond
|
||||
(> 100.0 (:percentOfEpisodes stats)) :processing
|
||||
:else :available)))))
|
||||
|
||||
Reference in New Issue
Block a user