var queueList = {} var queue = [] var queueComplete = [] socket.on('init_downloadQueue', function (data) { console.log(data) if (data.queueComplete.length) { data.queueComplete.forEach(item => { addToQueue(data.queueList[item]) }) } if (data.currentItem){ addToQueue(data['queueList'][data.currentItem], true) } data.queue.forEach(item => { addToQueue(data.queueList[item]) }) }) function addToQueue(queueItem, current=false){ queueList[queueItem.uuid] = queueItem if (queueItem.downloaded + queueItem.failed == queueItem.size) queueComplete.push(queueItem.uuid) else queue.push(queueItem.uuid) $('#download_list').append( `
Cover ${queueItem.title}
${queueItem.title} - ${queueItem.artist}
${queueItem.downloaded + queueItem.failed}/${ queueItem.size }
remove
`) if (queueItem.progress>0 || current){ $('#bar_' + queueItem.uuid).removeClass('indeterminate').addClass('determinate') } $('#bar_' + queueItem.uuid).css('width', queueItem.progress + '%') if (queueItem.failed >= 1) { $('#download_' + queueItem.uuid + ' .download_info_status').append( `(${queueItem.failed}error_outline)` ) } if (queueItem.downloaded + queueItem.failed == queueItem.size) { let result_icon = $('#download_' + queueItem.uuid).find('.queue_icon') if (queueItem.failed == 0) { result_icon.text('done') } else if (queueItem.failed == queueItem.size) { result_icon.text('error') } else { result_icon.text('warning') } } } socket.on('addedToQueue', function (queueItem) { addToQueue(queueItem) }) function downloadAction(evt) { let icon = $(evt.currentTarget).text() let uuid = $(evt.currentTarget).data('uuid') switch (icon) { case 'remove': socket.emit('removeFromQueue', uuid) break default: } } socket.on('removedFromQueue', function (uuid) { let index = queue.indexOf(uuid) if (index > -1) { queue.splice(index, 1) $(`#download_${queueList[uuid].uuid}`).remove() delete queueList[uuid] } }) socket.on('startDownload', function (uuid) { $('#bar_' + uuid) .removeClass('indeterminate') .addClass('determinate') }) socket.on('finishDownload', function (uuid) { if (queue.indexOf(uuid) > -1) { toast(`${queueList[uuid].title} finished downloading.`, 'done') $('#bar_' + uuid).css('width', '100%') let result_icon = $('#download_' + uuid).find('.queue_icon') if (queueList[uuid].failed == 0) { result_icon.text('done') } else if (queueList[uuid].failed >= queueList[uuid].size) { result_icon.text('error') } else { result_icon.text('warning') } let index = queue.indexOf(uuid) if (index > -1) { queue.splice(index, 1) queueComplete.push(uuid) } if (queue.length <= 0) { toast('All downloads completed!', 'done_all') } } }) socket.on('removedAllDownloads', function (currentItem) { queueComplete = [] if (currentItem == '') { queue = [] queueList = {} $('#download_list').html('') } else { queue = [currentItem] tempQueueItem = queueList[currentItem] queueList = {} queueList[currentItem] = tempQueueItem $('.download_object').each(function (index) { if ($(this).attr('id') != 'download_' + currentItem) $(this).remove() }) } }) socket.on('removedFinishedDownloads', function () { queueComplete.forEach(item => { $('#download_' + item).remove() }) queueComplete = [] }) $('#clean_queue').on('click', function () { socket.emit('removeFinishedDownloads') }) $('#cancel_queue').on('click', function () { socket.emit('cancelAllDownloads') }) socket.on('updateQueue', function (update) { if (update.uuid && queue.indexOf(update.uuid) > -1) { if (update.downloaded) { queueList[update.uuid].downloaded++ $('#download_' + update.uuid + ' .queue_downloaded').text( queueList[update.uuid].downloaded + queueList[update.uuid].failed ) } if (update.failed) { queueList[update.uuid].failed++ $('#download_' + update.uuid + ' .queue_downloaded').text( queueList[update.uuid].downloaded + queueList[update.uuid].failed ) if (queueList[update.uuid].failed == 1) { $('#download_' + update.uuid + ' .download_info_status').append( `(1 error_outline)` ) } else { $('#download_' + update.uuid + ' .queue_failed').text(queueList[update.uuid].failed) } } if (update.progress) { queueList[update.uuid].progress = update.progress $('#bar_' + update.uuid).css('width', update.progress + '%') } } })