2021-09-01 20:07:11 -05:00
|
|
|
export const state = () => ({
|
|
|
|
user: null,
|
2021-11-19 20:00:34 -06:00
|
|
|
userAudiobookData: [],
|
2021-09-01 20:07:11 -05:00
|
|
|
settings: {
|
2021-12-04 19:56:29 -06:00
|
|
|
mobileOrderBy: 'addedAt',
|
2021-10-16 15:50:13 -05:00
|
|
|
mobileOrderDesc: true,
|
|
|
|
mobileFilterBy: 'all',
|
2021-09-01 20:07:11 -05:00
|
|
|
orderBy: 'book.title',
|
|
|
|
orderDesc: false,
|
|
|
|
filterBy: 'all',
|
|
|
|
playbackRate: 1,
|
|
|
|
bookshelfCoverSize: 120
|
|
|
|
},
|
2021-11-02 19:44:42 -05:00
|
|
|
settingsListeners: [],
|
2021-12-05 18:31:47 -06:00
|
|
|
userAudiobooksListeners: []
|
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
|
|
|
|
},
|
2022-03-23 17:59:14 -05:00
|
|
|
getUserLibraryItemProgress: (state) => (libraryItemId) => {
|
|
|
|
if (!state.user.libraryItemProgress) return null
|
|
|
|
return state.user.libraryItemProgress.find(li => li.id == libraryItemId)
|
|
|
|
},
|
2022-04-02 12:12:00 -05:00
|
|
|
getUserBookmarksForItem: (state) => (libraryItemId) => {
|
|
|
|
if (!state.user.bookmarks) return []
|
|
|
|
return state.user.bookmarks.filter(bm => bm.libraryItemId === libraryItemId)
|
|
|
|
},
|
2021-11-20 10:59:34 -06:00
|
|
|
getUserAudiobookData: (state, getters) => (audiobookId) => {
|
2021-12-04 19:56:29 -06:00
|
|
|
return getters.getUserAudiobook(audiobookId)
|
|
|
|
},
|
|
|
|
getUserAudiobook: (state, getters) => (audiobookId) => {
|
2021-11-19 20:00:34 -06:00
|
|
|
return state.userAudiobookData.find(uabd => uabd.audiobookId === audiobookId)
|
2021-10-16 15:50:13 -05:00
|
|
|
},
|
2021-09-01 20:07:11 -05:00
|
|
|
getUserSetting: (state) => (key) => {
|
|
|
|
return state.settings ? state.settings[key] || null : null
|
|
|
|
},
|
|
|
|
getFilterOrderKey: (state) => {
|
|
|
|
return Object.values(state.settings).join('-')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export const actions = {
|
2021-09-12 18:37:08 -05:00
|
|
|
async updateUserSettings({ commit }, payload) {
|
2021-09-21 07:11:59 -05:00
|
|
|
if (this.$server.connected) {
|
2021-09-12 18:37:08 -05:00
|
|
|
var updatePayload = {
|
|
|
|
...payload
|
2021-09-01 20:07:11 -05:00
|
|
|
}
|
2021-11-26 18:27:18 -06:00
|
|
|
return this.$axios.$patch('/api/me/settings', updatePayload).then((result) => {
|
2021-09-12 18:37:08 -05:00
|
|
|
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-11-14 19:59:34 -06:00
|
|
|
},
|
2021-12-05 18:31:47 -06:00
|
|
|
async loadOfflineUserAudiobookData({ state, commit }) {
|
|
|
|
var localUserAudiobookData = await this.$sqlStore.getAllUserAudiobookData() || []
|
|
|
|
if (localUserAudiobookData.length) {
|
|
|
|
console.log('loadOfflineUserAudiobookData found', localUserAudiobookData.length, 'user audiobook data')
|
|
|
|
commit('setAllUserAudiobookData', localUserAudiobookData)
|
|
|
|
} else {
|
|
|
|
console.log('loadOfflineUserAudiobookData No user audiobook data')
|
2021-11-14 19:59:34 -06:00
|
|
|
}
|
2021-11-19 20:00:34 -06:00
|
|
|
},
|
|
|
|
async syncUserAudiobookData({ state, commit }) {
|
|
|
|
if (!state.user) {
|
|
|
|
console.error('Sync user audiobook data invalid no user')
|
|
|
|
return
|
|
|
|
}
|
|
|
|
var localUserAudiobookData = await this.$sqlStore.getAllUserAudiobookData() || []
|
|
|
|
this.$axios.$post(`/api/syncUserAudiobookData`, { data: localUserAudiobookData }).then(async (abData) => {
|
|
|
|
console.log('Synced user audiobook data', abData)
|
|
|
|
await this.$sqlStore.setAllUserAudiobookData(abData)
|
|
|
|
}).catch((error) => {
|
|
|
|
console.error('Failed to sync user ab data', error)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
async updateUserAudiobookData({ state, commit }, uabdUpdate) {
|
|
|
|
var userAbData = state.userAudiobookData.find(uab => uab.audiobookId === uabdUpdate.audiobookId)
|
|
|
|
if (!userAbData) {
|
|
|
|
uabdUpdate.startedAt = Date.now()
|
|
|
|
this.$sqlStore.setUserAudiobookData(uabdUpdate)
|
|
|
|
} else {
|
|
|
|
var mergedUabData = { ...userAbData }
|
|
|
|
for (const key in uabdUpdate) {
|
|
|
|
mergedUabData[key] = uabdUpdate[key]
|
|
|
|
}
|
|
|
|
this.$sqlStore.setUserAudiobookData(mergedUabData)
|
|
|
|
}
|
2021-09-01 20:07:11 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export const mutations = {
|
2021-11-19 20:00:34 -06:00
|
|
|
setUserAudiobookData(state, abdata) {
|
|
|
|
var index = state.userAudiobookData.findIndex(uab => uab.audiobookId === abdata.audiobookId)
|
|
|
|
if (index >= 0) {
|
|
|
|
state.userAudiobookData.splice(index, 1, abdata)
|
|
|
|
} else {
|
|
|
|
state.userAudiobookData.push(abdata)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
removeUserAudiobookData(state, audiobookId) {
|
|
|
|
state.userAudiobookData = state.userAudiobookData.filter(uab => uab.audiobookId !== audiobookId)
|
|
|
|
},
|
|
|
|
setAllUserAudiobookData(state, allAbData) {
|
|
|
|
state.userAudiobookData = allAbData
|
|
|
|
},
|
2021-09-01 20:07:11 -05:00
|
|
|
setUser(state, user) {
|
|
|
|
state.user = user
|
|
|
|
if (user) {
|
2021-09-12 18:37:08 -05:00
|
|
|
if (user.token) this.$localStore.setToken(user.token)
|
2021-09-01 20:07:11 -05:00
|
|
|
console.log('setUser', user.username)
|
|
|
|
} else {
|
2021-09-12 18:37:08 -05:00
|
|
|
this.$localStore.setToken(null)
|
2021-09-01 20:07:11 -05:00
|
|
|
console.warn('setUser cleared')
|
|
|
|
}
|
|
|
|
},
|
|
|
|
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) {
|
2021-09-12 18:37:08 -05:00
|
|
|
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-11-02 19:44:42 -05:00
|
|
|
},
|
|
|
|
addUserAudiobookListener(state, listener) {
|
|
|
|
var index = state.userAudiobooksListeners.findIndex(l => l.id === listener.id)
|
|
|
|
if (index >= 0) state.userAudiobooksListeners.splice(index, 1, listener)
|
|
|
|
else state.userAudiobooksListeners.push(listener)
|
|
|
|
},
|
|
|
|
removeUserAudiobookListener(state, listenerId) {
|
|
|
|
state.userAudiobooksListeners = state.userAudiobooksListeners.filter(l => l.id !== listenerId)
|
2021-12-05 18:31:47 -06:00
|
|
|
}
|
2021-09-01 20:07:11 -05:00
|
|
|
}
|