mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Finish OPF23
This commit is contained in:
parent
a359127473
commit
e64afede00
@ -837,7 +837,7 @@ def deserialize_user_metadata(val):
|
|||||||
read_user_metadata3 = dict_reader('user_metadata', load=deserialize_user_metadata, try2=False)
|
read_user_metadata3 = dict_reader('user_metadata', load=deserialize_user_metadata, try2=False)
|
||||||
|
|
||||||
|
|
||||||
def read_user_metadata2(root):
|
def read_user_metadata2(root, remove_tags=False):
|
||||||
ans = {}
|
ans = {}
|
||||||
for meta in XPath('./opf:metadata/opf:meta[starts-with(@name, "calibre:user_metadata:")]')(root):
|
for meta in XPath('./opf:metadata/opf:meta[starts-with(@name, "calibre:user_metadata:")]')(root):
|
||||||
name = meta.get('name')
|
name = meta.get('name')
|
||||||
@ -845,6 +845,8 @@ def read_user_metadata2(root):
|
|||||||
if not name or not name.startswith('#'):
|
if not name or not name.startswith('#'):
|
||||||
continue
|
continue
|
||||||
fm = meta.get('content')
|
fm = meta.get('content')
|
||||||
|
if remove_tags:
|
||||||
|
meta.getparent().remove(meta)
|
||||||
try:
|
try:
|
||||||
fm = json.loads(fm, object_hook=from_json)
|
fm = json.loads(fm, object_hook=from_json)
|
||||||
decode_is_multiple(fm)
|
decode_is_multiple(fm)
|
||||||
|
@ -7,8 +7,9 @@ from __future__ import absolute_import, division, print_function, unicode_litera
|
|||||||
from lxml import etree
|
from lxml import etree
|
||||||
|
|
||||||
from calibre.ebooks.metadata.opf3 import (
|
from calibre.ebooks.metadata.opf3 import (
|
||||||
DC, OPF, XPath, create_rating, create_series, create_timestamp, ensure_id,
|
DC, OPF, XPath, create_rating, create_series, create_timestamp,
|
||||||
parse_date, read_prefixes, read_refines, refdef, remove_element, set_refines
|
encode_is_multiple, ensure_id, parse_date, read_prefixes, read_refines,
|
||||||
|
read_user_metadata2, refdef, remove_element, set_refines, set_user_metadata3
|
||||||
)
|
)
|
||||||
from calibre.ebooks.metadata.utils import parse_opf, pretty_print_opf
|
from calibre.ebooks.metadata.utils import parse_opf, pretty_print_opf
|
||||||
|
|
||||||
@ -132,6 +133,35 @@ def upgrade_series(root, data):
|
|||||||
create_series(root, data.refines, series, series_index)
|
create_series(root, data.refines, series, series_index)
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade_custom(root, data):
|
||||||
|
m = read_user_metadata2(root, remove_tags=True)
|
||||||
|
if m:
|
||||||
|
for fm in m.itervalues():
|
||||||
|
encode_is_multiple(fm)
|
||||||
|
set_user_metadata3(root, data.prefixes, data.refines, m)
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade_meta(root, data):
|
||||||
|
for meta in XPath('./opf:metadata/opf:meta[@name]')(root):
|
||||||
|
name, content = meta.get('name'), meta.get('content') or ''
|
||||||
|
if name.startswith('rendition:'):
|
||||||
|
name = name.partition(':')[-1]
|
||||||
|
prop = None
|
||||||
|
if name in ('orientation', 'layout', 'spread'):
|
||||||
|
prop = 'rendition:' + name
|
||||||
|
elif name == 'fixed-layout':
|
||||||
|
prop = 'rendition:layout'
|
||||||
|
content = {'true': 'pre-paginated'}.get(content.lower(), 'reflowable')
|
||||||
|
elif name == 'orientation-lock':
|
||||||
|
prop = 'rendition:orientation'
|
||||||
|
content = {'portrait': 'portrait', 'landscape': 'landscape'}.get(content.lower(), 'auto')
|
||||||
|
if prop:
|
||||||
|
del meta.attrib['name']
|
||||||
|
del meta.attrib['content']
|
||||||
|
meta.set('property', prop)
|
||||||
|
meta.text = content
|
||||||
|
|
||||||
|
|
||||||
def remove_invalid_attrs_in_dc_metadata(root, data):
|
def remove_invalid_attrs_in_dc_metadata(root, data):
|
||||||
for tag in XPath('//*[namespace-uri() = "{}"]'.format(DC('')[1:-1]))(root):
|
for tag in XPath('//*[namespace-uri() = "{}"]'.format(DC('')[1:-1]))(root):
|
||||||
for k in tuple(tag.attrib):
|
for k in tuple(tag.attrib):
|
||||||
@ -152,6 +182,8 @@ def upgrade_metadata(root):
|
|||||||
upgrade_date(root, data)
|
upgrade_date(root, data)
|
||||||
upgrade_rating(root, data)
|
upgrade_rating(root, data)
|
||||||
upgrade_series(root, data)
|
upgrade_series(root, data)
|
||||||
|
upgrade_custom(root, data)
|
||||||
|
upgrade_meta(root, data)
|
||||||
|
|
||||||
remove_invalid_attrs_in_dc_metadata(root, data)
|
remove_invalid_attrs_in_dc_metadata(root, data)
|
||||||
pretty_print_opf(root)
|
pretty_print_opf(root)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user