mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
Speed up reading of metadata from PDF files on the device
This commit is contained in:
parent
58bf0140a7
commit
ae475bddb0
@ -181,6 +181,10 @@ class MetadataReaderPlugin(Plugin):
|
||||
|
||||
type = _('Metadata reader')
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
Plugin.__init__(self, *args, **kwargs)
|
||||
self.quick = False
|
||||
|
||||
def get_metadata(self, stream, type):
|
||||
'''
|
||||
Return metadata for the file represented by stream (a file like object
|
||||
|
@ -182,7 +182,9 @@ class PDFMetadataReader(MetadataReaderPlugin):
|
||||
description = _('Read metadata from %s files')%'PDF'
|
||||
|
||||
def get_metadata(self, stream, ftype):
|
||||
from calibre.ebooks.metadata.pdf import get_metadata
|
||||
from calibre.ebooks.metadata.pdf import get_metadata, get_quick_metadata
|
||||
if self.quick:
|
||||
return get_quick_metadata(stream)
|
||||
return get_metadata(stream)
|
||||
|
||||
class RARMetadataReader(MetadataReaderPlugin):
|
||||
|
@ -145,6 +145,20 @@ def metadata_writers():
|
||||
ans.add(plugin)
|
||||
return ans
|
||||
|
||||
class QuickMetadata(object):
|
||||
|
||||
def __init__(self):
|
||||
self.quick = False
|
||||
|
||||
def __enter__(self):
|
||||
self.quick = True
|
||||
|
||||
def __exit__(self, *args):
|
||||
self.quick = False
|
||||
|
||||
quick_metadata = QuickMetadata()
|
||||
|
||||
|
||||
def get_file_type_metadata(stream, ftype):
|
||||
mi = MetaInformation(None, None)
|
||||
ftype = ftype.lower().strip()
|
||||
@ -153,6 +167,7 @@ def get_file_type_metadata(stream, ftype):
|
||||
if not is_disabled(plugin):
|
||||
with plugin:
|
||||
try:
|
||||
plugin.quick = quick_metadata.quick
|
||||
mi = plugin.get_metadata(stream, ftype.lower().strip())
|
||||
break
|
||||
except:
|
||||
|
@ -110,8 +110,7 @@ class JETBOOK(USBMS):
|
||||
|
||||
return txt
|
||||
|
||||
from calibre.devices.usbms.driver import metadata_from_formats
|
||||
mi = metadata_from_formats([path])
|
||||
mi = cls.metadata_from_formats([path])
|
||||
|
||||
if (mi.title==_('Unknown') or mi.authors==[_('Unknown')]) \
|
||||
and '#' in mi.title:
|
||||
|
@ -18,7 +18,16 @@ except:
|
||||
from calibre.ebooks.metadata import MetaInformation, authors_to_string
|
||||
from calibre.utils.pdftk import set_metadata as pdftk_set_metadata
|
||||
from calibre.utils.podofo import get_metadata as podofo_get_metadata, \
|
||||
set_metadata as podofo_set_metadata, Unavailable, write_first_page
|
||||
set_metadata as podofo_set_metadata, Unavailable, write_first_page, \
|
||||
get_metadata_quick
|
||||
|
||||
def get_quick_metadata(stream):
|
||||
raw = stream.read()
|
||||
mi = get_metadata_quick(raw)
|
||||
if mi.title == '_':
|
||||
mi.title = getattr(stream, 'name', _('Unknown'))
|
||||
mi.title = mi.title.rpartition('.')[0]
|
||||
return mi
|
||||
|
||||
|
||||
def get_metadata(stream, extract_cover=True):
|
||||
|
@ -80,6 +80,21 @@ def get_metadata(stream):
|
||||
if os.path.exists(pt.name): os.remove(pt.name)
|
||||
return mi
|
||||
|
||||
def get_metadata_quick(raw):
|
||||
p = podofo.PDFDoc()
|
||||
p.load(raw)
|
||||
title = p.title
|
||||
if not title:
|
||||
title = '_'
|
||||
author = p.author
|
||||
authors = string_to_authors(author) if author else [_('Unknown')]
|
||||
creator = p.creator
|
||||
mi = MetaInformation(title, authors)
|
||||
if creator:
|
||||
mi.book_producer = creator
|
||||
return mi
|
||||
|
||||
|
||||
def get_metadata_(path):
|
||||
p = podofo.PDFDoc()
|
||||
p.open(path)
|
||||
|
Loading…
x
Reference in New Issue
Block a user