webamp/js/mediaMiddleware.js
2017-01-13 21:02:04 -08:00

73 lines
1.6 KiB
JavaScript

import {
IS_PLAYING,
IS_STOPPED,
PAUSE,
PLAY,
SEEK_TO_PERCENT_COMPLETE,
SET_BALANCE,
SET_VOLUME,
START_WORKING,
STOP,
STOP_WORKING,
TOGGLE_REPEAT,
TOGGLE_SHUFFLE,
UPDATE_TIME_ELAPSED,
SET_EQ_BAND
} from './actionTypes';
export default (media) => (
(store) => {
media.addEventListener('timeupdate', () => {
store.dispatch({type: UPDATE_TIME_ELAPSED, elapsed: media.timeElapsed()});
});
media.addEventListener('ended', () => {
store.dispatch({type: IS_STOPPED});
});
media.addEventListener('playing', () => {
store.dispatch({type: IS_PLAYING});
});
media.addEventListener('waiting', () => {
store.dispatch({type: START_WORKING});
});
media.addEventListener('stopWaiting', () => {
store.dispatch({type: STOP_WORKING});
});
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 TOGGLE_REPEAT:
media.toggleRepeat();
break;
case TOGGLE_SHUFFLE:
media.toggleShuffle();
break;
case SEEK_TO_PERCENT_COMPLETE:
media.seekToPercentComplete(action.percent);
break;
case SET_EQ_BAND:
media.setEqBand(action.band);
break;
}
return next(action);
};
}
);