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) } }