mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2026-08-29 14:47:21 +02:00
Fix: more sync issues, Add: link audiobooks with folder names in selected download folder
This commit is contained in:
+5
-4
@@ -1,4 +1,3 @@
|
||||
import MyNativeAudio from '@/plugins/my-native-audio'
|
||||
import { sort } from '@/assets/fastSort'
|
||||
import { decode } from '@/plugins/init.client'
|
||||
|
||||
@@ -38,7 +37,7 @@ export const getters = {
|
||||
else if (group === 'authors') filtered = filtered.filter(ab => ab.book && ab.book.author === filter)
|
||||
else if (group === 'progress') {
|
||||
filtered = filtered.filter(ab => {
|
||||
var userAudiobook = rootGetters['user/getUserAudiobook'](ab.id)
|
||||
var userAudiobook = rootGetters['user/getUserAudiobookData'](ab.id)
|
||||
var isRead = userAudiobook && userAudiobook.isRead
|
||||
if (filter === 'Read' && isRead) return true
|
||||
if (filter === 'Unread' && !isRead) return true
|
||||
@@ -57,7 +56,7 @@ export const getters = {
|
||||
|
||||
if (settings.mobileOrderBy === 'recent') {
|
||||
return sort(filtered)[direction]((ab) => {
|
||||
var abprogress = rootGetters['user/getMostRecentUserAudiobookData'](ab.id)
|
||||
var abprogress = rootGetters['user/getUserAudiobookData'](ab.id)
|
||||
if (!abprogress) return 0
|
||||
return abprogress.lastUpdate
|
||||
})
|
||||
@@ -142,7 +141,7 @@ export const getters = {
|
||||
}
|
||||
|
||||
export const actions = {
|
||||
load({ state, commit, rootState }) {
|
||||
load({ state, commit, dispatch, rootState }) {
|
||||
if (!rootState.user || !rootState.user.user) {
|
||||
console.error('audiobooks/load - User not set')
|
||||
return false
|
||||
@@ -169,6 +168,8 @@ export const actions = {
|
||||
commit('set', data)
|
||||
commit('setLastLoad')
|
||||
commit('setLoading', false)
|
||||
|
||||
dispatch('downloads/linkOrphanDownloads', data, { root: true })
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Failed', error)
|
||||
|
||||
+49
-1
@@ -1,6 +1,9 @@
|
||||
import { Capacitor } from '@capacitor/core'
|
||||
|
||||
export const state = () => ({
|
||||
downloads: [],
|
||||
showModal: false
|
||||
showModal: false,
|
||||
mediaScanResults: {},
|
||||
})
|
||||
|
||||
export const getters = {
|
||||
@@ -28,6 +31,48 @@ export const actions = {
|
||||
ab.isPreparing = false
|
||||
commit('setDownload', ab)
|
||||
})
|
||||
},
|
||||
linkOrphanDownloads({ state, commit }, audiobooks) {
|
||||
if (!state.mediaScanResults || !state.mediaScanResults.folders) {
|
||||
return
|
||||
}
|
||||
console.log('Link orphan downloads', JSON.stringify(state.mediaScanResults.folders))
|
||||
state.mediaScanResults.folders.forEach((folder) => {
|
||||
if (!folder.files || !folder.files.length) return
|
||||
|
||||
console.log('Link orphan downloads check folder', folder.name)
|
||||
|
||||
var download = state.downloads.find(dl => dl.folderName === folder.name)
|
||||
if (!download) {
|
||||
var matchingAb = audiobooks.find(ab => ab.book.title === folder.name)
|
||||
if (matchingAb) {
|
||||
// Found matching download for ab
|
||||
var audioFile = folder.files.find(f => f.isAudio)
|
||||
if (!audioFile) {
|
||||
return
|
||||
}
|
||||
var coverImg = folder.files.find(f => !f.isAudio)
|
||||
const downloadObj = {
|
||||
id: matchingAb.id,
|
||||
audiobook: { ...matchingAb },
|
||||
contentUrl: audioFile.uri,
|
||||
simplePath: audioFile.simplePath,
|
||||
folderUrl: folder.uri,
|
||||
folderName: folder.name,
|
||||
storageType: '',
|
||||
storageId: '',
|
||||
basePath: '',
|
||||
size: audioFile.size,
|
||||
coverUrl: coverImg ? coverImg.uri : null,
|
||||
cover: coverImg ? Capacitor.convertFileSrc(coverImg.uri) : null,
|
||||
coverSize: coverImg ? coverImg.size : 0,
|
||||
coverBasePath: ''
|
||||
}
|
||||
console.log('Linking orphan download: ' + JSON.stringify(downloadObj))
|
||||
commit('addUpdateDownload', downloadObj)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,5 +106,8 @@ export const mutations = {
|
||||
removeDownload(state, download) {
|
||||
state.downloads = state.downloads.filter(d => d.id !== download.id)
|
||||
this.$sqlStore.removeDownload(download.id)
|
||||
},
|
||||
setMediaScanResults(state, val) {
|
||||
state.mediaScanResults = val
|
||||
}
|
||||
}
|
||||
+1
-4
@@ -15,7 +15,7 @@ export const state = () => ({
|
||||
selectedBook: null,
|
||||
showReader: false,
|
||||
downloadFolder: null,
|
||||
mediaScanResults: {},
|
||||
|
||||
showSideDrawer: false,
|
||||
bookshelfView: 'grid'
|
||||
})
|
||||
@@ -100,9 +100,6 @@ export const mutations = {
|
||||
setDownloadFolder(state, val) {
|
||||
state.downloadFolder = val
|
||||
},
|
||||
setMediaScanResults(state, val) {
|
||||
state.mediaScanResults = val
|
||||
},
|
||||
setShowSideDrawer(state, val) {
|
||||
state.showSideDrawer = val
|
||||
},
|
||||
|
||||
+1
-25
@@ -1,7 +1,6 @@
|
||||
export const state = () => ({
|
||||
user: null,
|
||||
userAudiobookData: [],
|
||||
localUserAudiobooks: {},
|
||||
settings: {
|
||||
mobileOrderBy: 'recent',
|
||||
mobileOrderDesc: true,
|
||||
@@ -23,19 +22,8 @@ export const getters = {
|
||||
getToken: (state) => {
|
||||
return state.user ? state.user.token : null
|
||||
},
|
||||
getUserAudiobook: (state) => (audiobookId) => {
|
||||
return state.user && state.user.audiobooks ? state.user.audiobooks[audiobookId] || null : null
|
||||
},
|
||||
getLocalUserAudiobook: (state) => (audiobookId) => {
|
||||
return state.localUserAudiobooks ? state.localUserAudiobooks[audiobookId] || null : null
|
||||
},
|
||||
getMostRecentUserAudiobookData: (state, getters) => (audiobookId) => {
|
||||
getUserAudiobookData: (state, getters) => (audiobookId) => {
|
||||
return state.userAudiobookData.find(uabd => uabd.audiobookId === audiobookId)
|
||||
// var userAb = getters.getUserAudiobook(audiobookId)
|
||||
// var localUserAb = getters.getLocalUserAudiobook(audiobookId)
|
||||
// if (!localUserAb) return userAb
|
||||
// if (!userAb) return localUserAb
|
||||
// return localUserAb.lastUpdate > userAb.lastUpdate ? localUserAb : userAb
|
||||
},
|
||||
getUserSetting: (state) => (key) => {
|
||||
return state.settings ? state.settings[key] || null : null
|
||||
@@ -131,18 +119,6 @@ export const mutations = {
|
||||
setAllUserAudiobookData(state, allAbData) {
|
||||
state.userAudiobookData = allAbData
|
||||
},
|
||||
setLocalUserAudiobooks(state, userAudiobooks) {
|
||||
// state.localUserAudiobooks = userAudiobooks
|
||||
// state.userAudiobooksListeners.forEach((listener) => {
|
||||
// listener.meth()
|
||||
// })
|
||||
},
|
||||
setUserAudiobooks(state, userAudiobooks) {
|
||||
if (!state.user) return
|
||||
state.user.audiobooks = {
|
||||
...userAudiobooks
|
||||
}
|
||||
},
|
||||
setUser(state, user) {
|
||||
state.user = user
|
||||
if (user) {
|
||||
|
||||
Reference in New Issue
Block a user