aboutsummaryrefslogtreecommitdiff
path: root/src/dionysus/web/enduser/home
diff options
context:
space:
mode:
Diffstat (limited to 'src/dionysus/web/enduser/home')
-rw-r--r--src/dionysus/web/enduser/home/search.clj67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/dionysus/web/enduser/home/search.clj b/src/dionysus/web/enduser/home/search.clj
new file mode 100644
index 0000000..cea539c
--- /dev/null
+++ b/src/dionysus/web/enduser/home/search.clj
@@ -0,0 +1,67 @@
+(ns dionysus.web.enduser.home.search
+ (:require [clojure.string :as cstr]
+ [dionysus.blacklist :as dblacklist]
+ [dionysus.spotify :as dspotify]
+ [dionysus.web.utils :as dwutils]
+ [ring.util.response :as ruresp]))
+
+(defn- search-item [track]
+ [:div {:class ["card" "search-item"]}
+ [:img {:class "album-image"
+ :src (get-in track [:album :images 0 :url])
+ :width "130em"}]
+ [:div
+ [:b (:name track)]
+ [:p (str "Von " (cstr/join ", " (map :name (:artists track))))]]
+ [:img {:class "track-action-icon"
+ :src "/assets/icons/plus.svg"
+ :hx-post (str "/search/add/" (:uri track) "/")
+ :hx-trigger "click"
+ :hx-swap "outerHTML"
+ :hx-target "this"
+ :height "60em"
+ :alt "plus icon"
+ :title "Lied zur Warteschlange hinzufügen"}]])
+
+(defn render-search [req]
+ (let [query (get-in req [:query-params "query"])
+ tracks (-> (dspotify/search! query)
+ (get-in [:tracks :items])
+ delay)]
+ (cond
+ (cstr/blank? query)
+ [:i "Nutze die Suchleiste oben, um nach einem Lied zu suchen oder füge den Link zu dem Lied ein."]
+
+ (nil? @tracks)
+ [:b "An error occurred."]
+
+ :else
+ (for [track @tracks]
+ (search-item track)))))
+
+(defn handle-search [req]
+ (-> req
+ render-search
+ dwutils/render-html
+ ruresp/response))
+
+(defn handle-search-add [req]
+ (let [uri (get-in req [:path-params :uri])
+ on-blacklist? (-> uri
+ (cstr/split #":")
+ last
+ dblacklist/on-blacklist?)]
+ (when on-blacklist? (dspotify/add-item-to-queue! uri))
+ (-> [:img {:class "track-action-icon"
+ :src (if on-blacklist?
+ "/assets/icons/warning.svg"
+ "/assets/icons/check.svg")
+ :alt (if on-blacklist?
+ "warn dreieck icon"
+ "haken icon")
+ :title (if on-blacklist?
+ "Lied oder Künstler ist auf der Blacklist"
+ "Lied wurde zur Warteschlange hinzugefügt")
+ :height "60em"}]
+ dwutils/render-html
+ ruresp/response)))