diff --git a/oml/item/models.py b/oml/item/models.py index 149a678..72d6b8e 100644 --- a/oml/item/models.py +++ b/oml/item/models.py @@ -837,13 +837,13 @@ def update_sort_table(): def download_cover(id): key = 'cover:%s' % id - cover = None with db.session(): i = Item.get(id) if i: url = i.meta.get('cover') else: url = None + cover = None logger.debug('download cover %s %s', id, url) ratio = None diff --git a/oml/media/cbr.py b/oml/media/cbr.py index 0735d32..a1840a3 100644 --- a/oml/media/cbr.py +++ b/oml/media/cbr.py @@ -1,39 +1,19 @@ # -*- coding: utf-8 -*- import logging import os -import zipfile import ox logger = logging.getLogger(__name__) + IMAGE_EXTENSIONS = ['.jpg', '.png', '.gif'] - def filter_images(files): - return [f for f in files if os.path.splitext(f)[-1].lower() in IMAGE_EXTENSIONS] - -def detect_format(path): - with open(path, 'rb') as fd: - head = fd.read(10) - if head[:2] == b'PK': - return 'cbz' - if head[:3] == b'Rar': - return 'cbr' - logger.debug('unknown cbr/cbz file %s - %s', head, path) - return 'unknown' + return [f for f in files if os.path.splitext(f)[-1] in IMAGE_EXTENSION] def cover(path): - format = detect_format(path) - if format == 'cbz': - cover = cover_cbz(path) - elif format == 'cbr': - cover = cover_cbr(path) - else: - cover = None - return cover - -def cover_cbr(path): data = None + #open rar file and extract first page here try: from unrar import rarfile rar = rarfile.RarFile(path) @@ -43,53 +23,12 @@ def cover_cbr(path): cover = ox.sorted_strings(files)[0] data = rar.read(cover) except: - logger.debug('invalid cbr file %s', path) data = None return data -def cover_cbz(path): - data = None - logger.debug('cover %s', path) - data = None - try: - z = zipfile.ZipFile(path) - except zipfile.BadZipFile: - logger.debug('invalid cbz file %s', path) - return data - files = [f.filename for f in z.filelist] - files = filter_images(files) - if files: - cover = ox.sorted_strings(files)[0] - try: - data = z.read(cover) - except: - data = None - return data - -def get_pages(path): - files = [] - format = detect_format(path) - if format == 'cbz': - try: - z = zipfile.ZipFile(path) - except zipfile.BadZipFile: - logger.debug('invalid cbz file %s', path) - return data - files = [f.filename for f in z.filelist] - elif format == 'cbr': - try: - from unrar import rarfile - rar = rarfile.RarFile(path) - files = rar.namelist() - except: - pass - files = filter_images(files) - return len(files) - - def info(path): data = {} data['title'] = os.path.splitext(os.path.basename(path))[0] - data['pages'] = get_pages(path) + #data['pages'] = fixme read rar to count pages return data diff --git a/oml/media/cbz.py b/oml/media/cbz.py index 1428292..0e71475 100644 --- a/oml/media/cbz.py +++ b/oml/media/cbz.py @@ -1,3 +1,36 @@ # -*- coding: utf-8 -*- -from .cbr import cover, info +import logging +import os +import zipfile + +import ox + +from .cbr import filter_images + +logger = logging.getLogger(__name__) + +def cover(path): + data = None + logger.debug('cover %s', path) + data = None + try: + z = zipfile.ZipFile(path) + except zipfile.BadZipFile: + logger.debug('invalid zbc file %s', path) + return data + files = [f.filename for f in z.filelist] + files = filter_images(files) + if files: + cover = ox.sorted_strings(files)[0] + try: + data = z.read(cover) + except: + data = None + return data + +def info(path): + data = {} + data['title'] = os.path.splitext(os.path.basename(path))[0] + #data['pages'] = fixme read rar to count pages + return data