diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index 8272ac90a2..2228424782 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -171,6 +171,17 @@ class TXTMetadataReader(MetadataReaderPlugin): from calibre.ebooks.metadata.txt import get_metadata return get_metadata(stream) +class PDBMetadataReader(MetadataReaderPlugin): + + name = 'Read PDB metadata' + file_types = set(['pdb']) + description = _('Read metadata from %s files') % 'PDB' + author = 'John Schember' + + def get_metadata(self, stream, ftype): + from calibre.ebooks.metadata.pdb import get_metadata + return get_metadata(stream) + class LRXMetadataReader(MetadataReaderPlugin): name = 'Read LRX metadata' diff --git a/src/calibre/ebooks/metadata/ereader.py b/src/calibre/ebooks/metadata/ereader.py new file mode 100644 index 0000000000..f37ff9ab6d --- /dev/null +++ b/src/calibre/ebooks/metadata/ereader.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +''' +Read meta information from eReader pdb files. +''' + +__license__ = 'GPL v3' +__copyright__ = '2009, John Schember ' +__docformat__ = 'restructuredtext en' + +import re + +from calibre.ebooks.metadata import MetaInformation +from calibre.ebooks.pdb.header import PdbHeaderReader +from calibre.ebooks.pdb.ereader.reader import HeaderRecord + +def get_metadata(stream, extract_cover=True): + """ + Return metadata as a L{MetaInfo} object + """ + mi = MetaInformation(None, [_('Unknown')]) + stream.seek(0) + + pheader = PdbHeaderReader(stream) + hr = HeaderRecord(pheader.section_data(0)) + + if hr.version in (2, 10): + try: + mdata = pheader.section_data(hr.metadata_offset) + + mdata = mdata.split('\x00') + mi.title = mdata[0] + mi.authors = [mdata[1]] + mi.publisher = mdata[3] + mi.isbn = mdata[4] + except: + pass + + if not mi.title: + mi.title = pheader.title if pheader.title else _('Unknown') + + return mi + diff --git a/src/calibre/ebooks/metadata/pdb.py b/src/calibre/ebooks/metadata/pdb.py new file mode 100644 index 0000000000..e473925b87 --- /dev/null +++ b/src/calibre/ebooks/metadata/pdb.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +''' +Read meta information from eReader pdb files. +''' + +__license__ = 'GPL v3' +__copyright__ = '2009, John Schember ' +__docformat__ = 'restructuredtext en' + +import re + +from calibre.ebooks.metadata import MetaInformation +from calibre.ebooks.pdb.header import PdbHeaderReader +from calibre.ebooks.metadata.ereader import get_metadata as eReader + +MREADER = { + 'PNPdPPrs' : eReader, + 'PNRdPPrs' : eReader, +} + +def get_metadata(stream, extract_cover=True): + """ + Return metadata as a L{MetaInfo} object + """ + + pheader = PdbHeaderReader(stream) + + MetadataReader = MREADER.get(pheader.ident, None) + + if MetadataReader is None: + return MetaInformation(_('Unknown'), [_('Unknown')]) + + + return MetadataReader(stream, extract_cover) + diff --git a/src/calibre/ebooks/pdb/ereader/reader.py b/src/calibre/ebooks/pdb/ereader/reader.py index 9b5fbf82da..ecf5c706c4 100644 --- a/src/calibre/ebooks/pdb/ereader/reader.py +++ b/src/calibre/ebooks/pdb/ereader/reader.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from __future__ import with_statement + ''' Read content from ereader pdb file. ''' @@ -127,8 +127,7 @@ class Reader(FormatReader): with open('index.html', 'wb') as index: self.log.debug('Writing text to index.html') index.write(html) -# print html - + if not os.path.exists(os.path.join(output_dir, 'images/')): os.makedirs(os.path.join(output_dir, 'images/')) images = [] diff --git a/src/calibre/ebooks/pdb/ereader/writer.py b/src/calibre/ebooks/pdb/ereader/writer.py index 1446cc3d74..ea9144579c 100644 --- a/src/calibre/ebooks/pdb/ereader/writer.py +++ b/src/calibre/ebooks/pdb/ereader/writer.py @@ -1,9 +1,13 @@ # -*- coding: utf-8 -*- -from __future__ import with_statement + ''' Write content to ereader pdb file. ''' +__license__ = 'GPL v3' +__copyright__ = '2009, John Schember ' +__docformat__ = 'restructuredtext en' + import struct, zlib import Image, cStringIO