Implemented removeFromQueue and cancelAllDownloads
This commit is contained in:
@@ -84,6 +84,8 @@ async function startQueue(dz: any): Promise<any> {
|
||||
currentJob = true // lock currentJob
|
||||
|
||||
const currentUUID: string = queueOrder.shift() || ""
|
||||
console.log(currentUUID)
|
||||
queue[currentUUID].status = "downloading"
|
||||
const currentItem: any = JSON.parse(fs.readFileSync(configFolder + `queue${sep}${currentUUID}.json`).toString())
|
||||
let downloadObject: any
|
||||
switch (currentItem.__type__) {
|
||||
@@ -100,29 +102,66 @@ async function startQueue(dz: any): Promise<any> {
|
||||
}
|
||||
currentJob = new Downloader(dz, downloadObject, settings, listener)
|
||||
listener.send('startDownload', currentUUID)
|
||||
queue[currentUUID].status = "downloading"
|
||||
await currentJob.start()
|
||||
|
||||
// Set status
|
||||
if (downloadObject.failed == downloadObject.size){
|
||||
queue[currentUUID].status = "failed"
|
||||
} else if(downloadObject.failed > 0){
|
||||
queue[currentUUID].status = "withErrors"
|
||||
} else {
|
||||
queue[currentUUID].status = "completed"
|
||||
if (! downloadObject.isCanceled){
|
||||
// Set status
|
||||
if (downloadObject.failed == downloadObject.size){
|
||||
queue[currentUUID].status = "failed"
|
||||
} else if(downloadObject.failed > 0){
|
||||
queue[currentUUID].status = "withErrors"
|
||||
} else {
|
||||
queue[currentUUID].status = "completed"
|
||||
}
|
||||
|
||||
let savedObject = downloadObject.getSlimmedDict()
|
||||
savedObject.status = queue[currentUUID].status
|
||||
|
||||
// Save queue status
|
||||
fs.writeFileSync(configFolder + `queue${sep}${currentUUID}.json`, JSON.stringify(savedObject))
|
||||
}
|
||||
|
||||
let savedObject = downloadObject.getSlimmedDict()
|
||||
savedObject.status = queue[currentUUID].status
|
||||
|
||||
// Save queue status
|
||||
fs.writeFileSync(configFolder + `queue${sep}${currentUUID}.json`, JSON.stringify(savedObject))
|
||||
console.log(queueOrder)
|
||||
fs.writeFileSync(configFolder + `queue${sep}order.json`, JSON.stringify(queueOrder))
|
||||
|
||||
currentJob = null
|
||||
} while (queueOrder.length)
|
||||
}
|
||||
|
||||
export function cancelDownload(uuid: string){
|
||||
if (Object.keys(queue).includes(uuid)){
|
||||
switch (queue[uuid].status) {
|
||||
case "downloading":
|
||||
currentJob.downloadObject.isCanceled = true
|
||||
listener.send("cancellingCurrentItem", uuid)
|
||||
break
|
||||
case "inQueue":
|
||||
queueOrder.splice(queueOrder.indexOf(uuid), 1)
|
||||
fs.writeFileSync(configFolder + `queue${sep}order.json`, JSON.stringify(queueOrder))
|
||||
default:
|
||||
listener.send("removedFromQueue", uuid)
|
||||
break
|
||||
}
|
||||
fs.unlinkSync(configFolder + `queue${sep}${uuid}.json`)
|
||||
delete queue[uuid]
|
||||
}
|
||||
}
|
||||
|
||||
export function cancelAllDownloads(){
|
||||
queueOrder = []
|
||||
let currentItem: string | null = null
|
||||
Object.values(queue).forEach((downloadObject: any) => {
|
||||
if (downloadObject.status == "downloading"){
|
||||
currentJob.downloadObject.isCanceled = true
|
||||
listener.send("cancellingCurrentItem", downloadObject.uuid)
|
||||
currentItem = downloadObject.uuid
|
||||
}
|
||||
fs.unlinkSync(configFolder + `queue${sep}${downloadObject.uuid}.json`)
|
||||
delete queue[downloadObject.uuid]
|
||||
})
|
||||
fs.writeFileSync(configFolder + `queue${sep}order.json`, JSON.stringify(queueOrder))
|
||||
listener.send("removedAllDownloads", currentItem)
|
||||
}
|
||||
|
||||
export function clearCompletedDownloads(){
|
||||
Object.values(queue).forEach((downloadObject: any) => {
|
||||
if (downloadObject.status === "completed"){
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import express from 'express'
|
||||
// @ts-expect-error
|
||||
import { Deezer } from 'deezer-js'
|
||||
import { sessionDZ } from '../main'
|
||||
import { sessionDZ, queue, queueOrder, currentJob } from '../main'
|
||||
|
||||
const router = express.Router()
|
||||
|
||||
@@ -18,7 +18,7 @@ router.get('/connect', (req, res) => {
|
||||
if (!sessionDZ[req.session.id]) sessionDZ[req.session.id] = new Deezer()
|
||||
const dz = sessionDZ[req.session.id]
|
||||
|
||||
res.send({
|
||||
let result: any = {
|
||||
update: {
|
||||
currentCommit: 'testing',
|
||||
latestCommit: 'testing',
|
||||
@@ -28,7 +28,19 @@ router.get('/connect', (req, res) => {
|
||||
autologin: !dz.logged_in,
|
||||
currentUser: dz.current_user,
|
||||
deezerNotAvailable: false
|
||||
})
|
||||
}
|
||||
|
||||
if (Object.keys(queue).length > 0){
|
||||
result.queue = {
|
||||
queue,
|
||||
queueOrder
|
||||
}
|
||||
if (currentJob && currentJob !== true){
|
||||
result.queue.current = currentJob.downloadObject.uuid
|
||||
}
|
||||
}
|
||||
|
||||
res.send(result)
|
||||
})
|
||||
|
||||
export default router
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import { Server as WsServer } from 'ws'
|
||||
import { consoleInfo } from '../../helpers/errors'
|
||||
import { cancelAllDownloads } from '../../main'
|
||||
|
||||
const eventName = 'cancelAllDownloads'
|
||||
|
||||
const cb = (_: any, __: any, ___: WsServer) => {
|
||||
cancelAllDownloads()
|
||||
consoleInfo(`Queue cleared`)
|
||||
}
|
||||
|
||||
export default { eventName, cb }
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
import saveSettings from './saveSettings'
|
||||
import removeFinishedDownloads from './removeFinishedDownloads'
|
||||
import removeFromQueue from './removeFromQueue'
|
||||
import cancelAllDownloads from './cancelAllDownloads'
|
||||
|
||||
export default [
|
||||
saveSettings,
|
||||
removeFinishedDownloads
|
||||
removeFinishedDownloads,
|
||||
removeFromQueue,
|
||||
cancelAllDownloads
|
||||
]
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import { Server as WsServer } from 'ws'
|
||||
import { consoleInfo } from '../../helpers/errors'
|
||||
import { cancelDownload } from '../../main'
|
||||
|
||||
const eventName = 'removeFromQueue'
|
||||
|
||||
const cb = (data: any, __: any, ___: WsServer) => {
|
||||
cancelDownload(data)
|
||||
consoleInfo(`Cancelled ${data}`)
|
||||
}
|
||||
|
||||
export default { eventName, cb }
|
||||
|
||||
Reference in New Issue
Block a user