Finished making sure direct connection works

This commit is contained in:
Kiran Shila
2021-09-19 12:52:20 -07:00
parent 479457bba6
commit a2c161b59a
4 changed files with 42 additions and 16 deletions

View File

@@ -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!"))

View File

@@ -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)

View File

@@ -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))

View File

@@ -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)))))