From 96eee058d7bf82cd91552640e81c27259039455f Mon Sep 17 00:00:00 2001 From: Joseph Botosh Date: Mon, 30 Mar 2026 07:58:31 +0300 Subject: [PATCH] open *.fb2.zip files --- src/epy_reader/ebooks/fictionbook.py | 6 ++++++ src/epy_reader/utils.py | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) 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)