audiobookshelf/client/store/tasks.js

80 lines
2.6 KiB
JavaScript

import Vue from 'vue'
export const state = () => ({
tasks: [],
queuedEmbedLIds: [],
audioFilesEncoding: {},
audioFilesFinished: {},
taskProgress: {}
})
export const getters = {
getTasksByLibraryItemId: (state) => (libraryItemId) => {
return state.tasks.filter((t) => t.data?.libraryItemId === libraryItemId)
},
getRunningLibraryScanTask: (state) => (libraryId) => {
const libraryScanActions = ['library-scan', 'library-match-all']
return state.tasks.find((t) => libraryScanActions.includes(t.action) && t.data?.libraryId === libraryId && !t.isFinished)
},
getAudioFilesEncoding: (state) => (libraryItemId) => {
return state.audioFilesEncoding[libraryItemId]
},
getAudioFilesFinished: (state) => (libraryItemId) => {
return state.audioFilesFinished[libraryItemId]
},
getTaskProgress: (state) => (libraryItemId) => {
return state.taskProgress[libraryItemId]
}
}
export const actions = {}
export const mutations = {
updateAudioFilesEncoding(state, payload) {
if (!state.audioFilesEncoding[payload.libraryItemId]) {
Vue.set(state.audioFilesEncoding, payload.libraryItemId, {})
}
Vue.set(state.audioFilesEncoding[payload.libraryItemId], payload.ino, payload.progress)
},
updateAudioFilesFinished(state, payload) {
if (!state.audioFilesFinished[payload.libraryItemId]) {
Vue.set(state.audioFilesFinished, payload.libraryItemId, {})
}
Vue.set(state.audioFilesFinished[payload.libraryItemId], payload.ino, payload.finished)
},
updateTaskProgress(state, payload) {
Vue.set(state.taskProgress, payload.libraryItemId, payload.progress)
},
setTasks(state, tasks) {
state.tasks = tasks
},
addUpdateTask(state, task) {
const index = state.tasks.findIndex((d) => d.id === task.id)
if (index >= 0) {
state.tasks.splice(index, 1, task)
} else {
// Remove duplicate (only have one library item per action)
state.tasks = state.tasks.filter((_task) => {
if (!_task.data?.libraryItemId || _task.action !== task.action) return true
return _task.data.libraryItemId !== task.data.libraryItemId
})
state.tasks.push(task)
}
},
removeTask(state, task) {
state.tasks = state.tasks.filter((d) => d.id !== task.id)
},
setQueuedEmbedLIds(state, libraryItemIds) {
state.queuedEmbedLIds = libraryItemIds
},
addQueuedEmbedLId(state, libraryItemId) {
if (!state.queuedEmbedLIds.some((lid) => lid === libraryItemId)) {
state.queuedEmbedLIds.push(libraryItemId)
}
},
removeQueuedEmbedLId(state, libraryItemId) {
state.queuedEmbedLIds = state.queuedEmbedLIds.filter((lid) => lid !== libraryItemId)
}
}