mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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)
 | 
						|
  }
 | 
						|
}
 |