diff --git a/src/cljs/airsonic_ui/audio/core.cljs b/src/cljs/airsonic_ui/audio/core.cljs index ba0fe2d..bd52044 100644 --- a/src/cljs/airsonic_ui/audio/core.cljs +++ b/src/cljs/airsonic_ui/audio/core.cljs @@ -31,7 +31,7 @@ (defn attach-listeners! [el] (let [emit-audio-update (throttle #(rf/dispatch [:audio/update (->status el)]) 16)] - (doseq [event ["loadstart" "progress" "play" "timeupdate" "pause"]] + (doseq [event ["loadstart" "progress" "play" "timeupdate" "pause" "volumechange"]] (.addEventListener el event emit-audio-update)))) ;; effects to be fired from event handlers @@ -72,10 +72,26 @@ (set! (. @audio -currentTime) (* percentage duration)))) +(defn- set-volume! [volume] + (set! (.-volume @audio) volume)) + (rf/reg-fx :audio/set-volume (fn [percentage] - (set! (. @audio -volume) percentage))) + (when @audio + (set-volume! percentage)))) + +(rf/reg-fx + :audio/increase-volume + (fn [_] + (when-let [vol (some-> @audio .-volume)] + (set-volume! (min 1 (+ vol 0.05)))))) + +(rf/reg-fx + :audio/decrease-volume + (fn [_] + (when-let [vol (some-> @audio .-volume)] + (set-volume! (max 0 (- vol 0.05)))))) ;; subscriptions diff --git a/src/cljs/airsonic_ui/components/audio_player/events.cljs b/src/cljs/airsonic_ui/components/audio_player/events.cljs index 591422b..de96947 100644 --- a/src/cljs/airsonic_ui/components/audio_player/events.cljs +++ b/src/cljs/airsonic_ui/components/audio_player/events.cljs @@ -70,6 +70,15 @@ (rf/reg-event-fx :audio-player/set-volume - (fn [{:keys [db]} [_ percentage]] - {:db (assoc-in db [:audio :playback-status :volume] percentage) - :audio/set-volume percentage})) + (fn [_ [_ percentage]] + {:audio/set-volume percentage})) + +(rf/reg-event-fx + :audio-player/increase-volume + (fn [_ _] + {:audio/increase-volume nil})) + +(rf/reg-event-fx + :audio-player/decrease-volume + (fn [_ _] + {:audio/decrease-volume nil})) diff --git a/src/cljs/airsonic_ui/components/keyboard_shortcuts/config.cljs b/src/cljs/airsonic_ui/components/keyboard_shortcuts/config.cljs index 3e51c29..5204106 100644 --- a/src/cljs/airsonic_ui/components/keyboard_shortcuts/config.cljs +++ b/src/cljs/airsonic_ui/components/keyboard_shortcuts/config.cljs @@ -14,6 +14,12 @@ ["→" "Next song" [:audio-player/next-song] [{:keyCode 39}]] + ["+" "Increase volume" + [:audio-player/increase-volume] + [{:keyCode 171}]] + ["-" "Decrease volume" + [:audio-player/decrease-volume] + [{:keyCode 173}]] ["?" "Show / hide keyboard shortcut help" [:bulma.modal.events/toggle :keyboard-shortcuts-help] [{:keyCode 63}]]])