Batch processor; Merging enqueue and enqueue next
This commit is contained in:
@ -139,7 +139,7 @@ class ContextMenu extends React.Component{
|
||||
return (helpers.uriSource(this.props.menu.items[0].uri) == 'spotify')
|
||||
}
|
||||
|
||||
toggleInLibrary(in_library){
|
||||
toggleInLibrary(e, in_library){
|
||||
this.props.uiActions.hideContextMenu()
|
||||
if (in_library){
|
||||
this.props.spotifyActions.following(this.props.menu.items[0].uri, 'DELETE')
|
||||
@ -148,13 +148,13 @@ class ContextMenu extends React.Component{
|
||||
}
|
||||
}
|
||||
|
||||
playQueueItem(){
|
||||
playQueueItem(e){
|
||||
this.props.uiActions.hideContextMenu()
|
||||
var tracks = this.props.menu.items;
|
||||
this.props.mopidyActions.changeTrack( tracks[0].tlid )
|
||||
}
|
||||
|
||||
removeFromQueue(){
|
||||
removeFromQueue(e){
|
||||
this.props.uiActions.hideContextMenu()
|
||||
var tracks = this.props.menu.items;
|
||||
var tracks_tlids = [];
|
||||
@ -164,37 +164,32 @@ class ContextMenu extends React.Component{
|
||||
this.props.mopidyActions.removeTracks( tracks_tlids );
|
||||
}
|
||||
|
||||
playURIs(){
|
||||
playURIs(e){
|
||||
this.props.uiActions.hideContextMenu()
|
||||
this.props.mopidyActions.playURIs(this.props.menu.uris, this.props.menu.tracklist_uri)
|
||||
}
|
||||
|
||||
playURIsNext(){
|
||||
addToQueue(e, next = false){
|
||||
this.props.uiActions.hideContextMenu()
|
||||
this.props.mopidyActions.enqueueURIsNext(this.props.menu.uris, this.props.menu.tracklist_uri)
|
||||
this.props.mopidyActions.enqueueURIs(this.props.menu.uris, this.props.menu.tracklist_uri, next)
|
||||
}
|
||||
|
||||
addToQueue(){
|
||||
this.props.uiActions.hideContextMenu()
|
||||
this.props.mopidyActions.enqueueURIs(this.props.menu.uris, this.props.menu.tracklist_uri)
|
||||
}
|
||||
|
||||
addTracksToPlaylist(playlist_uri){
|
||||
addTracksToPlaylist(e, playlist_uri){
|
||||
this.props.uiActions.hideContextMenu()
|
||||
this.props.uiActions.addTracksToPlaylist(playlist_uri, this.props.menu.uris)
|
||||
}
|
||||
|
||||
removeFromPlaylist(){
|
||||
removeFromPlaylist(e){
|
||||
this.props.uiActions.hideContextMenu()
|
||||
this.props.uiActions.removeTracksFromPlaylist(this.props.menu.tracklist_uri, this.props.menu.indexes)
|
||||
}
|
||||
|
||||
startRadio(){
|
||||
startRadio(e){
|
||||
this.props.uiActions.hideContextMenu()
|
||||
this.props.pusherActions.startRadio(this.props.menu.uris)
|
||||
}
|
||||
|
||||
goToArtist(){
|
||||
goToArtist(e){
|
||||
if (!this.props.menu.items || this.props.menu.items.length <= 0 || !this.props.menu.items[0].artists || this.props.menu.items[0].artists.length <= 0){
|
||||
return null
|
||||
} else {
|
||||
@ -203,7 +198,7 @@ class ContextMenu extends React.Component{
|
||||
}
|
||||
}
|
||||
|
||||
goToUser(){
|
||||
goToUser(e){
|
||||
if (!this.props.menu.items || this.props.menu.items.length <= 0){
|
||||
return null
|
||||
} else {
|
||||
@ -223,7 +218,7 @@ class ContextMenu extends React.Component{
|
||||
this.props.uiActions.hideContextMenu()
|
||||
}
|
||||
|
||||
closeAndDeselectTracks(){
|
||||
closeAndDeselectTracks(e){
|
||||
this.props.uiActions.hideContextMenu();
|
||||
// TODO
|
||||
}
|
||||
@ -341,7 +336,7 @@ class ContextMenu extends React.Component{
|
||||
|
||||
var play_uris_next = (
|
||||
<span className="menu-item-wrapper">
|
||||
<a className="menu-item" onClick={e => this.playURIsNext(e)}>
|
||||
<a className="menu-item" onClick={e => this.addToQueue(e, true)}>
|
||||
<span className="label">Play next</span>
|
||||
</a>
|
||||
</span>
|
||||
@ -367,7 +362,7 @@ class ContextMenu extends React.Component{
|
||||
|
||||
var toggle_in_library = (
|
||||
<span className="menu-item-wrapper">
|
||||
<a className="menu-item" onClick={e => this.toggleInLibrary(context.in_library)}>
|
||||
<a className="menu-item" onClick={e => this.toggleInLibrary(e, context.in_library)}>
|
||||
<span className="label">
|
||||
{context.in_library ? 'Remove from library' : 'Add to library'}
|
||||
</span>
|
||||
|
||||
@ -57,20 +57,12 @@ export function playURIs( uris, from_uri = null ){
|
||||
}
|
||||
}
|
||||
|
||||
export function enqueueURIsNext( uris, from_uri = null ){
|
||||
if( typeof(uris) !== 'object' ) uris = [uris]
|
||||
return {
|
||||
type: 'MOPIDY_ENQUEUE_URIS_NEXT',
|
||||
uris: uris,
|
||||
from_uri: from_uri
|
||||
}
|
||||
}
|
||||
|
||||
export function enqueueURIs( uris, from_uri = null, at_position = false ){
|
||||
export function enqueueURIs( uris, from_uri = null, next = false, at_position = null ){
|
||||
return {
|
||||
type: 'MOPIDY_ENQUEUE_URIS',
|
||||
uris: uris,
|
||||
at_position: at_position,
|
||||
next: next,
|
||||
from_uri: from_uri
|
||||
}
|
||||
}
|
||||
|
||||
@ -222,35 +222,8 @@ const MopidyMiddleware = (function(){
|
||||
break;
|
||||
|
||||
case 'MOPIDY_ENQUEUE_URIS':
|
||||
|
||||
// create batches of 20 uris to load
|
||||
var all_uris = Object.assign([], action.uris)
|
||||
var batched_uris = []
|
||||
while (all_uris.length > 0){
|
||||
batched_uris.push( all_uris.splice(0,20) )
|
||||
}
|
||||
|
||||
// run each batch
|
||||
for (var i = 0; i < batched_uris.length; i++){
|
||||
var value = { uris: batched_uris[i] }
|
||||
if (action.at_position){
|
||||
value.at_position = action.at_position
|
||||
}
|
||||
|
||||
instruct( socket, store, 'tracklist.add', value )
|
||||
.then( response => {
|
||||
var tlids = []
|
||||
for (var i = 0; i < response.length; i++){
|
||||
tlids.push(response[i].tlid)
|
||||
}
|
||||
store.dispatch( pusherActions.addQueueMetadata(tlids, action.from_uri) )
|
||||
console.info('Added '+tlids.length+' URI(s) to queue')
|
||||
})
|
||||
}
|
||||
break
|
||||
|
||||
case 'MOPIDY_ENQUEUE_URIS_NEXT':
|
||||
|
||||
var uris_added = 0
|
||||
var remaining_uris = Object.assign([], action.uris)
|
||||
var current_track = store.getState().ui.current_track
|
||||
var current_tracklist = store.getState().ui.current_tracklist
|
||||
var current_track_index = -1
|
||||
@ -264,18 +237,46 @@ const MopidyMiddleware = (function(){
|
||||
}
|
||||
}
|
||||
|
||||
var at_position = null
|
||||
if( current_track_index > -1 ) at_position = current_track_index + 1
|
||||
let process_batch = function(){
|
||||
var params = {uris: remaining_uris.splice(0,10)}
|
||||
if (action.next && current_track_index > -1){
|
||||
params.at_position = current_track_index + uris_added + 1
|
||||
} else if (action.at_position){
|
||||
params.at_position = action.at_position
|
||||
}
|
||||
|
||||
instruct(socket, store, 'tracklist.add', params)
|
||||
.then( response => {
|
||||
|
||||
// append our counter
|
||||
uris_added += response.length
|
||||
|
||||
// add metadata to queue
|
||||
var tlids = []
|
||||
for (var i = 0; i < response.length; i++){
|
||||
tlids.push(response[i].tlid)
|
||||
}
|
||||
store.dispatch( pusherActions.addQueueMetadata(tlids, action.from_uri) )
|
||||
|
||||
console.info('Added '+tlids.length+' URI(s) to queue')
|
||||
|
||||
// still more URIs? run again in 0.8s
|
||||
// this gives our server time to handle other requests
|
||||
// crude, but prevents locking the server
|
||||
if (remaining_uris.length > 0){
|
||||
setTimeout(
|
||||
function(){
|
||||
process_batch()
|
||||
},
|
||||
800
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// start processing
|
||||
process_batch()
|
||||
|
||||
instruct( socket, store, 'tracklist.add', { uris: action.uris, at_position: at_position } )
|
||||
.then( response => {
|
||||
var tlids = []
|
||||
for (var i = 0; i < response.length; i++){
|
||||
tlids.push(response[i].tlid)
|
||||
}
|
||||
store.dispatch( pusherActions.addQueueMetadata(tlids, action.from_uri) )
|
||||
store.dispatch( uiActions.createNotification('Added '+tlids.length+' URI(s) to queue') )
|
||||
})
|
||||
break
|
||||
|
||||
case 'MOPIDY_PLAY_URIS':
|
||||
|
||||
Reference in New Issue
Block a user