mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
OPF23: dates and timestamps
This commit is contained in:
parent
f7159fc0ec
commit
704e1b3de6
@ -575,6 +575,14 @@ def read_timestamp(root, prefixes, refines):
|
||||
continue
|
||||
|
||||
|
||||
def create_timestamp(m, val):
|
||||
if not is_date_undefined(val):
|
||||
val = isoformat(val)
|
||||
d = m.makeelement(OPF('meta'), attrib={'property':'calibre:timestamp', 'scheme':'dcterms:W3CDTF'})
|
||||
d.text = val
|
||||
m.append(d)
|
||||
|
||||
|
||||
def set_timestamp(root, prefixes, refines, val):
|
||||
ensure_prefix(root, prefixes, 'calibre', CALIBRE_PREFIX)
|
||||
ensure_prefix(root, prefixes, 'dcterms')
|
||||
@ -583,12 +591,7 @@ def set_timestamp(root, prefixes, refines, val):
|
||||
prop = expand_prefix(meta.get('property'), prefixes)
|
||||
if prop.lower() == pq or meta.get('name') == 'calibre:timestamp':
|
||||
remove_element(meta, refines)
|
||||
if not is_date_undefined(val):
|
||||
val = isoformat(val)
|
||||
m = XPath('./opf:metadata')(root)[0]
|
||||
d = m.makeelement(OPF('meta'), attrib={'property':'calibre:timestamp', 'scheme':'dcterms:W3CDTF'})
|
||||
d.text = val
|
||||
m.append(d)
|
||||
create_timestamp(XPath('./opf:metadata')(root)[0], val)
|
||||
|
||||
|
||||
def read_last_modified(root, prefixes, refines):
|
||||
|
@ -7,8 +7,8 @@ from __future__ import absolute_import, division, print_function, unicode_litera
|
||||
from lxml import etree
|
||||
|
||||
from calibre.ebooks.metadata.opf3 import (
|
||||
DC, OPF, XPath, ensure_id, read_prefixes, read_refines, refdef, remove_element,
|
||||
set_refines
|
||||
DC, OPF, XPath, create_timestamp, ensure_id, parse_date, read_prefixes,
|
||||
read_refines, refdef, remove_element, set_refines
|
||||
)
|
||||
from calibre.ebooks.metadata.utils import parse_opf, pretty_print_opf
|
||||
|
||||
@ -85,6 +85,31 @@ def upgrade_authors(root, data):
|
||||
metadata.append(m)
|
||||
|
||||
|
||||
def upgrade_timestamp(root, data):
|
||||
for meta in XPath('./opf:metadata/opf:meta[@name="calibre:timestamp"]')(root):
|
||||
m = meta.getparent()
|
||||
remove_element(meta, data.refines)
|
||||
val = meta.get('content')
|
||||
if val:
|
||||
try:
|
||||
val = parse_date(val, is_w3cdtf=True)
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
create_timestamp(m, val)
|
||||
|
||||
|
||||
def upgrade_date(root, data):
|
||||
found = False
|
||||
for date in XPath('./opf:metadata/dc:date')(root):
|
||||
val = date.text
|
||||
if val:
|
||||
found = True
|
||||
continue
|
||||
if not val or found: # only one dc:date allowed
|
||||
remove_element(date, data.refines)
|
||||
|
||||
|
||||
def upgrade_metadata(root):
|
||||
data = Data()
|
||||
data.prefixes = read_prefixes(root)
|
||||
@ -94,6 +119,8 @@ def upgrade_metadata(root):
|
||||
upgrade_title(root, data)
|
||||
upgrade_languages(root, data)
|
||||
upgrade_authors(root, data)
|
||||
upgrade_timestamp(root, data)
|
||||
upgrade_date(root, data)
|
||||
|
||||
pretty_print_opf(root)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user