mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Fix:Parse series sequence from OPF in cases where series_index is not directly underneath series meta #2505
This commit is contained in:
		
							parent
							
								
									69e23ef9f2
								
							
						
					
					
						commit
						da25eff5c1
					
				| @ -103,15 +103,24 @@ function fetchSeries(metadataMeta) { | ||||
|   if (!metadataMeta) return [] | ||||
|   const result = [] | ||||
|   for (let i = 0; i < metadataMeta.length; i++) { | ||||
|     if (metadataMeta[i].$?.name === "calibre:series" && metadataMeta[i].$.content?.trim()) { | ||||
|     if (metadataMeta[i].$?.name === 'calibre:series' && metadataMeta[i].$.content?.trim()) { | ||||
|       const name = metadataMeta[i].$.content.trim() | ||||
|       let sequence = null | ||||
|       if (metadataMeta[i + 1]?.$?.name === "calibre:series_index" && metadataMeta[i + 1].$?.content?.trim()) { | ||||
|       if (metadataMeta[i + 1]?.$?.name === 'calibre:series_index' && metadataMeta[i + 1].$?.content?.trim()) { | ||||
|         sequence = metadataMeta[i + 1].$.content.trim() | ||||
|       } | ||||
|       result.push({ name, sequence }) | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   // If one series was found with no series_index then check if any series_index meta can be found
 | ||||
|   //   this is to support when calibre:series_index is not directly underneath calibre:series
 | ||||
|   if (result.length === 1 && !result[0].sequence) { | ||||
|     const seriesIndexMeta = metadataMeta.find(m => m.$?.name === 'calibre:series_index' && m.$.content?.trim()) | ||||
|     if (seriesIndexMeta) { | ||||
|       result[0].sequence = seriesIndexMeta.$.content.trim() | ||||
|     } | ||||
|   } | ||||
|   return result | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -110,4 +110,21 @@ describe('parseOpfMetadata - test series', async () => { | ||||
|             { "name": "Serie 1", "sequence": null } | ||||
|         ]) | ||||
|     }) | ||||
| 
 | ||||
|     it('test series and series index not directly underneath', async () => { | ||||
|         const opf = ` | ||||
|             <?xml version='1.0' encoding='UTF-8'?> | ||||
|             <package xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf" xml:lang="en" version="3.0" unique-identifier="bookid"> | ||||
|               <metadata> | ||||
|                   <meta name="calibre:series" content="Serie 1"/> | ||||
|                   <meta name="calibre:title_sort" content="Test Title"/> | ||||
|                   <meta name="calibre:series_index" content="1"/> | ||||
|               </metadata> | ||||
|             </package> | ||||
|         ` | ||||
|         const parsedOpf = await parseOpfMetadataXML(opf) | ||||
|         expect(parsedOpf.series).to.deep.equal([ | ||||
|             { "name": "Serie 1", "sequence": "1" } | ||||
|         ]) | ||||
|     }) | ||||
| }) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user