advplyr.audiobookshelf-app/store/user.js

120 lines
3.6 KiB
JavaScript
Raw Normal View History

2021-09-01 20:07:11 -05:00
export const state = () => ({
user: null,
serverConnectionConfig: null,
2021-09-01 20:07:11 -05:00
settings: {
2021-12-04 19:56:29 -06:00
mobileOrderBy: 'addedAt',
mobileOrderDesc: true,
mobileFilterBy: 'all',
2021-09-01 20:07:11 -05:00
orderBy: 'book.title',
orderDesc: false,
filterBy: 'all',
playbackRate: 1,
bookshelfCoverSize: 120
},
settingsListeners: []
2021-09-01 20:07:11 -05:00
})
export const getters = {
getIsRoot: (state) => state.user && state.user.type === 'root',
getToken: (state) => {
return state.user ? state.user.token : null
},
getServerAddress: (state) => {
return state.serverConnectionConfig ? state.serverConnectionConfig.address : null
},
getUserMediaProgress: (state) => (libraryItemId, episodeId = null) => {
if (!state.user || !state.user.mediaProgress) return null
return state.user.mediaProgress.find(li => {
if (episodeId && li.episodeId !== episodeId) return false
return li.libraryItemId == libraryItemId
})
},
getUserBookmarksForItem: (state) => (libraryItemId) => {
if (!state.user.bookmarks) return []
return state.user.bookmarks.filter(bm => bm.libraryItemId === libraryItemId)
},
2021-09-01 20:07:11 -05:00
getUserSetting: (state) => (key) => {
return state.settings ? state.settings[key] || null : null
},
getUserCanDownload: (state) => {
return state.user && state.user.permissions ? !!state.user.permissions.download : false
2021-09-01 20:07:11 -05:00
}
}
export const actions = {
async updateUserSettings({ state, commit }, payload) {
if (state.serverConnectionConfig) {
var updatePayload = {
...payload
2021-09-01 20:07:11 -05:00
}
return this.$axios.$patch('/api/me/settings', updatePayload).then((result) => {
if (result.success) {
commit('setSettings', result.settings)
return true
} else {
return false
}
}).catch((error) => {
console.error('Failed to update settings', error)
return false
})
} else {
console.log('Update settings without server')
commit('setSettings', payload)
}
2021-09-01 20:07:11 -05:00
}
}
export const mutations = {
logout(state) {
state.user = null
state.serverConnectionConfig = null
},
setUser(state, user) {
state.user = user
},
2022-04-09 20:29:59 -05:00
removeMediaProgress(state, id) {
if (!state.user) return
state.user.mediaProgress = state.user.mediaProgress.filter(mp => mp.id != id)
},
2022-04-15 20:48:39 -05:00
updateUserMediaProgress(state, data) {
if (!data || !state.user) return
var mediaProgressIndex = state.user.mediaProgress.findIndex(mp => mp.id === data.id)
if (mediaProgressIndex >= 0) {
state.user.mediaProgress.splice(mediaProgressIndex, 1, data)
} else {
state.user.mediaProgress.push(data)
}
},
setServerConnectionConfig(state, serverConnectionConfig) {
state.serverConnectionConfig = serverConnectionConfig
},
2021-09-01 20:07:11 -05:00
setSettings(state, settings) {
if (!settings) return
var hasChanges = false
for (const key in settings) {
if (state.settings[key] !== settings[key]) {
2021-12-04 19:56:29 -06:00
if (key === 'mobileOrderBy' && settings[key] === 'recent') {
settings[key] = 'addedAt'
}
2021-09-01 20:07:11 -05:00
hasChanges = true
state.settings[key] = settings[key]
}
}
if (hasChanges) {
this.$localStore.setUserSettings({ ...state.settings })
2021-09-01 20:07:11 -05:00
state.settingsListeners.forEach((listener) => {
listener.meth(state.settings)
})
}
},
addSettingsListener(state, listener) {
var index = state.settingsListeners.findIndex(l => l.id === listener.id)
if (index >= 0) state.settingsListeners.splice(index, 1, listener)
else state.settingsListeners.push(listener)
},
removeSettingsListener(state, listenerId) {
state.settingsListeners = state.settingsListeners.filter(l => l.id !== listenerId)
}
2021-09-01 20:07:11 -05:00
}