mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-01-02 17:19:36 +00:00
New data model Book media type contains Audiobooks updates
This commit is contained in:
parent
1dde02b170
commit
c4eeb1cfb7
30 changed files with 347 additions and 247 deletions
|
|
@ -245,6 +245,27 @@ async function migrateLibraryItems(db) {
|
|||
|
||||
var libraryItems = audiobooks.map((ab) => makeLibraryItemFromOldAb(ab))
|
||||
|
||||
// User library item progress was using the auidobook ID when migrated
|
||||
// now that library items are created the LibraryItemProgress objects
|
||||
// need the library item id to be set
|
||||
for (const user of db.users) {
|
||||
if (user.libraryItemProgress.length) {
|
||||
user.libraryItemProgress = user.libraryItemProgress.map(lip => {
|
||||
var audiobookId = lip.id
|
||||
var libraryItemWithAudiobook = libraryItems.find(li => li.media.getAudiobookById && !!li.media.getAudiobookById(audiobookId))
|
||||
if (!libraryItemWithAudiobook) {
|
||||
Logger.error('[dbMigration] Failed to find library item with audiobook id', audiobookId)
|
||||
return null
|
||||
}
|
||||
lip.id = libraryItemWithAudiobook.id
|
||||
lip.libraryItemId = libraryItemWithAudiobook.id
|
||||
return lip
|
||||
}).filter(lip => !!lip)
|
||||
await db.updateEntity('user', user)
|
||||
Logger.debug(`>>> User ${user.username} with ${user.libraryItemProgress.length} progress entries were updated`)
|
||||
}
|
||||
}
|
||||
|
||||
Logger.info(`>>> ${libraryItems.length} Library Items made`)
|
||||
await db.insertEntities('libraryItem', libraryItems)
|
||||
if (authorsToAdd.length) {
|
||||
|
|
@ -286,8 +307,9 @@ function cleanUserObject(db, userObj) {
|
|||
|
||||
var userAudiobookData = new UserAudiobookData(userObj.audiobooks[audiobookId]) // Legacy object
|
||||
var liProgress = new LibraryItemProgress() // New Progress Object
|
||||
liProgress.id = userAudiobookData.audiobookId
|
||||
liProgress.id = userAudiobookData.audiobookId // This ID is INCORRECT, will be updated when library item is created
|
||||
liProgress.libraryItemId = userAudiobookData.audiobookId
|
||||
liProgress.isFinished = !!userAudiobookData.isRead
|
||||
Object.keys(liProgress.toJSON()).forEach((key) => {
|
||||
if (userAudiobookData[key] !== undefined) {
|
||||
liProgress[key] = userAudiobookData[key]
|
||||
|
|
|
|||
|
|
@ -194,21 +194,21 @@ module.exports = {
|
|||
})
|
||||
},
|
||||
|
||||
getBooksWithUserAudiobook(user, books) {
|
||||
return books.map(book => {
|
||||
getItemsWithUserProgress(user, libraryItems) {
|
||||
return libraryItems.map(li => {
|
||||
return {
|
||||
userAudiobook: user.getLibraryItemProgress(book.id),
|
||||
book
|
||||
userProgress: user.getLibraryItemProgress(li.id),
|
||||
libraryItem: li
|
||||
}
|
||||
}).filter(b => !!b.userAudiobook)
|
||||
}).filter(b => !!b.userProgress)
|
||||
},
|
||||
|
||||
getBooksMostRecentlyRead(booksWithUserAb, limit, minified = false) {
|
||||
var booksWithProgress = booksWithUserAb.filter((data) => data.userAudiobook && data.userAudiobook.progress > 0 && !data.userAudiobook.isRead)
|
||||
booksWithProgress.sort((a, b) => {
|
||||
return b.userAudiobook.lastUpdate - a.userAudiobook.lastUpdate
|
||||
getItemsMostRecentlyListened(itemsWithUserProgress, limit, minified = false) {
|
||||
var itemsInProgress = itemsWithUserProgress.filter((data) => data.userProgress && data.userProgress.progress > 0 && !data.userProgress.isFinished)
|
||||
itemsInProgress.sort((a, b) => {
|
||||
return b.userProgress.lastUpdate - a.userProgress.lastUpdate
|
||||
})
|
||||
return booksWithProgress.map(b => minified ? b.book.toJSONMinified() : b.book.toJSONExpanded()).slice(0, limit)
|
||||
return itemsInProgress.map(b => minified ? b.libraryItem.toJSONMinified() : b.libraryItem.toJSONExpanded()).slice(0, limit)
|
||||
},
|
||||
|
||||
getBooksNextInSeries(seriesWithUserAb, limit, minified = false) {
|
||||
|
|
@ -223,17 +223,17 @@ module.exports = {
|
|||
return booksNextInSeries.sort((a, b) => { return b.DateLastReadSeries - a.DateLastReadSeries }).map(b => minified ? b.book.toJSONMinified() : b.book.toJSONExpanded()).slice(0, limit)
|
||||
},
|
||||
|
||||
getBooksMostRecentlyAdded(books, limit, minified = false) {
|
||||
var booksSortedByAddedAt = sort(books).desc(book => book.addedAt)
|
||||
return booksSortedByAddedAt.map(b => minified ? b.toJSONMinified() : b.toJSONExpanded()).slice(0, limit)
|
||||
getItemsMostRecentlyAdded(libraryItems, limit, minified = false) {
|
||||
var itemsSortedByAddedAt = sort(libraryItems).desc(li => li.addedAt)
|
||||
return itemsSortedByAddedAt.map(b => minified ? b.toJSONMinified() : b.toJSONExpanded()).slice(0, limit)
|
||||
},
|
||||
|
||||
getBooksMostRecentlyFinished(booksWithUserAb, limit, minified = false) {
|
||||
var booksRead = booksWithUserAb.filter((data) => data.userAudiobook && data.userAudiobook.isRead)
|
||||
booksRead.sort((a, b) => {
|
||||
return b.userAudiobook.finishedAt - a.userAudiobook.finishedAt
|
||||
getItemsMostRecentlyFinished(itemsWithUserProgress, limit, minified = false) {
|
||||
var itemsFinished = itemsWithUserProgress.filter((data) => data.userProgress && data.userProgress.isFinished)
|
||||
itemsFinished.sort((a, b) => {
|
||||
return b.userProgress.finishedAt - a.userProgress.finishedAt
|
||||
})
|
||||
return booksRead.map(b => minified ? b.book.toJSONMinified() : b.book.toJSONExpanded()).slice(0, limit)
|
||||
return itemsFinished.map(i => minified ? i.libraryItem.toJSONMinified() : i.libraryItem.toJSONExpanded()).slice(0, limit)
|
||||
},
|
||||
|
||||
getSeriesMostRecentlyAdded(series, limit) {
|
||||
|
|
|
|||
|
|
@ -27,7 +27,16 @@ function checkIsALastName(name) {
|
|||
return false
|
||||
}
|
||||
|
||||
module.exports = (nameString) => {
|
||||
// Handle name already in First Last format and return Last, First
|
||||
module.exports.nameToLastFirst = (firstLast) => {
|
||||
var nameObj = parseName(firstLast)
|
||||
if (!nameObj.last_name) return nameObj.first_name
|
||||
else if (!nameObj.first_name) return nameObj.last_name
|
||||
return `${nameObj.last_name}, ${nameObj.first_name}`
|
||||
}
|
||||
|
||||
// Handle any name string
|
||||
module.exports.parse = (nameString) => {
|
||||
if (!nameString) return null
|
||||
|
||||
var splitNames = []
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue