advplyr.audiobookshelf-app/store/libraries.js

172 lines
5 KiB
JavaScript
Raw Normal View History

const { BookCoverAspectRatio } = require('../plugins/constants')
export const state = () => ({
libraries: [],
lastLoad: 0,
2022-01-16 14:14:02 -06:00
currentLibraryId: '',
showModal: false,
2021-12-04 19:56:29 -06:00
issues: 0,
filterData: null
})
export const getters = {
getCurrentLibrary: state => {
return state.libraries.find(lib => lib.id === state.currentLibraryId)
2021-12-04 19:56:29 -06:00
},
getCurrentLibraryName: (state, getters) => {
var currLib = getters.getCurrentLibrary
return currLib ? currLib.name : null
},
getCurrentLibraryMediaType: (state, getters) => {
var currLib = getters.getCurrentLibrary
return currLib ? currLib.mediaType : null
},
getCurrentLibrarySettings: (state, getters) => {
if (!getters.getCurrentLibrary) return null
return getters.getCurrentLibrary.settings
},
getBookCoverAspectRatio: (state, getters) => {
if (!getters.getCurrentLibrarySettings || isNaN(getters.getCurrentLibrarySettings.coverAspectRatio)) return 1
return getters.getCurrentLibrarySettings.coverAspectRatio === BookCoverAspectRatio.STANDARD ? 1.6 : 1
}
}
export const actions = {
fetch({ state, commit, dispatch, rootState }, libraryId) {
if (!rootState.user || !rootState.user.user) {
console.error('libraries/fetch - User not set')
return false
}
return this.$axios
2021-12-04 19:56:29 -06:00
.$get(`/api/libraries/${libraryId}?include=filterdata`)
.then((data) => {
2021-12-04 19:56:29 -06:00
var library = data.library
var filterData = data.filterdata
var issues = data.issues || 0
dispatch('user/checkUpdateLibrarySortFilter', library.mediaType, { root: true })
2021-12-04 19:56:29 -06:00
commit('addUpdate', library)
commit('setLibraryIssues', issues)
commit('setLibraryFilterData', filterData)
commit('setCurrentLibrary', libraryId)
return data
})
.catch((error) => {
console.error('Failed', error)
return false
})
},
// Return true if calling load
load({ state, commit, rootState }) {
if (!rootState.user || !rootState.user.user) {
console.error('libraries/load - User not set')
return false
}
// Don't load again if already loaded in the last 5 minutes
var lastLoadDiff = Date.now() - state.lastLoad
if (lastLoadDiff < 5 * 60 * 1000) {
// Already up to date
return false
}
2022-01-16 14:14:02 -06:00
return this.$axios
.$get(`/api/libraries`)
.then((data) => {
// Set current library if not already set or was not returned in results
if (data.length && (!state.currentLibraryId || !data.find(li => li.id == state.currentLibraryId))) {
2022-01-16 14:14:02 -06:00
commit('setCurrentLibrary', data[0].id)
}
commit('set', data)
commit('setLastLoad', Date.now())
2022-01-16 14:14:02 -06:00
return true
})
.catch((error) => {
console.error('Failed', error)
commit('set', [])
2022-01-16 14:14:02 -06:00
return false
})
},
}
export const mutations = {
setShowModal(state, val) {
state.showModal = val
},
setLastLoad(state, val) {
state.lastLoad = val
},
reset(state) {
state.lastLoad = 0
state.currentLibraryId = null
state.libraries = []
},
setCurrentLibrary(state, val) {
state.currentLibraryId = val
},
set(state, libraries) {
state.libraries = libraries
},
addUpdate(state, library) {
var index = state.libraries.findIndex(a => a.id === library.id)
if (index >= 0) {
state.libraries.splice(index, 1, library)
} else {
state.libraries.push(library)
}
},
remove(state, library) {
state.libraries = state.libraries.filter(a => a.id !== library.id)
2021-12-04 19:56:29 -06:00
},
setLibraryIssues(state, val) {
state.issues = val
},
setLibraryFilterData(state, filterData) {
state.filterData = filterData
},
updateFilterDataWithAudiobook(state, audiobook) {
if (!audiobook || !audiobook.book || !state.filterData) return
if (state.currentLibraryId !== audiobook.libraryId) return
/*
var filterdata = {
authors: [],
genres: [],
tags: [],
series: [],
narrators: []
}
*/
if (audiobook.book.authorFL) {
audiobook.book.authorFL.split(', ').forEach((author) => {
if (author && !state.filterData.authors.includes(author)) {
state.filterData.authors.push(author)
}
})
}
if (audiobook.book.narratorFL) {
audiobook.book.narratorFL.split(', ').forEach((narrator) => {
if (narrator && !state.filterData.narrators.includes(narrator)) {
state.filterData.narrators.push(narrator)
}
})
}
if (audiobook.book.series && !state.filterData.series.includes(audiobook.book.series)) {
state.filterData.series.push(audiobook.book.series)
}
if (audiobook.tags && audiobook.tags.length) {
audiobook.tags.forEach((tag) => {
if (tag && !state.filterData.tags.includes(tag)) state.filterData.tags.push(tag)
})
}
if (audiobook.book.genres && audiobook.book.genres.length) {
audiobook.book.genres.forEach((genre) => {
if (genre && !state.filterData.genres.includes(genre)) state.filterData.genres.push(genre)
})
}
}
}