diff --git a/src/actions/nowPlayingActions.js b/src/actions/nowPlayingActions.js index d365bb9..d648659 100644 --- a/src/actions/nowPlayingActions.js +++ b/src/actions/nowPlayingActions.js @@ -4,6 +4,7 @@ export const actionType = { songAdd: 'SONG_ADD', songRemove: 'SONG_REMOVE', playNext: 'PLAY_NEXT', + playPrev: 'PLAY_PREV', playedNext: 'PLAYED_NEXT', getSuggestions: 'GET_SUGGESTIONS' }; @@ -20,6 +21,10 @@ export function playNext() { return dispatch => dispatch({type: actionType.playNext}); } +export function playPrev() { + return dispatch => dispatch({ type: actionType.playPrev }) +} + export function playedNext(song) { return dispatch => dispatch({type: actionType.playedNext, song}); } diff --git a/src/components/player/index.js b/src/components/player/index.js index d5a8268..0547474 100644 --- a/src/components/player/index.js +++ b/src/components/player/index.js @@ -127,6 +127,15 @@ export default class Player extends React.Component { case keys.N: this.props.playNext(); break; + case keys.P: + let existPrevious = this.props.prevSongs.length >= 2; + if(this.audioElement.currentTime <= 5 && existPrevious) { + this.props.playPrev(); + this.props.playNext(); + } else { + this.audioElement.currentTime = 0; + } + break; case keys.F: let searchElement = document.getElementById('search-input'); if (searchElement) { diff --git a/src/components/sideBar/miniCard/miniCard.js b/src/components/sideBar/miniCard/miniCard.js index d0137f6..ea706a6 100644 --- a/src/components/sideBar/miniCard/miniCard.js +++ b/src/components/sideBar/miniCard/miniCard.js @@ -25,8 +25,6 @@ export default class MiniCard extends React.Component { videoTitle = videoTitle.substring(0, MAX_TITLE_LENGTH)+'... '; } - console.log(this.props.name); - return (
diff --git a/src/constants.js b/src/constants.js index 6a3380e..3d588a9 100644 --- a/src/constants.js +++ b/src/constants.js @@ -8,5 +8,6 @@ export const keys = { UP_ARROW: 38, RIGHT_ARROW: 39, DOWN_ARROW: 40, - ENTER: 13 + ENTER: 13, + P: 80 } diff --git a/src/containers/playerContainer.js b/src/containers/playerContainer.js index bfbdbde..d31f494 100644 --- a/src/containers/playerContainer.js +++ b/src/containers/playerContainer.js @@ -2,13 +2,14 @@ import {connect} from 'react-redux'; import Player from '../components/player'; import {playSong} from "../actions/playerActions"; -import {playNext, getSuggestions, playedNext} from "../actions/nowPlayingActions"; +import {playNext, getSuggestions, playedNext, playPrev} from "../actions/nowPlayingActions"; import {activatePlaylist, deactivatePlaylist} from '../actions/playerActions'; function mapStateToProps(state) { return { currentSong: state.player.currentSong, - playlistActive: state.player.playlistActive + playlistActive: state.player.playlistActive, + prevSongs: state.nowPlaying.previousSongs } } @@ -20,6 +21,7 @@ export default connect( getSuggestions: getSuggestions, playedNext: playedNext, activatePlaylist, - deactivatePlaylist + deactivatePlaylist, + playPrev } )(Player); diff --git a/src/reducers/nowPlayingReducer.js b/src/reducers/nowPlayingReducer.js index 8587bb8..c591960 100644 --- a/src/reducers/nowPlayingReducer.js +++ b/src/reducers/nowPlayingReducer.js @@ -32,6 +32,21 @@ export function nowPlaying(state = initialState, action) { } return {...state, dispatchNext: false, previousSongs: prev}; + case actionType.playPrev: + if(state.previousSongs.length >= 2) { + let prev = state.previousSongs.slice(0, state.previousSongs.length - 2) + let songsToPlay = state.previousSongs.slice(state.previousSongs.length - 2) + let next = state.nextSongs.slice(0) + next = next.filter(item => !songInArray(item, songsToPlay)); + next.unshift(...songsToPlay) + return { + ...state, + previousSongs: prev, + nextSongs: next + } + } + return state; + case actionType.getSuggestions: if (action.suggestedSongs) { suggestions = removeDuplicateIn(removeDuplicateIn(action.suggestedSongs, state.previousSongs), state.nextSongs);