From 32ee50f0f6f53f8d5dea3bf159be3f65974c4b7b Mon Sep 17 00:00:00 2001 From: Tim Date: Sat, 1 Nov 2025 17:36:48 +0100 Subject: Initial commit --- src/dionysus/web/enduser/home/search.clj | 67 ++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/dionysus/web/enduser/home/search.clj (limited to 'src/dionysus/web/enduser/home/search.clj') 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))) -- cgit v1.2.3