From 1408d5c4ccd1aa1632b9d11fca8356a239fc1f3f Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Thu, 27 Oct 2016 13:02:10 +1300 Subject: [PATCH] Preliminary keyboard shortcuts --- src/js/components/ContextMenu.js | 10 +++++++--- src/js/components/TrackList.js | 25 ++++++++++++++++++++++++- src/js/services/mopidy/reducer.js | 2 +- src/js/views/App.js | 21 ++++++++++++++++++++- 4 files changed, 52 insertions(+), 6 deletions(-) diff --git a/src/js/components/ContextMenu.js b/src/js/components/ContextMenu.js index b5c9b5cd..35f1df77 100755 --- a/src/js/components/ContextMenu.js +++ b/src/js/components/ContextMenu.js @@ -89,10 +89,14 @@ class ContextMenu extends React.Component{ selectedTracksUris.push( selectedTracks[i].uri ); } - // TODO: figure out what index the currentTlTrack is (.indexOf()?) - var currentTrackIndex = 1; + var current_tltrack = this.props.mopidy.current_tltrack; + function isCurrentTlid( tltrack ){ + return ( tltrack.tlid == current_tltrack.tlid ); + } + var currentTrack = this.props.mopidy.tracks.find( isCurrentTlid ); + var currentTrackIndex = this.props.mopidy.tracks.indexOf( currentTrack ); - this.props.mopidyActions.enqueueTracks(selectedTracksUris, currentTrackIndex); + this.props.mopidyActions.enqueueTracks(selectedTracksUris, currentTrackIndex+1); this.props.uiActions.hideContextMenu(); } diff --git a/src/js/components/TrackList.js b/src/js/components/TrackList.js index 4c90ae45..9b418d2c 100755 --- a/src/js/components/TrackList.js +++ b/src/js/components/TrackList.js @@ -16,6 +16,29 @@ class TrackList extends React.Component{ tracks: this.props.tracks, lastSelectedTrack: false } + + this.handleKeyUp = this.handleKeyUp.bind(this) + } + + componentWillMount(){ + window.addEventListener("keyup", this.handleKeyUp, false); + } + + componentWillUnmount(){ + window.removeEventListener("keyup", this.handleKeyUp, false); + } + + handleKeyUp(e){ + switch(e.keyCode){ + + case 13: // enter + this.playTrack( this.state.tracks[this.state.lastSelectedTrack] ); + break; + + case 46: // delete + console.log('delete') + break; + } } componentWillReceiveProps( nextProps ){ @@ -131,7 +154,7 @@ class TrackList extends React.Component{ // see if we're the current tlTrack // TODO: figure out why this isn't fired when the tracklist changes - if( self.props.mopidy.trackInFocus && self.props.mopidy.trackInFocus.tlid == track.tlid ){ + if( self.props.mopidy.current_tltrack && self.props.mopidy.current_tltrack.tlid == track.tlid ){ track.playing = true; }else{ track.playing = false; diff --git a/src/js/services/mopidy/reducer.js b/src/js/services/mopidy/reducer.js index eee80942..c5874b6b 100755 --- a/src/js/services/mopidy/reducer.js +++ b/src/js/services/mopidy/reducer.js @@ -61,7 +61,7 @@ export default function reducer(mopidy = {}, action){ } return Object.assign({}, mopidy, { - currentTlTrack: action.data, + current_tltrack: action.data, tracks: tracks }); diff --git a/src/js/views/App.js b/src/js/views/App.js index 658788a1..427cd1bd 100755 --- a/src/js/views/App.js +++ b/src/js/views/App.js @@ -20,10 +20,29 @@ class App extends React.Component{ constructor(props){ super(props); + + this.handleKeyUp = this.handleKeyUp.bind(this); } - componentDidMount(){ + componentWillMount(){ this.props.mopidyActions.connect(); + window.addEventListener("keyup", this.handleKeyUp, false); + } + + componentWillUnmount(){ + window.removeEventListener("keyup", this.handleKeyUp, false); + } + + handleKeyUp(e){ + switch(e.keyCode){ + case 32: // spacebar + if( this.props.mopidy.state == 'playing' ){ + this.props.mopidyActions.pause(); + }else{ + this.props.mopidyActions.play(); + } + break; + } } render(){