Add keep local media progress and playback sessions, update data models to support syncing local progress and support for podcast episodes

This commit is contained in:
advplyr
2022-04-09 12:03:37 -05:00
parent 526fca98b9
commit d9e4469089
23 changed files with 295 additions and 118 deletions
+34 -6
View File
@@ -13,7 +13,7 @@ class AbsDatabaseWeb extends WebPlugin {
const deviceData = {
serverConnectionConfigs: [],
lastServerConnectionConfigId: null,
localLibraryItemIdPlaying: null
currentLocalPlaybackSession: null
}
return deviceData
}
@@ -26,6 +26,7 @@ class AbsDatabaseWeb extends WebPlugin {
deviceData.lastServerConnectionConfigId = ssc.id
ssc.name = `${ssc.address} (${serverConnectionConfig.username})`
ssc.token = serverConnectionConfig.token
ssc.userId = serverConnectionConfig.userId
ssc.username = serverConnectionConfig.username
localStorage.setItem('device', JSON.stringify(deviceData))
} else {
@@ -33,6 +34,7 @@ class AbsDatabaseWeb extends WebPlugin {
id: encodeURIComponent(Buffer.from(`${serverConnectionConfig.address}@${serverConnectionConfig.username}`).toString('base64')),
index: deviceData.serverConnectionConfigs.length,
name: `${serverConnectionConfig.address} (${serverConnectionConfig.username})`,
userId: serverConnectionConfig.userId,
username: serverConnectionConfig.username,
address: serverConnectionConfig.address,
token: serverConnectionConfig.token
@@ -62,7 +64,7 @@ class AbsDatabaseWeb extends WebPlugin {
//
async getLocalFolders() {
return {
folders: [
value: [
{
id: 'test1',
name: 'Audiobooks',
@@ -76,11 +78,11 @@ class AbsDatabaseWeb extends WebPlugin {
}
}
async getLocalFolder({ folderId }) {
return this.getLocalFolders().then((data) => data.folders[0])
return this.getLocalFolders().then((data) => data.value[0])
}
async getLocalLibraryItems(payload) {
return {
localLibraryItems: [{
value: [{
id: 'local_test',
libraryItemId: 'test34',
folderId: 'test1',
@@ -133,10 +135,36 @@ class AbsDatabaseWeb extends WebPlugin {
return this.getLocalLibraryItems()
}
async getLocalLibraryItem({ id }) {
return this.getLocalLibraryItems().then((data) => data.localLibraryItems[0])
return this.getLocalLibraryItems().then((data) => data.value[0])
}
async getLocalLibraryItemByLLId({ libraryItemId }) {
return this.getLocalLibraryItems().then((data) => data.localLibraryItems.find(lli => lli.libraryItemId == libraryItemId))
return this.getLocalLibraryItems().then((data) => data.value.find(lli => lli.libraryItemId == libraryItemId))
}
async getAllLocalMediaProgress() {
return {
value: [
{
id: 'local_test',
localLibraryItemId: 'local_test',
episodeId: null,
duration: 100,
progress: 0.5,
currentTime: 50,
isFinished: false,
lastUpdate: 394089090,
startedAt: 239048209,
finishedAt: null,
// For local lib items from server to support server sync
// var serverConnectionConfigId:String?,
// var serverAddress:String?,
// var serverUserId:String?,
// var libraryItemId:String?
}
]
}
}
async removeLocalMediaProgress({ localMediaProgressId }) {
return null
}
}
+11 -21
View File
@@ -52,13 +52,7 @@ class DbService {
}
getLocalFolders() {
return AbsDatabase.getLocalFolders().then((data) => {
console.log('Loaded local folders', JSON.stringify(data))
if (data.folders && typeof data.folders == 'string') {
return JSON.parse(data.folders)
}
return data.folders
}).catch((error) => {
return AbsDatabase.getLocalFolders().then((data) => data.value).catch((error) => {
console.error('Failed to load', error)
return null
})
@@ -72,23 +66,11 @@ class DbService {
}
getLocalLibraryItemsInFolder(folderId) {
return AbsDatabase.getLocalLibraryItemsInFolder({ folderId }).then((data) => {
console.log('Loaded local library items in folder', JSON.stringify(data))
if (data.localLibraryItems && typeof data.localLibraryItems == 'string') {
return JSON.parse(data.localLibraryItems)
}
return data.localLibraryItems
})
return AbsDatabase.getLocalLibraryItemsInFolder({ folderId }).then((data) => data.value)
}
getLocalLibraryItems(mediaType = null) {
return AbsDatabase.getLocalLibraryItems({ mediaType }).then((data) => {
console.log('Loaded all local media items', JSON.stringify(data))
if (data.localLibraryItems && typeof data.localLibraryItems == 'string') {
return JSON.parse(data.localLibraryItems)
}
return data.localLibraryItems
})
return AbsDatabase.getLocalLibraryItems({ mediaType }).then((data) => data.value)
}
getLocalLibraryItem(id) {
@@ -98,6 +80,14 @@ class DbService {
getLocalLibraryItemByLLId(libraryItemId) {
return AbsDatabase.getLocalLibraryItemByLLId({ libraryItemId })
}
getAllLocalMediaProgress() {
return AbsDatabase.getAllLocalMediaProgress().then((data) => data.value)
}
removeLocalMediaProgress(localMediaProgressId) {
return AbsDatabase.removeLocalMediaProgress({ localMediaProgressId })
}
}
export default ({ app, store }, inject) => {