mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-28 09:38:56 +01:00
184 lines
5.1 KiB
JavaScript
184 lines
5.1 KiB
JavaScript
import { checkForUpdate } from '@/plugins/version'
|
|
import Vue from 'vue'
|
|
|
|
export const state = () => ({
|
|
versionData: null,
|
|
serverSettings: null,
|
|
streamAudiobook: null,
|
|
editModalTab: 'details',
|
|
showEditModal: false,
|
|
showEReader: false,
|
|
selectedAudiobook: null,
|
|
selectedAudiobookFile: null,
|
|
developerMode: false,
|
|
selectedAudiobooks: [],
|
|
processingBatch: false,
|
|
previousPath: '/',
|
|
routeHistory: [],
|
|
isRoutingBack: false,
|
|
showExperimentalFeatures: false,
|
|
backups: [],
|
|
bookshelfBookIds: [],
|
|
openModal: null,
|
|
selectedBookshelfTexture: '/textures/wood_default.jpg'
|
|
})
|
|
|
|
export const getters = {
|
|
getIsAudiobookSelected: state => audiobookId => {
|
|
return !!state.selectedAudiobooks.includes(audiobookId)
|
|
},
|
|
getServerSetting: state => key => {
|
|
if (!state.serverSettings) return null
|
|
return state.serverSettings[key]
|
|
},
|
|
getBookCoverAspectRatio: state => {
|
|
if (!state.serverSettings || !state.serverSettings.coverAspectRatio) return 1.6
|
|
return state.serverSettings.coverAspectRatio === 0 ? 1.6 : 1
|
|
},
|
|
getNumAudiobooksSelected: state => state.selectedAudiobooks.length,
|
|
getAudiobookIdStreaming: state => {
|
|
return state.streamAudiobook ? state.streamAudiobook.id : null
|
|
}
|
|
}
|
|
|
|
export const actions = {
|
|
updateServerSettings({ commit }, payload) {
|
|
var updatePayload = {
|
|
...payload
|
|
}
|
|
return this.$axios.$patch('/api/serverSettings', updatePayload).then((result) => {
|
|
if (result.success) {
|
|
commit('setServerSettings', result.serverSettings)
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}).catch((error) => {
|
|
console.error('Failed to update server settings', error)
|
|
return false
|
|
})
|
|
},
|
|
checkForUpdate({ commit }) {
|
|
return checkForUpdate()
|
|
.then((res) => {
|
|
commit('setVersionData', res)
|
|
return res
|
|
})
|
|
.catch((error) => {
|
|
console.error('Update check failed', error)
|
|
return false
|
|
})
|
|
},
|
|
popRoute({ commit, state }) {
|
|
if (!state.routeHistory.length) {
|
|
return null
|
|
}
|
|
var _history = [...state.routeHistory]
|
|
var last = _history.pop()
|
|
commit('setRouteHistory', _history)
|
|
return last
|
|
},
|
|
setBookshelfTexture({ commit, state }, img) {
|
|
let root = document.documentElement;
|
|
commit('setBookshelfTexture', img)
|
|
root.style.setProperty('--bookshelf-texture-img', `url(${img})`);
|
|
}
|
|
}
|
|
|
|
export const mutations = {
|
|
setBookshelfBookIds(state, val) {
|
|
state.bookshelfBookIds = val || []
|
|
},
|
|
setRouteHistory(state, val) {
|
|
state.routeHistory = val
|
|
},
|
|
setIsRoutingBack(state, val) {
|
|
state.isRoutingBack = val
|
|
},
|
|
setPreviousPath(state, val) {
|
|
state.previousPath = val
|
|
},
|
|
setVersionData(state, versionData) {
|
|
state.versionData = versionData
|
|
},
|
|
setServerSettings(state, settings) {
|
|
if (!settings) return
|
|
state.serverSettings = settings
|
|
},
|
|
setStreamAudiobook(state, audiobook) {
|
|
state.streamAudiobook = audiobook
|
|
},
|
|
showEditModal(state, audiobook) {
|
|
state.editModalTab = 'details'
|
|
state.selectedAudiobook = audiobook
|
|
state.showEditModal = true
|
|
},
|
|
showEditModalOnTab(state, { audiobook, tab }) {
|
|
state.editModalTab = tab
|
|
state.selectedAudiobook = audiobook
|
|
state.showEditModal = true
|
|
},
|
|
setEditModalTab(state, tab) {
|
|
state.editModalTab = tab
|
|
},
|
|
setShowEditModal(state, val) {
|
|
state.showEditModal = val
|
|
},
|
|
showEReader(state, audiobook) {
|
|
state.selectedAudiobookFile = null
|
|
state.selectedAudiobook = audiobook
|
|
|
|
state.showEReader = true
|
|
},
|
|
showEReaderForFile(state, { audiobook, file }) {
|
|
state.selectedAudiobookFile = file
|
|
state.selectedAudiobook = audiobook
|
|
|
|
state.showEReader = true
|
|
},
|
|
setShowEReader(state, val) {
|
|
state.showEReader = val
|
|
},
|
|
setDeveloperMode(state, val) {
|
|
state.developerMode = val
|
|
},
|
|
setSelectedAudiobook(state, val) {
|
|
Vue.set(state, 'selectedAudiobook', val)
|
|
},
|
|
setSelectedAudiobooks(state, audiobooks) {
|
|
Vue.set(state, 'selectedAudiobooks', audiobooks)
|
|
},
|
|
toggleAudiobookSelected(state, audiobookId) {
|
|
if (state.selectedAudiobooks.includes(audiobookId)) {
|
|
state.selectedAudiobooks = state.selectedAudiobooks.filter(a => a !== audiobookId)
|
|
} else {
|
|
var newSel = state.selectedAudiobooks.concat([audiobookId])
|
|
Vue.set(state, 'selectedAudiobooks', newSel)
|
|
}
|
|
},
|
|
setAudiobookSelected(state, { audiobookId, selected }) {
|
|
var isThere = state.selectedAudiobooks.includes(audiobookId)
|
|
if (isThere && !selected) {
|
|
state.selectedAudiobooks = state.selectedAudiobooks.filter(a => a !== audiobookId)
|
|
} else if (selected && !isThere) {
|
|
var newSel = state.selectedAudiobooks.concat([audiobookId])
|
|
Vue.set(state, 'selectedAudiobooks', newSel)
|
|
}
|
|
},
|
|
setProcessingBatch(state, val) {
|
|
state.processingBatch = val
|
|
},
|
|
setExperimentalFeatures(state, val) {
|
|
state.showExperimentalFeatures = val
|
|
localStorage.setItem('experimental', val ? 1 : 0)
|
|
},
|
|
setBackups(state, val) {
|
|
state.backups = val.sort((a, b) => b.createdAt - a.createdAt)
|
|
},
|
|
setOpenModal(state, val) {
|
|
state.openModal = val
|
|
},
|
|
setBookshelfTexture(state, val) {
|
|
state.selectedBookshelfTexture = val
|
|
}
|
|
} |