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 + '%') } } })