Skip to content

Commit ed62a16

Browse files
Sam AdamsSam Adams
authored andcommitted
move navigation, hotkey events to own nss
1 parent d7e184d commit ed62a16

File tree

7 files changed

+113
-102
lines changed

7 files changed

+113
-102
lines changed

‎README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ users loop (or 'A-B loop') segments of Spotify songs.
1515
- [ ] Add placeholders for album cover, waveform etc. pre-login
1616
- [ ] Add help text for hotkeys
1717
- [ ] More elegant way for starting a mocked-out offline dev build
18+
- [ ] Finish pulling apart `practaid.events` ns
1819

1920
## Mocking FX (Offline mode)
2021

‎src/dev/practaid/mock_events.cljs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
(mocker existing))))
6060

6161
(mock-fx
62-
:practaid.events/assign-url
62+
:practaid.routes/assign-url
6363
(fn [real-handler]
6464
(fn [url]
6565
(println "Mock Handler!")

‎src/practaid/core.cljs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
;; TODO -- only importing for event registration
88
[practaid.auth]
99
[practaid.player]
10+
[practaid.hotkeys]
1011

1112
[practaid.views.app :as view-root]
1213
[practaid.views.global-styles]

‎src/practaid/events.cljs‎

Lines changed: 4 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
[reitit.frontend.easy :as rfe]
99
[reitit.frontend.controllers :as rfc]
1010
[cljs.core.async :refer [go <!]]
11-
[cljs.core.async.interop :refer-macros [<p!]]
12-
[re-pressed.core :as rp])
11+
[cljs.core.async.interop :refer-macros [<p!]])
1312
(:require ["spotify-web-api-js" :as SpotifyWebApi]
1413
[cljs.spec.alpha :as s]))
1514

@@ -95,17 +94,6 @@
9594

9695
;; Initialization ----------------------------------------
9796

98-
(def space-key-code 32)
99-
(def p-key-code 80)
100-
(def enter-key-code 13)
101-
(def mac-enter-key-code 3)
102-
(def left-key-code 37)
103-
(def right-key-code 39)
104-
(def up-key-code 38)
105-
(def down-key-code 40)
106-
107-
(def keypress-looper-step-ms 10)
108-
10997
(rf/reg-event-fx
11098
::initialize-app
11199
[inject-store
@@ -121,51 +109,8 @@
121109
init-looper-page (when is-authorized
122110
[:dispatch [::initialize-looper-page]])]
123111
{:db db
124-
:fx [[:dispatch [::rp/add-keyboard-event-listener "keydown"]]
125-
[:dispatch [::rp/add-keyboard-event-listener "keyup"]]
126-
init-looper-page
127-
[:dispatch [::rp/set-keyup-rules {:event-keys [[[::reset-looper nil]
128-
[{:keyCode left-key-code}]
129-
[{:keyCode right-key-code}]
130-
[{:keyCode up-key-code}]
131-
[{:keyCode down-key-code}]]]
132-
:always-listen-keys [{:keyCode left-key-code}
133-
{:keyCode right-key-code}
134-
{:keyCode up-key-code}
135-
{:keyCode down-key-code}]}]]
136-
[:dispatch [::rp/set-keydown-rules {:event-keys [[[::toggle-play]
137-
[{:keyCode space-key-code}]
138-
[{:keyCode p-key-code}]]
139-
140-
[[::reset-looper nil]
141-
[{:keyCode enter-key-code}]
142-
[{:keyCode mac-enter-key-code}]]
143-
144-
[[::attempt-increment-loop-start (- keypress-looper-step-ms)]
145-
[{:keyCode left-key-code}]]
146-
[[::attempt-increment-loop-start keypress-looper-step-ms]
147-
[{:keyCode right-key-code}]]
148-
[[::attempt-increment-loop-end (- keypress-looper-step-ms)]
149-
[{:keyCode down-key-code}]]
150-
[[::attempt-increment-loop-end keypress-looper-step-ms]
151-
[{:keyCode up-key-code}]]
152-
,]
153-
:always-listen-keys [{:keyCode space-key-code}
154-
{:keyCode p-key-code}
155-
{:keyCode enter-key-code}
156-
{:keyCode mac-enter-key-code}
157-
{:keyCode left-key-code}
158-
{:keyCode right-key-code}
159-
{:keyCode up-key-code}
160-
{:keyCode down-key-code}]
161-
:prevent-default-keys [{:keyCode space-key-code}
162-
{:keyCode p-key-code}
163-
{:keyCode enter-key-code}
164-
{:keyCode mac-enter-key-code}
165-
{:keyCode left-key-code}
166-
{:keyCode right-key-code}
167-
{:keyCode up-key-code}
168-
{:keyCode down-key-code}]}]]]})))
112+
:fx [init-looper-page
113+
[:dispatch [:practaid.hotkeys/register-hotkeys]]]})))
169114

170115
(rf/reg-event-fx
171116
::reset-app-completely
@@ -174,43 +119,8 @@
174119
check-store-spec-interceptor]
175120
(fn [_ _]
176121
{:fx [[:store {}]
177-
[::reload-page nil]]}))
178-
179-
180-
181-
;; Routing -----------------------------------------------
182-
183-
(rf/reg-event-fx
184-
::navigate
185-
[check-db-spec-interceptor]
186-
(fn [_cofx [_ route]]
187-
{::navigate! route}))
122+
[:practaid.routes/reload-page nil]]}))
188123

189-
(rf/reg-event-db
190-
::navigated
191-
[check-db-spec-interceptor]
192-
(fn [db [_ new-match]]
193-
(let [old-match (:current-route db)
194-
controllers (rfc/apply-controllers (:controllers old-match) new-match)]
195-
(assoc db :current-route (assoc new-match :controllers controllers)))))
196-
197-
(rf/reg-fx
198-
::navigate!
199-
(fn [route]
200-
(rfe/push-state route)))
201-
202-
;; For foreign-domain routes
203-
(rf/reg-fx
204-
::assign-url
205-
(fn [url]
206-
(-> js/window
207-
(.-location)
208-
(.assign url))))
209-
210-
(rf/reg-fx
211-
::reload-page
212-
(fn [_]
213-
(.reload js/location)))
214124

215125

216126

@@ -344,7 +254,6 @@
344254
[check-db-spec-interceptor]
345255
(fn [_ _]
346256
{:fx [
347-
;[:dispatch [::navigate :routes/looper]]
348257
[:practaid.player/initialize-spotify-sdk nil]
349258
;; TODO: store the outcome ID
350259
[::set-interval {:f #(rf/dispatch [::refresh-playback-state])

‎src/practaid/hotkeys.cljs‎

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
(ns practaid.hotkeys
2+
(:require [re-frame.core :as rf]
3+
[re-pressed.core :as rp]))
4+
5+
(def space-key-code 32)
6+
(def p-key-code 80)
7+
(def enter-key-code 13)
8+
(def mac-enter-key-code 3)
9+
(def left-key-code 37)
10+
(def right-key-code 39)
11+
(def up-key-code 38)
12+
(def down-key-code 40)
13+
14+
(def keypress-looper-step-ms 10)
15+
16+
(rf/reg-event-fx
17+
::register-hotkeys
18+
[]
19+
(fn [_ _]
20+
{:fx [[:dispatch [::rp/add-keyboard-event-listener "keydown"]]
21+
[:dispatch [::rp/add-keyboard-event-listener "keyup"]]
22+
[:dispatch [::rp/set-keyup-rules {:event-keys [[[:practaid.events/reset-looper nil]
23+
[{:keyCode left-key-code}]
24+
[{:keyCode right-key-code}]
25+
[{:keyCode up-key-code}]
26+
[{:keyCode down-key-code}]]]
27+
:always-listen-keys [{:keyCode left-key-code}
28+
{:keyCode right-key-code}
29+
{:keyCode up-key-code}
30+
{:keyCode down-key-code}]}]]
31+
[:dispatch [::rp/set-keydown-rules {:event-keys [[[:practaid.events/toggle-play]
32+
[{:keyCode space-key-code}]
33+
[{:keyCode p-key-code}]]
34+
35+
[[:practaid.events/reset-looper nil]
36+
[{:keyCode enter-key-code}]
37+
[{:keyCode mac-enter-key-code}]]
38+
39+
[[:practaid.events/attempt-increment-loop-start (- keypress-looper-step-ms)]
40+
[{:keyCode left-key-code}]]
41+
[[:practaid.events/attempt-increment-loop-start keypress-looper-step-ms]
42+
[{:keyCode right-key-code}]]
43+
[[:practaid.events/attempt-increment-loop-end (- keypress-looper-step-ms)]
44+
[{:keyCode down-key-code}]]
45+
[[:practaid.events/attempt-increment-loop-end keypress-looper-step-ms]
46+
[{:keyCode up-key-code}]]
47+
,]
48+
:always-listen-keys [{:keyCode space-key-code}
49+
{:keyCode p-key-code}
50+
{:keyCode enter-key-code}
51+
{:keyCode mac-enter-key-code}
52+
{:keyCode left-key-code}
53+
{:keyCode right-key-code}
54+
{:keyCode up-key-code}
55+
{:keyCode down-key-code}]
56+
:prevent-default-keys [{:keyCode space-key-code}
57+
{:keyCode p-key-code}
58+
{:keyCode enter-key-code}
59+
{:keyCode mac-enter-key-code}
60+
{:keyCode left-key-code}
61+
{:keyCode right-key-code}
62+
{:keyCode up-key-code}
63+
{:keyCode down-key-code}]}]]]}))

‎src/practaid/player.cljs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,9 @@
144144
(assoc db :loop-timeout-id nil)
145145
db)
146146
set-loop-timeout (when (and prev-paused (not is-paused) loop-start-ms loop-end-ms)
147-
[::set-timeout {:f #(rf/dispatch [:practaid.events/reset-looper])
148-
:timeout-ms (- loop-end-ms player-pos-ms)
149-
:on-set [:practaid.events/set-loop-timeout-id]}])]
147+
[:practaid.events/set-timeout {:f #(rf/dispatch [:practaid.events/reset-looper])
148+
:timeout-ms (- loop-end-ms player-pos-ms)
149+
:on-set [:practaid.events/set-loop-timeout-id]}])]
150150
{:db db
151151
:fx [(when is-different-track [:dispatch [:practaid.events/refresh-track-analysis]])
152152
clear-pos-interval

‎src/practaid/routes.cljs‎

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
[reitit.frontend.controllers :as rfc]
77
[practaid.views.home-page :refer [home-page]]
88
[practaid.views.callback-page :refer [callback-page]]
9-
[practaid.views.looper-page :refer [looper-page]]))
9+
[practaid.views.looper-page :refer [looper-page]]
10+
[practaid.events :refer [check-db-spec-interceptor]]))
1011

1112
;;; Routes
1213

@@ -34,10 +35,46 @@
3435

3536
(defn on-navigate [new-match]
3637
(when new-match
37-
(rf/dispatch [:practaid.events/navigated new-match])))
38+
(rf/dispatch [::navigated new-match])))
3839

3940
(defn init-routes! []
4041
(rfe/start!
4142
router
4243
on-navigate
43-
{:use-fragment false}))
44+
{:use-fragment false}))
45+
46+
47+
;; Routing -----------------------------------------------
48+
49+
(rf/reg-event-fx
50+
::navigate
51+
[check-db-spec-interceptor]
52+
(fn [_cofx [_ route]]
53+
{::navigate! route}))
54+
55+
(rf/reg-event-db
56+
::navigated
57+
[check-db-spec-interceptor]
58+
(fn [db [_ new-match]]
59+
(let [old-match (:current-route db)
60+
controllers (rfc/apply-controllers (:controllers old-match) new-match)]
61+
(assoc db :current-route (assoc new-match :controllers controllers)))))
62+
63+
(rf/reg-fx
64+
::navigate!
65+
(fn [route]
66+
(rfe/push-state route)))
67+
68+
;; For foreign-domain routes; TODO maybe move me?
69+
(rf/reg-fx
70+
::assign-url
71+
(fn [url]
72+
(-> js/window
73+
(.-location)
74+
(.assign url))))
75+
76+
(rf/reg-fx
77+
::reload-page
78+
(fn [_]
79+
(.reload js/location)))
80+

0 commit comments

Comments
 (0)