mirror of
https://github.com/booklore-app/booklore.git
synced 2026-04-20 11:37:03 -04:00
* fix(metadata): ensure EPUB version-aware metadata writing EpubMetadataWriter unconditionally wrote EPUB3-only constructs into all EPUB files regardless of version, producing invalid OPF documents for EPUB3 files (e.g. opf:file-as/opf:role attributes on dc:creator) and writing EPUB3-only elements into EPUB2 files. Changes: - createCreatorElement: EPUB3 uses <meta refines="#id"> for file-as/role; EPUB2 uses opf: attributes on dc:creator - addFolderContentsToZip: mimetype is now STORED (uncompressed) and written as the first ZIP entry per EPUB spec - replaceBelongsToCollection: EPUB3 uses belongs-to-collection with refines; EPUB2 uses calibre:series/calibre:series_index convention - addSubtitleToTitle: EPUB3 uses separate dc:title with title-type refinement; EPUB2 stores subtitle via booklore:subtitle metadata only - addBookloreMetadata/createBookloreMetaElement: EPUB3 uses property attribute with prefix; EPUB2 uses name/content attribute form - removeAllBookloreMetadata: now handles both EPUB3 property and EPUB2 name attributes - cleanupCalibreArtifacts: preserves calibre:series and calibre:series_index metas used for EPUB2 series - organizeMetadataElements: correctly categorizes EPUB2-style series and booklore metas into their respective buckets - addBookloreMetadata: writes booklore:subtitle for round-trip fidelity - Added isEpub3() helper method Closes #2997 * fix(metadata): address review feedback for EPUB version-aware writing - Only preserve calibre:series/calibre:series_index for EPUB2 in cleanupCalibreArtifacts; EPUB3 files now properly remove stale entries - Use isEpub3() helper in createCreatorElement instead of inline detection - Add trim() to isEpub3() to handle whitespace in version attribute - Log warning when mimetype file is missing from extracted EPUB