|
![]() |
|
Thread Tools | Search this Thread |
![]() |
#1 |
Developer
![]() ![]() ![]() Posts: 155
Karma: 280
Join Date: Nov 2010
Device: Kindle 3 (Keyboard) 3G / iPad 9 WiFi / Google Pixel 6a (Android)
|
Patch: Use real ASIN instead of UUID in mobi files to show correct cover in KindleApp
Hi,
with the following patch against calibre 0.8.8, converted or saved mobi files will contain a real ASIN value instead of a generated UUID if an identifier named 'asin' is available in the book metadata. The amazon metadata plugin is patched to automatically set the necessary 'asin' identifier. With this change the Kindle App will display the correct book cover, which is not available when using an UUID. Ciao, Steffen Code:
diff --git a/src/calibre/ebooks/metadata/mobi.py b/src/calibre/ebooks/metadata/mobi.py index 74db3b3..fe4950c 100644 --- a/src/calibre/ebooks/metadata/mobi.py +++ b/src/calibre/ebooks/metadata/mobi.py @@ -374,11 +374,15 @@ class MetadataUpdater(object): if self.thumbnail_record is not None: update_exth_record((202, pack('>I', self.thumbnail_rindex))) # Add a 113 record if not present to allow Amazon syncing - if (113 not in self.original_exth_records and - self.original_exth_records.get(501, None) == 'EBOK' and - not added_501): - from uuid import uuid4 - update_exth_record((113, str(uuid4()))) + if not added_501: + if mi.has_identifier('asin'): + asin = mi.get_identifiers()['asin'] + update_exth_record((113, asin.encode(self.codec, 'replace'))) + elif 113 not in self.original_exth_records: + from uuid import uuid4 + update_exth_record((113, str(uuid4()))) + if self.original_exth_records.get(501, None) != 'EBOK': + update_exth_record((501, 'EBOK'.encode(self.codec, 'replace'))) if 503 in self.original_exth_records: update_exth_record((503, mi.title.encode(self.codec, 'replace'))) diff --git a/src/calibre/ebooks/metadata/sources/amazon.py b/src/calibre/ebooks/metadata/sources/amazon.py index 6220f29..898cb86 100644 --- a/src/calibre/ebooks/metadata/sources/amazon.py +++ b/src/calibre/ebooks/metadata/sources/amazon.py @@ -202,6 +202,7 @@ class Worker(Thread): # Get details {{{ mi = Metadata(title, authors) idtype = 'amazon' if self.domain == 'com' else 'amazon_'+self.domain mi.set_identifier(idtype, asin) + mi.set_identifier('asin', asin) self.amazon_id = asin try: diff --git a/src/calibre/ebooks/mobi/writer.py b/src/calibre/ebooks/mobi/writer.py index bf9de37..bfe6315 100644 --- a/src/calibre/ebooks/mobi/writer.py +++ b/src/calibre/ebooks/mobi/writer.py @@ -1552,10 +1552,15 @@ class MobiWriter(object): uuid = None from calibre.ebooks.oeb.base import OPF for x in oeb.metadata['identifier']: - if x.get(OPF('scheme'), None).lower() == 'uuid' or unicode(x).startswith('urn:uuid:'): + if x.get(OPF('scheme'), None).lower() == 'asin': uuid = unicode(x).split(':')[-1] break if uuid is None: + for x in oeb.metadata['identifier']: + if x.get(OPF('scheme'), None).lower() == 'uuid' or unicode(x).startswith('urn:uuid:'): + uuid = unicode(x).split(':')[-1] + break + if uuid is None: from uuid import uuid4 uuid = str(uuid4()) diff --git a/src/calibre/ebooks/oeb/transforms/metadata.py b/src/calibre/ebooks/oeb/transforms/metadata.py index f719ee3..3980c21 100644 --- a/src/calibre/ebooks/oeb/transforms/metadata.py +++ b/src/calibre/ebooks/oeb/transforms/metadata.py @@ -12,6 +12,9 @@ from calibre import guess_type def meta_info_to_oeb_metadata(mi, m, log, override_input_metadata=False): from calibre.ebooks.oeb.base import OPF + user_identifiers = mi.get_identifiers() + for x in user_identifiers: + m.add('identifier', user_identifiers[x], scheme=x.upper()) if not mi.is_null('title'): m.clear('title') m.add('title', mi.title) |
![]() |
![]() |
![]() |
#2 | |
Junior Member
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6
Karma: 487442
Join Date: Feb 2012
Device: kindle4Android
|
Quote:
|
|
![]() |
![]() |
Advert | |
|
![]() |
#3 |
Junior Member
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6
Karma: 487442
Join Date: Feb 2012
Device: kindle4Android
|
OK. I have to download calibre source package, edit it and rebuild?
|
![]() |
![]() |
![]() |
#4 |
Wizard
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 4,553
Karma: 950151
Join Date: Nov 2008
Device: Sony PRS-950, iphone/ipad (Marvin/iBooks/QuickReader)
|
That is a very old post as it is referes to calibre 0.8.8 and we are now up to 0.8.40 (32 revisions later). Have you checked to see if this feature has been incorporated into the standard calibre build since then (I do not know)?
However in pricniple you are right as to what you need to do to incorporate a patch. However it is a little easier than the steps you describe as Calibre uses Python as its programming language which supports "Just in Time" compilation so simply patching the source will pick up the change if you are set to run from source. |
![]() |
![]() |
![]() |
#5 |
Junior Member
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6
Karma: 487442
Join Date: Feb 2012
Device: kindle4Android
|
Thank you for the reply. I have version 0.8.8 binary downloaded from ubuntu repository. While I checked the latest source files, and this patch is not included in them.
Not a programmer, but I find it irritating, when kindle for android displaying cover images very small, even though I modified it in calibre. But the books downloaded from amazon is working fine. One question, what does 'index f719ee3..3980c21 100644' means in the patch. |
![]() |
![]() |
Advert | |
|
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
What happens when MOBI matches actual ASIN in Amazon's database? | Zero9 | Conversion | 0 | 05-29-2011 10:20 AM |
How can I remove ASIN from a mobi book? | julius90 | Calibre | 4 | 05-02-2011 10:08 AM |
PRS-650 AAC files don't show cover or author | lexxi | Sony Reader | 4 | 04-25-2011 01:30 PM |
Update all mobi books so they have an ASIN? | protoghost | Library Management | 4 | 02-13-2011 06:25 AM |
Mobi to Kindle with correct metadata? | rex0810 | Calibre | 3 | 09-25-2009 05:36 PM |