From 2de126e308d54fa856d683b6f96788b61d8589cb Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 17 Dec 2011 22:13:48 +0530 Subject: [PATCH] EPUB Output: Fix the Flatten filenames option in EPUB Output causing duplicated manifest ids in rare cases. Fixes #905692 (mobi to epub conversions with large tocs create corrupted epubs) --- src/calibre/ebooks/oeb/transforms/filenames.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/calibre/ebooks/oeb/transforms/filenames.py b/src/calibre/ebooks/oeb/transforms/filenames.py index c3c7f091c3..00b71ea8be 100644 --- a/src/calibre/ebooks/oeb/transforms/filenames.py +++ b/src/calibre/ebooks/oeb/transforms/filenames.py @@ -159,15 +159,18 @@ class FlatFilenames(object): # {{{ continue data = item.data + isp = item.spine_position nhref = oeb.manifest.generate(href=nhref)[1] + if isp is not None: + oeb.spine.remove(item) + oeb.manifest.remove(item) + nitem = oeb.manifest.add(item.id, nhref, item.media_type, data=data, fallback=item.fallback) self.rename_map[item.href] = nhref self.renamed_items_map[nhref] = item - if item.spine_position is not None: - oeb.spine.insert(item.spine_position, nitem, item.linear) - oeb.spine.remove(item) - oeb.manifest.remove(item) + if isp is not None: + oeb.spine.insert(isp, nitem, item.linear) if self.rename_map: self.log('Found non-flat filenames, renaming to support broken'