From 5f0d48c5fddfd742e7decc4dafe6f0a3cbfa719d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 10 Jan 2026 11:51:32 +0530 Subject: [PATCH] DRYer --- src/calibre/ebooks/metadata/opf3.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/calibre/ebooks/metadata/opf3.py b/src/calibre/ebooks/metadata/opf3.py index 21c99be74d..d4cff092ac 100644 --- a/src/calibre/ebooks/metadata/opf3.py +++ b/src/calibre/ebooks/metadata/opf3.py @@ -976,19 +976,16 @@ def read_raster_cover(root, prefixes, refines): if href: return href - for item_id in XPath('./opf:metadata/opf:meta[@name="cover"]/@content')(root): - for item in XPath('./opf:manifest/opf:item[@id and @href and @media-type]')(root): - if item.get('id') == item_id: - href = get_href(item) - if href: - return href + id_map = {item.get('id', ''):item for item in XPath('./opf:manifest/opf:item[@id and @href and @media-type]')(root)} + for item_id in XPath('./opf:metadata/opf:meta[@name="cover"]/@content')(root): + if (item := id_map.get(item_id)) and (href := get_href(item)): + return href + + cover_image_types = ('image/jpeg', 'image/webp', 'image/png') for item_id in XPath('./opf:spine/opf:itemref/@idref')(root): - for item in XPath('./opf:manifest/opf:item[@id and @href and @media-type]')(root): - if item.get('id') == item_id: - if item.get('media-type') in ('image/jpeg', 'image/webp'): - if href := get_href(item): - return href + if (item := id_map.get(item_id)) and item.get('media-type') in cover_image_types and (href := get_href(item)): + return href break