mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Plucker metadata reader.
This commit is contained in:
parent
8cb31c73df
commit
e690e7196e
@ -1,7 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Read meta information from eReader pdb files.
|
Read meta information from pdb files.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
@ -13,10 +13,12 @@ import re
|
|||||||
from calibre.ebooks.metadata import MetaInformation
|
from calibre.ebooks.metadata import MetaInformation
|
||||||
from calibre.ebooks.pdb.header import PdbHeaderReader
|
from calibre.ebooks.pdb.header import PdbHeaderReader
|
||||||
from calibre.ebooks.metadata.ereader import get_metadata as get_eReader
|
from calibre.ebooks.metadata.ereader import get_metadata as get_eReader
|
||||||
|
from calibre.ebooks.metadata.plucker import get_metadata as get_plucker
|
||||||
|
|
||||||
MREADER = {
|
MREADER = {
|
||||||
'PNPdPPrs' : get_eReader,
|
'PNPdPPrs' : get_eReader,
|
||||||
'PNRdPPrs' : get_eReader,
|
'PNRdPPrs' : get_eReader,
|
||||||
|
'DataPlkr' : get_plucker,
|
||||||
}
|
}
|
||||||
|
|
||||||
from calibre.ebooks.metadata.ereader import set_metadata as set_eReader
|
from calibre.ebooks.metadata.ereader import set_metadata as set_eReader
|
||||||
|
73
src/calibre/ebooks/metadata/plucker.py
Normal file
73
src/calibre/ebooks/metadata/plucker.py
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from __future__ import (unicode_literals, division, absolute_import, print_function)
|
||||||
|
|
||||||
|
'''
|
||||||
|
Read meta information from Plucker pdb files.
|
||||||
|
'''
|
||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2009, John Schember <john@nachtimwald.com>'
|
||||||
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
|
import struct
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from calibre.ebooks.metadata import MetaInformation
|
||||||
|
from calibre.ebooks.pdb.header import PdbHeaderReader
|
||||||
|
from calibre.ebooks.pdb.plucker.reader import SectionHeader, DATATYPE_METADATA, \
|
||||||
|
MIBNUM_TO_NAME
|
||||||
|
|
||||||
|
def get_metadata(stream, extract_cover=True):
|
||||||
|
'''
|
||||||
|
Return metadata as a L{MetaInfo} object
|
||||||
|
'''
|
||||||
|
mi = MetaInformation(_('Unknown'), [_('Unknown')])
|
||||||
|
stream.seek(0)
|
||||||
|
|
||||||
|
pheader = PdbHeaderReader(stream)
|
||||||
|
section_data = None
|
||||||
|
for i in range(1, pheader.num_sections):
|
||||||
|
raw_data = pheader.section_data(i)
|
||||||
|
section_header = SectionHeader(raw_data)
|
||||||
|
if section_header.type == DATATYPE_METADATA:
|
||||||
|
section_data = raw_data[8:]
|
||||||
|
break
|
||||||
|
|
||||||
|
if not section_data:
|
||||||
|
return mi
|
||||||
|
|
||||||
|
default_encoding = 'latin-1'
|
||||||
|
record_count, = struct.unpack('>H', section_data[0:2])
|
||||||
|
adv = 0
|
||||||
|
title = None
|
||||||
|
author = None
|
||||||
|
pubdate = 0
|
||||||
|
for i in xrange(record_count):
|
||||||
|
type, = struct.unpack('>H', section_data[2+adv:4+adv])
|
||||||
|
length, = struct.unpack('>H', section_data[4+adv:6+adv])
|
||||||
|
|
||||||
|
# CharSet
|
||||||
|
if type == 1:
|
||||||
|
val, = struct.unpack('>H', section_data[6+adv:8+adv])
|
||||||
|
default_encoding = MIBNUM_TO_NAME.get(val, 'latin-1')
|
||||||
|
# Author
|
||||||
|
elif type == 4:
|
||||||
|
author = section_data[6+adv+(2*length)]
|
||||||
|
# Title
|
||||||
|
elif type == 5:
|
||||||
|
title = section_data[6+adv+(2*length)]
|
||||||
|
# Publication Date
|
||||||
|
elif type == 6:
|
||||||
|
pubdate, = struct.unpack('>I', section_data[6+adv:6+adv+4])
|
||||||
|
|
||||||
|
adv += 2*length
|
||||||
|
|
||||||
|
if title:
|
||||||
|
mi.title = title.replace('\0', '').decode(default_encoding, 'replace')
|
||||||
|
if author:
|
||||||
|
author = author.replace('\0', '').decode(default_encoding, 'replace')
|
||||||
|
mi.author = author.split(',')
|
||||||
|
mi.pubdate = datetime.fromtimestamp(pubdate)
|
||||||
|
|
||||||
|
return mi
|
Loading…
x
Reference in New Issue
Block a user