import { IS_PLAYING, IS_STOPPED, LOAD_AUDIO_URL, PAUSE, PLAY, SEEK_TO_PERCENT_COMPLETE, SET_BAND_VALUE, SET_BALANCE, SET_MEDIA, SET_VOLUME, START_WORKING, STOP, STOP_WORKING, UPDATE_TIME_ELAPSED, SET_EQ_OFF, SET_EQ_ON, PLAY_TRACK } from "./actionTypes"; import { next as nextTrack } from "./actionCreators"; import { getCurrentTrackId } from "./selectors"; export default media => store => { media.addEventListener("timeupdate", () => { store.dispatch({ type: UPDATE_TIME_ELAPSED, elapsed: media.timeElapsed() }); }); media.addEventListener("ended", () => { store.dispatch({ type: IS_STOPPED }); store.dispatch(nextTrack()); }); media.addEventListener("playing", () => { store.dispatch({ type: IS_PLAYING }); }); media.addEventListener("waiting", () => { store.dispatch({ type: START_WORKING }); }); media.addEventListener("stopWaiting", () => { store.dispatch({ type: STOP_WORKING }); }); media.addEventListener("fileLoaded", () => { store.dispatch({ type: SET_MEDIA, kbps: "128", khz: Math.round(media.sampleRate() / 1000).toString(), channels: media.channels(), length: media.duration(), id: getCurrentTrackId(store.getState()) }); }); return next => action => { switch (action.type) { case PLAY: media.play(); break; case PAUSE: media.pause(); break; case STOP: media.stop(); break; case SET_VOLUME: media.setVolume(action.volume); break; case SET_BALANCE: media.setBalance(action.balance); break; case SEEK_TO_PERCENT_COMPLETE: media.seekToPercentComplete(action.percent); break; case LOAD_AUDIO_URL: media.loadFromUrl(action.url, action.name, action.autoPlay); break; case PLAY_TRACK: const track = store.getState().playlist.tracks[action.id]; media.loadFromUrl(track.url, track.title, true); break; case SET_BAND_VALUE: if (action.band === "preamp") { media.setPreamp(action.value); } else { media.setEqBand(action.band, action.value); } break; case SET_EQ_OFF: media.disableEq(); break; case SET_EQ_ON: media.enableEq(); break; } return next(action); }; };