mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Improve Mobipocket metadata:
- Only add ISBN <dc:identifier/>s - Add the book title in a way which can be found without actually processing the MOBI header
This commit is contained in:
parent
5060e619ba
commit
e6eb0e26f3
@ -452,6 +452,13 @@ class MobiWriter(object):
|
|||||||
code = EXTH_CODES[term]
|
code = EXTH_CODES[term]
|
||||||
for item in oeb.metadata[term]:
|
for item in oeb.metadata[term]:
|
||||||
data = self.COLLAPSE_RE.sub(' ', unicode(item))
|
data = self.COLLAPSE_RE.sub(' ', unicode(item))
|
||||||
|
if term == 'identifier':
|
||||||
|
if data.lower().startswith('urn:isbn:'):
|
||||||
|
data = data[9:]
|
||||||
|
elif item.get('scheme', '').lower() == 'isbn':
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
continue
|
||||||
data = data.encode('utf-8')
|
data = data.encode('utf-8')
|
||||||
exth.write(pack('>II', code, len(data) + 8))
|
exth.write(pack('>II', code, len(data) + 8))
|
||||||
exth.write(data)
|
exth.write(data)
|
||||||
@ -468,7 +475,7 @@ class MobiWriter(object):
|
|||||||
nrecs += 3
|
nrecs += 3
|
||||||
exth = exth.getvalue()
|
exth = exth.getvalue()
|
||||||
trail = len(exth) % 4
|
trail = len(exth) % 4
|
||||||
pad = '' if not trail else '\0' * (4 - trail)
|
pad = '\0' * (4 - trail) # Always pad w/ at least 1 byte
|
||||||
exth = ['EXTH', pack('>II', len(exth) + 12, nrecs), exth, pad]
|
exth = ['EXTH', pack('>II', len(exth) + 12, nrecs), exth, pad]
|
||||||
return ''.join(exth)
|
return ''.join(exth)
|
||||||
|
|
||||||
|
@ -223,6 +223,15 @@ class Metadata(object):
|
|||||||
'%r object has no attribute %r' \
|
'%r object has no attribute %r' \
|
||||||
% (self.__class__.__name__, name))
|
% (self.__class__.__name__, name))
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
return self.attrib[key]
|
||||||
|
|
||||||
|
def __contains__(self, key):
|
||||||
|
return key in self.attrib
|
||||||
|
|
||||||
|
def get(self, key, default=None):
|
||||||
|
return self.attrib.get(key, default)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return 'Item(term=%r, value=%r, attrib=%r)' \
|
return 'Item(term=%r, value=%r, attrib=%r)' \
|
||||||
% (barename(self.term), self.value, self.attrib)
|
% (barename(self.term), self.value, self.attrib)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user