diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index 86172067bf..4eab9108cf 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -8,7 +8,7 @@ from calibre import guess_type from calibre.customize import (FileTypePlugin, MetadataReaderPlugin, MetadataWriterPlugin, PreferencesPlugin, InterfaceActionBase, StoreBase) from calibre.constants import numeric_version -from calibre.ebooks.metadata.archive import ArchiveExtract, get_cbz_metadata +from calibre.ebooks.metadata.archive import ArchiveExtract, get_comic_metadata from calibre.ebooks.html.to_zip import HTML2ZIP plugins = [] @@ -150,9 +150,9 @@ class ComicMetadataReader(MetadataReaderPlugin): ret = extract_first(stream) mi = MetaInformation(None, None) stream.seek(0) - if ftype == 'cbz': + if ftype in {'cbr', 'cbz'}: try: - mi.smart_update(get_cbz_metadata(stream)) + mi.smart_update(get_comic_metadata(stream, ftype)) except: pass if ret is not None: diff --git a/src/calibre/ebooks/metadata/archive.py b/src/calibre/ebooks/metadata/archive.py index 82ba934945..531a725c4b 100644 --- a/src/calibre/ebooks/metadata/archive.py +++ b/src/calibre/ebooks/metadata/archive.py @@ -110,21 +110,44 @@ def get_comic_book_info(d, mi): authors.append(x) if authors: mi.authors = authors + comments = d.get('comments', '') + if comments and comments.strip(): + mi.comments = comments.strip() + pubm, puby = d.get('publicationMonth', None), d.get('publicationYear', None) + if puby is not None: + from calibre.utils.date import parse_only_date + from datetime import date + try: + dt = date(puby, 6 if pubm is None else pubm, 15) + dt = parse_only_date(str(dt)) + mi.pubdate = dt + except: + pass - - -def get_cbz_metadata(stream): +def get_comic_metadata(stream, stream_type): # See http://code.google.com/p/comicbookinfo/wiki/Example - from calibre.utils.zipfile import ZipFile from calibre.ebooks.metadata import MetaInformation - import json - zf = ZipFile(stream) + comment = None + mi = MetaInformation(None, None) - if zf.comment: - m = json.loads(zf.comment) - if hasattr(m, 'keys'): - for cat in m.keys(): + + if stream_type == 'cbz': + from calibre.utils.zipfile import ZipFile + zf = ZipFile(stream) + comment = zf.comment + elif stream_type == 'cbr': + from calibre.utils.unrar import RARFile + f = RARFile(stream, get_comment=True) + comment = f.comment + + if comment: + import json + m = json.loads(comment) + if hasattr(m, 'iterkeys'): + for cat in m.iterkeys(): if cat.startswith('ComicBookInfo'): get_comic_book_info(m[cat], mi) + break return mi +