diff options
Diffstat (limited to 'src/dionysus/web/enduser/home/search.clj')
| -rw-r--r-- | src/dionysus/web/enduser/home/search.clj | 67 |
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))) |
