mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-11-03 19:07:00 -05:00 
			
		
		
		
	Add:Book folder name starting with number and has series folder use as volume number
This commit is contained in:
		
							parent
							
								
									779d22bf55
								
							
						
					
					
						commit
						c81b12f459
					
				@ -203,7 +203,8 @@ class Db {
 | 
				
			|||||||
    }))
 | 
					    }))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return this.audiobooksDb.insert(audiobooks).then((results) => {
 | 
					    return this.audiobooksDb.insert(audiobooks).then((results) => {
 | 
				
			||||||
      Logger.debug(`[DB] Audiobooks inserted ${results.updated}`)
 | 
					      Logger.debug(`[DB] Audiobooks inserted ${results.inserted}`)
 | 
				
			||||||
 | 
					      this.audiobooks = this.audiobooks.concat(audiobooks)
 | 
				
			||||||
      return true
 | 
					      return true
 | 
				
			||||||
    }).catch((error) => {
 | 
					    }).catch((error) => {
 | 
				
			||||||
      Logger.error(`[DB] Audiobooks insert failed ${error}`)
 | 
					      Logger.error(`[DB] Audiobooks insert failed ${error}`)
 | 
				
			||||||
 | 
				
			|||||||
@ -569,9 +569,8 @@ class Audiobook {
 | 
				
			|||||||
      if (abmetadataText) {
 | 
					      if (abmetadataText) {
 | 
				
			||||||
        var metadataUpdateObject = abmetadataGenerator.parse(abmetadataText)
 | 
					        var metadataUpdateObject = abmetadataGenerator.parse(abmetadataText)
 | 
				
			||||||
        if (metadataUpdateObject && metadataUpdateObject.book) {
 | 
					        if (metadataUpdateObject && metadataUpdateObject.book) {
 | 
				
			||||||
          Logger.debug(`[Audiobook] Updating book "${this.title}" details from metadata.abs file`, metadataUpdateObject)
 | 
					 | 
				
			||||||
          if (this.update(metadataUpdateObject)) {
 | 
					          if (this.update(metadataUpdateObject)) {
 | 
				
			||||||
            Logger.debug(`[Audiobook] Some details were updated from metadata.abs for "${this.title}"`)
 | 
					            Logger.debug(`[Audiobook] Some details were updated from metadata.abs for "${this.title}"`, metadataUpdateObject)
 | 
				
			||||||
            hasUpdates = true
 | 
					            hasUpdates = true
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -834,7 +833,7 @@ class Audiobook {
 | 
				
			|||||||
    if (abmetadataText) {
 | 
					    if (abmetadataText) {
 | 
				
			||||||
      var metadataUpdateObject = abmetadataGenerator.parse(abmetadataText)
 | 
					      var metadataUpdateObject = abmetadataGenerator.parse(abmetadataText)
 | 
				
			||||||
      if (metadataUpdateObject && metadataUpdateObject.book) {
 | 
					      if (metadataUpdateObject && metadataUpdateObject.book) {
 | 
				
			||||||
        Logger.debug(`[Audiobook] "${this.title}" found book details from metadata.abs file`, metadataUpdateObject)
 | 
					        Logger.debug(`[Audiobook] "${this.title}" found metadata.abs file`)
 | 
				
			||||||
        for (const key in metadataUpdateObject.book) {
 | 
					        for (const key in metadataUpdateObject.book) {
 | 
				
			||||||
          var value = metadataUpdateObject.book[key]
 | 
					          var value = metadataUpdateObject.book[key]
 | 
				
			||||||
          if (key && value !== undefined) {
 | 
					          if (key && value !== undefined) {
 | 
				
			||||||
 | 
				
			|||||||
@ -85,8 +85,10 @@ function parseAbMetadataText(text) {
 | 
				
			|||||||
      bookDetails[key] = keyValue[1].trim()
 | 
					      bookDetails[key] = keyValue[1].trim()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Genres convert to array of strings
 | 
					      // Genres convert to array of strings
 | 
				
			||||||
      if (key === 'genres' && bookDetails[key]) {
 | 
					      if (key === 'genres') {
 | 
				
			||||||
        bookDetails[key] = bookDetails[key].split(',').map(genre => genre.trim())
 | 
					        bookDetails[key] = bookDetails[key] ? bookDetails[key].split(',').map(genre => genre.trim()) : []
 | 
				
			||||||
 | 
					      } else if (!bookDetails[key]) { // Use null for empty details
 | 
				
			||||||
 | 
					        bookDetails[key] = null
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -196,32 +196,42 @@ function getAudiobookDataFromDir(folderPath, dir, parseSubtitle = false) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // If in a series directory check for volume number match
 | 
					  // If in a series directory check for volume number match
 | 
				
			||||||
  /* ACCEPTS:
 | 
					  /* ACCEPTS
 | 
				
			||||||
    Book 2 - Title Here - Subtitle Here
 | 
					    Book 2 - Title Here - Subtitle Here
 | 
				
			||||||
    Title Here - Subtitle Here - Vol 12
 | 
					    Title Here - Subtitle Here - Vol 12
 | 
				
			||||||
    Title Here - volume 9 - Subtitle Here
 | 
					    Title Here - volume 9 - Subtitle Here
 | 
				
			||||||
    Vol. 3 Title Here - Subtitle Here
 | 
					    Vol. 3 Title Here - Subtitle Here
 | 
				
			||||||
    1980 - Book 2-Title Here
 | 
					    1980 - Book 2-Title Here
 | 
				
			||||||
    Title Here-Volume 999-Subtitle Here
 | 
					    Title Here-Volume 999-Subtitle Here
 | 
				
			||||||
 | 
					    2 - Book Title
 | 
				
			||||||
 | 
					    100 - Book Title
 | 
				
			||||||
 | 
					    0.5 - Book Title
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
  var volumeNumber = null
 | 
					  var volumeNumber = null
 | 
				
			||||||
  if (series) {
 | 
					  if (series) {
 | 
				
			||||||
    // New volume regex to match volumes with decimal (OLD: /(-? ?)\b((?:Book|Vol.?|Volume) (\d{1,3}))\b( ?-?)/i)
 | 
					    // Added 1.7.1: If title starts with a # that is 3 digits or less (or w/ 2 decimal), then use as volume number
 | 
				
			||||||
    var volumeMatch = title.match(/(-? ?)\b((?:Book|Vol.?|Volume) (\d{0,3}(?:\.\d{1,2})?))\b( ?-?)/i)
 | 
					    var volumeMatch = title.match(/^(\d{1,3}(?:\.\d{1,2})?) - ./)
 | 
				
			||||||
    if (volumeMatch && volumeMatch.length > 3 && volumeMatch[2] && volumeMatch[3]) {
 | 
					    if (volumeMatch && volumeMatch.length > 1) {
 | 
				
			||||||
      volumeNumber = volumeMatch[3]
 | 
					      volumeNumber = volumeMatch[1]
 | 
				
			||||||
      var replaceChunk = volumeMatch[2]
 | 
					      title = title.replace(`${volumeNumber} - `, '')
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      // Match volumes with decimal (OLD: /(-? ?)\b((?:Book|Vol.?|Volume) (\d{1,3}))\b( ?-?)/i)
 | 
				
			||||||
 | 
					      var volumeMatch = title.match(/(-? ?)\b((?:Book|Vol.?|Volume) (\d{0,3}(?:\.\d{1,2})?))\b( ?-?)/i)
 | 
				
			||||||
 | 
					      if (volumeMatch && volumeMatch.length > 3 && volumeMatch[2] && volumeMatch[3]) {
 | 
				
			||||||
 | 
					        volumeNumber = volumeMatch[3]
 | 
				
			||||||
 | 
					        var replaceChunk = volumeMatch[2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // "1980 - Book 2-Title Here"
 | 
					        // "1980 - Book 2-Title Here"
 | 
				
			||||||
      // Group 1 would be "- "
 | 
					        // Group 1 would be "- "
 | 
				
			||||||
      // Group 3 would be "-"
 | 
					        // Group 3 would be "-"
 | 
				
			||||||
      // Only remove the first group
 | 
					        // Only remove the first group
 | 
				
			||||||
      if (volumeMatch[1]) {
 | 
					        if (volumeMatch[1]) {
 | 
				
			||||||
        replaceChunk = volumeMatch[1] + replaceChunk
 | 
					          replaceChunk = volumeMatch[1] + replaceChunk
 | 
				
			||||||
      } else if (volumeMatch[4]) {
 | 
					        } else if (volumeMatch[4]) {
 | 
				
			||||||
        replaceChunk += volumeMatch[4]
 | 
					          replaceChunk += volumeMatch[4]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        title = title.replace(replaceChunk, '').trim()
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      title = title.replace(replaceChunk, '').trim()
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user