Fix: more sync issues, Add: link audiobooks with folder names in selected download folder

This commit is contained in:
advplyr
2021-11-20 10:59:34 -06:00
parent 3b6e7e1ce2
commit f40e971b90
15 changed files with 95 additions and 293 deletions
+5 -4
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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) {