修复可能导致无法操作任务的问题
parent
015c17e2dc
commit
12c370d7cb
|
@ -75,11 +75,11 @@ const awaitRequestAnimationFrame = () => new Promise(resolve => window.requestAn
|
||||||
|
|
||||||
const addTasks = async(store, list, type) => {
|
const addTasks = async(store, list, type) => {
|
||||||
if (list.length == 0) return
|
if (list.length == 0) return
|
||||||
let num = 5
|
let num = 3
|
||||||
while (num-- > 0) {
|
while (num-- > 0) {
|
||||||
let item = list.shift()
|
let item = list.shift()
|
||||||
if (!item) return
|
if (!item) return
|
||||||
await store.dispatch('createDownload', {
|
store.dispatch('createDownload', {
|
||||||
musicInfo: item,
|
musicInfo: item,
|
||||||
type: getMusicType(item, type),
|
type: getMusicType(item, type),
|
||||||
})
|
})
|
||||||
|
@ -88,20 +88,20 @@ const addTasks = async(store, list, type) => {
|
||||||
await addTasks(store, list, type)
|
await addTasks(store, list, type)
|
||||||
}
|
}
|
||||||
const removeTasks = async(store, list) => {
|
const removeTasks = async(store, list) => {
|
||||||
let num = 50
|
let num = 20
|
||||||
while (num-- > 0) {
|
while (num-- > 0) {
|
||||||
let item = list.pop()
|
let item = list.pop()
|
||||||
if (!item) return
|
if (!item) return
|
||||||
let index = store.state.list.indexOf(item)
|
let index = store.state.list.indexOf(item)
|
||||||
if (index < 0) continue
|
if (index < 0) continue
|
||||||
await store.dispatch('removeTask', index)
|
store.dispatch('removeTask', item)
|
||||||
}
|
}
|
||||||
await awaitRequestAnimationFrame()
|
await awaitRequestAnimationFrame()
|
||||||
await removeTasks(store, list)
|
await removeTasks(store, list)
|
||||||
}
|
}
|
||||||
|
|
||||||
const startTasks = async(store, list) => {
|
const startTasks = async(store, list) => {
|
||||||
let num = 10
|
let num = 5
|
||||||
while (num-- > 0) {
|
while (num-- > 0) {
|
||||||
let item = list.shift()
|
let item = list.shift()
|
||||||
if (!item) return
|
if (!item) return
|
||||||
|
@ -115,13 +115,13 @@ const startTasks = async(store, list) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const pauseTasks = async(store, list, runs = []) => {
|
const pauseTasks = async(store, list, runs = []) => {
|
||||||
let num = 10
|
let num = 6
|
||||||
let index
|
let index
|
||||||
let stateList = store.state.list
|
let stateList = store.state.list
|
||||||
while (num-- > 0) {
|
while (num-- > 0) {
|
||||||
let item = list.shift()
|
let item = list.shift()
|
||||||
if (item.isComplate) continue
|
|
||||||
if (item) {
|
if (item) {
|
||||||
|
if (item.isComplate) continue
|
||||||
switch (item.status) {
|
switch (item.status) {
|
||||||
case state.downloadStatus.RUN:
|
case state.downloadStatus.RUN:
|
||||||
runs.push(item)
|
runs.push(item)
|
||||||
|
@ -129,7 +129,7 @@ const pauseTasks = async(store, list, runs = []) => {
|
||||||
case state.downloadStatus.WAITING:
|
case state.downloadStatus.WAITING:
|
||||||
index = stateList.indexOf(item)
|
index = stateList.indexOf(item)
|
||||||
if (index < 0) return
|
if (index < 0) return
|
||||||
await store.dispatch('pauseTask', index)
|
store.dispatch('pauseTask', item)
|
||||||
continue
|
continue
|
||||||
default:
|
default:
|
||||||
continue
|
continue
|
||||||
|
@ -138,8 +138,9 @@ const pauseTasks = async(store, list, runs = []) => {
|
||||||
for (const item of runs) {
|
for (const item of runs) {
|
||||||
index = stateList.indexOf(item)
|
index = stateList.indexOf(item)
|
||||||
if (index < 0) return
|
if (index < 0) return
|
||||||
await store.dispatch('pauseTask', index)
|
await store.dispatch('pauseTask', item)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await awaitRequestAnimationFrame()
|
await awaitRequestAnimationFrame()
|
||||||
|
@ -276,12 +277,12 @@ const actions = {
|
||||||
dispatch('startTask', downloadInfo)
|
dispatch('startTask', downloadInfo)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async createDownloadMultiple(store, { list, type }) {
|
createDownloadMultiple(store, { list, type }) {
|
||||||
if (!list.length) return
|
if (!list.length || isRuningActionTask) return
|
||||||
if (isRuningActionTask) return
|
|
||||||
isRuningActionTask = true
|
isRuningActionTask = true
|
||||||
await addTasks(store, [...list], type)
|
return addTasks(store, [...list], type).finally(() => {
|
||||||
isRuningActionTask = false
|
isRuningActionTask = false
|
||||||
|
})
|
||||||
},
|
},
|
||||||
async handleStartTask({ commit, dispatch, rootState }, downloadInfo) {
|
async handleStartTask({ commit, dispatch, rootState }, downloadInfo) {
|
||||||
// 开始任务
|
// 开始任务
|
||||||
|
@ -368,39 +369,39 @@ const actions = {
|
||||||
dispatch('startTask')
|
dispatch('startTask')
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
async removeTask({ commit, state, dispatch }, index) {
|
async removeTask({ commit, state, dispatch }, item) {
|
||||||
let info = state.list[index]
|
if (dls[item.key]) {
|
||||||
if (dls[info.key]) {
|
if (item.status == state.downloadStatus.RUN) {
|
||||||
if (info.status == state.downloadStatus.RUN) {
|
|
||||||
try {
|
try {
|
||||||
await dls[info.key].stop()
|
await dls[item.key].stop()
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
delete dls[info.key]
|
delete dls[item.key]
|
||||||
}
|
}
|
||||||
commit('removeTask', index)
|
commit('removeTask', item)
|
||||||
if (info.status != state.downloadStatus.COMPLETED) {
|
if (item.status != state.downloadStatus.COMPLETED) {
|
||||||
try {
|
try {
|
||||||
await deleteFile(info.filePath)
|
await deleteFile(item.filePath)
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
switch (info.status) {
|
switch (item.status) {
|
||||||
case state.downloadStatus.RUN:
|
case state.downloadStatus.RUN:
|
||||||
case state.downloadStatus.WAITING:
|
case state.downloadStatus.WAITING:
|
||||||
await dispatch('startTask')
|
await dispatch('startTask')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async removeTasks(store, list) {
|
removeTasks(store, list) {
|
||||||
let { rootState, state } = store
|
let { rootState, state } = store
|
||||||
if (isRuningActionTask) return
|
if (isRuningActionTask) return
|
||||||
isRuningActionTask = true
|
isRuningActionTask = true
|
||||||
await removeTasks(store, [...list])
|
return removeTasks(store, [...list]).finally(() => {
|
||||||
let result = getStartTask(state.list, state.downloadStatus, rootState.setting.download.maxDownloadNum)
|
let result = getStartTask(state.list, state.downloadStatus, rootState.setting.download.maxDownloadNum)
|
||||||
while (result) {
|
while (result) {
|
||||||
store.dispatch('startTask', result)
|
store.dispatch('startTask', result)
|
||||||
result = getStartTask(state.list, state.downloadStatus, rootState.setting.download.maxDownloadNum)
|
result = getStartTask(state.list, state.downloadStatus, rootState.setting.download.maxDownloadNum)
|
||||||
}
|
}
|
||||||
isRuningActionTask = false
|
isRuningActionTask = false
|
||||||
|
})
|
||||||
},
|
},
|
||||||
async startTask({ state, rootState, commit, dispatch }, downloadInfo) {
|
async startTask({ state, rootState, commit, dispatch }, downloadInfo) {
|
||||||
// 检查是否可以开始任务
|
// 检查是否可以开始任务
|
||||||
|
@ -426,14 +427,14 @@ const actions = {
|
||||||
await dispatch('handleStartTask', downloadInfo)
|
await dispatch('handleStartTask', downloadInfo)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async startTasks(store, list) {
|
startTasks(store, list) {
|
||||||
if (isRuningActionTask) return
|
if (isRuningActionTask) return
|
||||||
isRuningActionTask = true
|
isRuningActionTask = true
|
||||||
await startTasks(store, [...list])
|
return startTasks(store, [...list]).finally(() => {
|
||||||
isRuningActionTask = false
|
isRuningActionTask = false
|
||||||
|
})
|
||||||
},
|
},
|
||||||
async pauseTask({ state, commit }, index) {
|
async pauseTask(store, item) {
|
||||||
let item = state.list[index]
|
|
||||||
if (item.isComplate) return
|
if (item.isComplate) return
|
||||||
let dl = dls[item.key]
|
let dl = dls[item.key]
|
||||||
if (dl) {
|
if (dl) {
|
||||||
|
@ -441,13 +442,14 @@ const actions = {
|
||||||
await dl.stop()
|
await dl.stop()
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
commit('pauseTask', item)
|
store.commit('pauseTask', item)
|
||||||
},
|
},
|
||||||
async pauseTasks(store, list) {
|
pauseTasks(store, list) {
|
||||||
if (isRuningActionTask) return
|
if (isRuningActionTask) return
|
||||||
isRuningActionTask = true
|
isRuningActionTask = true
|
||||||
await pauseTasks(store, [...list])
|
return pauseTasks(store, [...list]).finally(() => {
|
||||||
isRuningActionTask = false
|
isRuningActionTask = false
|
||||||
|
})
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -456,8 +458,8 @@ const mutations = {
|
||||||
addTask(state, downloadInfo) {
|
addTask(state, downloadInfo) {
|
||||||
state.list.unshift(downloadInfo)
|
state.list.unshift(downloadInfo)
|
||||||
},
|
},
|
||||||
removeTask(state, index) {
|
removeTask({ list }, downloadInfo) {
|
||||||
state.list.splice(index, 1)
|
list.splice(list.indexOf(downloadInfo), 1)
|
||||||
},
|
},
|
||||||
pauseTask(state, downloadInfo) {
|
pauseTask(state, downloadInfo) {
|
||||||
downloadInfo.status = state.downloadStatus.PAUSE
|
downloadInfo.status = state.downloadStatus.PAUSE
|
||||||
|
|
|
@ -257,10 +257,10 @@ export default {
|
||||||
this.startTask(item)
|
this.startTask(item)
|
||||||
break
|
break
|
||||||
case 'pause':
|
case 'pause':
|
||||||
this.pauseTask(index)
|
this.pauseTask(item)
|
||||||
break
|
break
|
||||||
case 'remove':
|
case 'remove':
|
||||||
this.removeTask(index)
|
this.removeTask(item)
|
||||||
break
|
break
|
||||||
case 'file':
|
case 'file':
|
||||||
this.handleOpenFolder(index)
|
this.handleOpenFolder(index)
|
||||||
|
|
Loading…
Reference in New Issue