diff --git a/src/epy_reader/ebooks/fictionbook.py b/src/epy_reader/ebooks/fictionbook.py index 35611b2..1fb7500 100644 --- a/src/epy_reader/ebooks/fictionbook.py +++ b/src/epy_reader/ebooks/fictionbook.py @@ -1,5 +1,6 @@ import base64 import os +import zipfile import xml.etree.ElementTree as ET from typing import List, Tuple, Union @@ -14,6 +15,11 @@ def __init__(self, filefb: str): self.path = os.path.abspath(filefb) self.file = filefb + if zipfile.is_zipfile(filefb): + with zipfile.ZipFile(filefb) as z: + if info := z.infolist(): + self.file = z.open(info[0]) + # populate these attribute # by calling self.initialize() self.root: ET.Element diff --git a/src/epy_reader/utils.py b/src/epy_reader/utils.py index bb24106..a2ee4b6 100644 --- a/src/epy_reader/utils.py +++ b/src/epy_reader/utils.py @@ -14,12 +14,12 @@ def get_ebook_obj(filepath: str) -> Ebook: - file_ext = os.path.splitext(filepath)[1].lower() + file_name, file_ext = os.path.splitext(filepath.lower()) if is_url(filepath): return URL(filepath) elif file_ext in {".epub", ".epub3"}: return Epub(filepath) - elif file_ext == ".fb2": + elif file_ext == ".fb2" or file_ext == ".zip" and file_name.endswith(".fb2"): return FictionBook(filepath) elif file_ext == ".mobi": return Mobi(filepath)