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')
|
type = _('Metadata reader')
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
Plugin.__init__(self, *args, **kwargs)
|
||||||
|
self.quick = False
|
||||||
|
|
||||||
def get_metadata(self, stream, type):
|
def get_metadata(self, stream, type):
|
||||||
'''
|
'''
|
||||||
Return metadata for the file represented by stream (a file like object
|
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'
|
description = _('Read metadata from %s files')%'PDF'
|
||||||
|
|
||||||
def get_metadata(self, stream, ftype):
|
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)
|
return get_metadata(stream)
|
||||||
|
|
||||||
class RARMetadataReader(MetadataReaderPlugin):
|
class RARMetadataReader(MetadataReaderPlugin):
|
||||||
|
@ -145,6 +145,20 @@ def metadata_writers():
|
|||||||
ans.add(plugin)
|
ans.add(plugin)
|
||||||
return ans
|
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):
|
def get_file_type_metadata(stream, ftype):
|
||||||
mi = MetaInformation(None, None)
|
mi = MetaInformation(None, None)
|
||||||
ftype = ftype.lower().strip()
|
ftype = ftype.lower().strip()
|
||||||
@ -153,6 +167,7 @@ def get_file_type_metadata(stream, ftype):
|
|||||||
if not is_disabled(plugin):
|
if not is_disabled(plugin):
|
||||||
with plugin:
|
with plugin:
|
||||||
try:
|
try:
|
||||||
|
plugin.quick = quick_metadata.quick
|
||||||
mi = plugin.get_metadata(stream, ftype.lower().strip())
|
mi = plugin.get_metadata(stream, ftype.lower().strip())
|
||||||
break
|
break
|
||||||
except:
|
except:
|
||||||
|
@ -110,8 +110,7 @@ class JETBOOK(USBMS):
|
|||||||
|
|
||||||
return txt
|
return txt
|
||||||
|
|
||||||
from calibre.devices.usbms.driver import metadata_from_formats
|
mi = cls.metadata_from_formats([path])
|
||||||
mi = metadata_from_formats([path])
|
|
||||||
|
|
||||||
if (mi.title==_('Unknown') or mi.authors==[_('Unknown')]) \
|
if (mi.title==_('Unknown') or mi.authors==[_('Unknown')]) \
|
||||||
and '#' in mi.title:
|
and '#' in mi.title:
|
||||||
|
@ -18,7 +18,16 @@ except:
|
|||||||
from calibre.ebooks.metadata import MetaInformation, authors_to_string
|
from calibre.ebooks.metadata import MetaInformation, authors_to_string
|
||||||
from calibre.utils.pdftk import set_metadata as pdftk_set_metadata
|
from calibre.utils.pdftk import set_metadata as pdftk_set_metadata
|
||||||
from calibre.utils.podofo import get_metadata as podofo_get_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):
|
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)
|
if os.path.exists(pt.name): os.remove(pt.name)
|
||||||
return mi
|
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):
|
def get_metadata_(path):
|
||||||
p = podofo.PDFDoc()
|
p = podofo.PDFDoc()
|
||||||
p.open(path)
|
p.open(path)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user