diff --git a/public/css/style.css b/public/css/style.css index feb57c5..399d9f1 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -427,3 +427,6 @@ input[type="text"], input[type="password"], input[type="number"]{ color: var(--primary-text); margin-bottom: 8px; } +.right{ + float: right; +} diff --git a/public/index.html b/public/index.html index 7881909..0a6c888 100644 --- a/public/index.html +++ b/public/index.html @@ -359,6 +359,10 @@

Settings

chevron_right +
+ clear_all + delete_sweep +
diff --git a/public/js/app.js b/public/js/app.js index 8a59fdc..3325b93 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -67,7 +67,6 @@ function clickElement(button){ } function sendAddToQueue(url, bitrate = null){ - console.log(url) socket.emit("addToQueue", {url: url, bitrate:bitrate}) } diff --git a/public/js/downloadList.js b/public/js/downloadList.js index 7b2bc2d..513c91a 100644 --- a/public/js/downloadList.js +++ b/public/js/downloadList.js @@ -1,23 +1,28 @@ 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]) - $('#bar_' + data.currentItem).removeClass('indeterminate').addClass('determinate') - $('#bar_' + data.currentItem).css('width', data['queueList'][data.currentItem].progress + '%') - if (queueList[data.currentItem].failed >= 1){ - $("#download_"+data.currentItem+" .download_info_status").append(`(${queueList[data.currentItem].failed}error_outline)`) - } } - data['queue'].forEach(item=>{ - addToQueue(data['queueList'][item]) + data.queue.forEach(item=>{ + addToQueue(data.queueList[item]) }) }) function addToQueue(queueItem){ queueList[queueItem.uuid] = queueItem - queue.push(queueItem.uuid) + if ((queueItem.downloaded + queueItem.failed) == queueItem.size) + queueComplete.push(queueItem.uuid) + else + queue.push(queueItem.uuid) $("#download_list").append( `
@@ -35,6 +40,23 @@ function addToQueue(queueItem){ remove
`) + if (queueItem.progress>0){ + $('#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){ @@ -80,7 +102,7 @@ socket.on("finishDownload", function(uuid){ let index = queue.indexOf(uuid) if (index > -1){ queue.splice(index, 1) - delete queueList[uuid] + queueComplete.push(uuid) } if (queue.length <= 0){ toast('All downloads completed!', 'done_all') @@ -91,9 +113,25 @@ socket.on("finishDownload", function(uuid){ socket.on("removedAllDownloads", function(){ queue = [] queueList = {} + queueComplete = [] $("#download_list").html("") }) +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){ diff --git a/public/js/init.js b/public/js/init.js index 66a747e..d5e8808 100644 --- a/public/js/init.js +++ b/public/js/init.js @@ -9,8 +9,8 @@ toastsWithId = {} function toast(msg, icon=null, dismiss=true, id=null){ if (toastsWithId[id]){ - toastObj = toastsWithId[id] - toastDOM = $(`div.toastify[toast_id=${id}]`) + let toastObj = toastsWithId[id] + let toastDOM = $(`div.toastify[toast_id=${id}]`) if (msg){ toastDOM.find(".toast-message").html(msg) } @@ -21,6 +21,7 @@ function toast(msg, icon=null, dismiss=true, id=null){ icon = `${icon}` toastDOM.find(".toast-icon").html(icon) } + console.log(dismiss) if (dismiss !== null && dismiss){ setTimeout(function(){ toastObj.hideToast() @@ -34,7 +35,7 @@ function toast(msg, icon=null, dismiss=true, id=null){ icon = `
` else icon = `${icon}` - toastObj = Toastify({ + let toastObj = Toastify({ text: `${icon}${msg}`, duration: dismiss ? 3000 : 0, gravity: 'bottom', diff --git a/public/js/utils.js b/public/js/utils.js index 69075f5..8bca0ed 100644 --- a/public/js/utils.js +++ b/public/js/utils.js @@ -1,11 +1,12 @@ function isValidURL(text){ - if (text.toLowerCase().startsWith("http")) + if (text.toLowerCase().startsWith("http")){ if (text.toLowerCase().indexOf("deezer.com") >= 0 || text.toLowerCase().indexOf("open.spotify.com") >= 0) return true - else if (text.toLowerCase().startsWith("spotify:")) + }else if (text.toLowerCase().startsWith("spotify:")) return true return false } + function convertDuration(duration) { //convert from seconds only to mm:ss format var mm, ss