1
0
Fork 0
mirror of https://github.com/heyarne/airsonic-ui.git synced 2026-05-06 18:33:38 +02:00
airsonic-ui/src/airsonic_ui/events.cljs

46 lines
1.4 KiB
Clojure

(ns airsonic-ui.events
(:require [re-frame.core :as re-frame]
[ajax.core :as ajax]
[airsonic-ui.config :as config]
[airsonic-ui.db :as db]
[clojure.string :as string]))
(defn ^:private uri-escape [s]
(js/encodeURIComponent s))
(defn api-url [endpoint params]
(let [query (->> (assoc params
:f "json"
:c "airsonic-ui-cljs"
:v "1.15.0")
(map (fn [[k v]]
(str (uri-escape (name k)) "=" (uri-escape v))))
(string/join "&"))]
(str config/server "/rest/" endpoint "?" query)))
(re-frame/reg-event-fx
::authenticate
(fn [{:keys [db]} [_ {:keys [user pass]}]]
{:db (update db :active-requests inc)
:http-xhrio {:method :get
:uri (api-url "ping" {:u user :p pass})
:response-format (ajax/text-response-format)
:on-success [::auth-successful user pass]
:on-failure [::auth-gone-bad]}}))
(re-frame/reg-event-db
::auth-successful
(fn [db [_ user pass]]
(-> (update db :active-requests dec)
(assoc :login {:u user
:p pass}))))
(re-frame/reg-event-db
::auth-gone-bad
(fn [db event]
(println "auth gone bad" event)))
(re-frame/reg-event-db
::initialize-db
(fn [_]
db/default-db))