aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Ángel Moreno <mail@migalmoreno.com>2023-10-16 00:33:17 +0200
committerMiguel Ángel Moreno <mail@migalmoreno.com>2023-10-16 00:35:55 +0200
commit2fd76e17ef3fbfe970dd721f0ed0a9635da8b8df (patch)
tree0aa9b9bc813b18f77922554bc8bba85908cae072
parent67102039e0baafc48d3bc2a3e8c641fc60c34d85 (diff)
feat(frontend): add initial support for media queueing
-rw-r--r--src/frontend/tubo/events.cljs31
-rw-r--r--src/frontend/tubo/subs.cljs9
2 files changed, 32 insertions, 8 deletions
diff --git a/src/frontend/tubo/events.cljs b/src/frontend/tubo/events.cljs
index 87778b8..610b73e 100644
--- a/src/frontend/tubo/events.cljs
+++ b/src/frontend/tubo/events.cljs
@@ -15,6 +15,8 @@
:stream {}
:search-results []
:services []
+ :media-queue []
+ :media-queue-pos 0
:current-match nil
:page-scroll 0}))
@@ -166,21 +168,38 @@
:nextPage (js/encodeURIComponent next-page-url)})
:db (assoc db :show-pagination-loading true)))))
+(rf/reg-event-fx
+ ::add-to-media-queue
+ (fn [{:keys [db]} [_ stream]]
+ (let [media-queue (update db :media-queue conj stream)]
+ {:db media-queue
+ :fx [[:dispatch [::fetch-global-player-stream (:url stream)]]]})))
+
+(rf/reg-event-fx
+ ::change-media-queue-pos
+ (fn [{:keys [db]} [_ idx]]
+ {:db (assoc db :media-queue-pos idx)}))
+
(rf/reg-event-db
- ::change-global-stream
- (fn [db [_ global-stream]]
- (assoc db :global-stream global-stream)))
+ ::change-media-queue-stream
+ (fn [db [_ src]]
+ (let [idx (- (count (:media-queue db)) 1)]
+ (when-not (-> db :media-queue (nth idx) :stream)
+ (assoc-in db [:media-queue idx :stream] src)))))
(rf/reg-event-db
::toggle-global-player
(fn [db _]
- (assoc db :show-global-player (not (:show-global-player db)))))
+ (-> db
+ (assoc :show-global-player (not (:show-global-player db)))
+ (assoc :media-queue [])
+ (assoc :media-queue-pos 0))))
(rf/reg-event-fx
::switch-to-global-player
- (fn [{:keys [db]} [_ global-stream]]
+ (fn [{:keys [db]} [_ stream]]
{:db (assoc db :show-global-player true)
- :fx [[:dispatch [::change-global-stream global-stream]]]}))
+ :fx [[:dispatch [::add-to-media-queue stream]]]}))
(rf/reg-event-db
::load-services
diff --git a/src/frontend/tubo/subs.cljs b/src/frontend/tubo/subs.cljs
index 88291ca..7c68b0b 100644
--- a/src/frontend/tubo/subs.cljs
+++ b/src/frontend/tubo/subs.cljs
@@ -73,9 +73,14 @@
(:page-scroll db)))
(rf/reg-sub
- :global-stream
+ :media-queue
(fn [db _]
- (:global-stream db)))
+ (:media-queue db)))
+
+(rf/reg-sub
+ :media-queue-pos
+ (fn [db _]
+ (:media-queue-pos db)))
(rf/reg-sub
:show-global-player