LICENSE
README.md
pyproject.toml
src/novel_downloader/__init__.py
src/novel_downloader.egg-info/PKG-INFO
src/novel_downloader.egg-info/SOURCES.txt
src/novel_downloader.egg-info/dependency_links.txt
src/novel_downloader.egg-info/entry_points.txt
src/novel_downloader.egg-info/requires.txt
src/novel_downloader.egg-info/top_level.txt
src/novel_downloader/cli/__init__.py
src/novel_downloader/cli/clean.py
src/novel_downloader/cli/config.py
src/novel_downloader/cli/download.py
src/novel_downloader/cli/export.py
src/novel_downloader/cli/main.py
src/novel_downloader/config/__init__.py
src/novel_downloader/config/adapter.py
src/novel_downloader/config/loader.py
src/novel_downloader/config/site_rules.py
src/novel_downloader/core/__init__.py
src/novel_downloader/core/downloaders/__init__.py
src/novel_downloader/core/downloaders/base.py
src/novel_downloader/core/downloaders/biquge.py
src/novel_downloader/core/downloaders/common.py
src/novel_downloader/core/downloaders/esjzone.py
src/novel_downloader/core/downloaders/linovelib.py
src/novel_downloader/core/downloaders/qianbi.py
src/novel_downloader/core/downloaders/qidian.py
src/novel_downloader/core/downloaders/sfacg.py
src/novel_downloader/core/downloaders/yamibo.py
src/novel_downloader/core/exporters/__init__.py
src/novel_downloader/core/exporters/base.py
src/novel_downloader/core/exporters/biquge.py
src/novel_downloader/core/exporters/epub_util.py
src/novel_downloader/core/exporters/esjzone.py
src/novel_downloader/core/exporters/qianbi.py
src/novel_downloader/core/exporters/qidian.py
src/novel_downloader/core/exporters/sfacg.py
src/novel_downloader/core/exporters/yamibo.py
src/novel_downloader/core/exporters/common/__init__.py
src/novel_downloader/core/exporters/common/epub.py
src/novel_downloader/core/exporters/common/main_exporter.py
src/novel_downloader/core/exporters/common/txt.py
src/novel_downloader/core/exporters/linovelib/__init__.py
src/novel_downloader/core/exporters/linovelib/epub.py
src/novel_downloader/core/exporters/linovelib/main_exporter.py
src/novel_downloader/core/exporters/linovelib/txt.py
src/novel_downloader/core/factory/__init__.py
src/novel_downloader/core/factory/downloader.py
src/novel_downloader/core/factory/exporter.py
src/novel_downloader/core/factory/fetcher.py
src/novel_downloader/core/factory/parser.py
src/novel_downloader/core/fetchers/__init__.py
src/novel_downloader/core/fetchers/base/__init__.py
src/novel_downloader/core/fetchers/base/browser.py
src/novel_downloader/core/fetchers/base/rate_limiter.py
src/novel_downloader/core/fetchers/base/session.py
src/novel_downloader/core/fetchers/biquge/__init__.py
src/novel_downloader/core/fetchers/biquge/browser.py
src/novel_downloader/core/fetchers/biquge/session.py
src/novel_downloader/core/fetchers/common/__init__.py
src/novel_downloader/core/fetchers/common/browser.py
src/novel_downloader/core/fetchers/common/session.py
src/novel_downloader/core/fetchers/esjzone/__init__.py
src/novel_downloader/core/fetchers/esjzone/browser.py
src/novel_downloader/core/fetchers/esjzone/session.py
src/novel_downloader/core/fetchers/linovelib/__init__.py
src/novel_downloader/core/fetchers/linovelib/browser.py
src/novel_downloader/core/fetchers/linovelib/session.py
src/novel_downloader/core/fetchers/qianbi/__init__.py
src/novel_downloader/core/fetchers/qianbi/browser.py
src/novel_downloader/core/fetchers/qianbi/session.py
src/novel_downloader/core/fetchers/qidian/__init__.py
src/novel_downloader/core/fetchers/qidian/browser.py
src/novel_downloader/core/fetchers/qidian/session.py
src/novel_downloader/core/fetchers/sfacg/__init__.py
src/novel_downloader/core/fetchers/sfacg/browser.py
src/novel_downloader/core/fetchers/sfacg/session.py
src/novel_downloader/core/fetchers/yamibo/__init__.py
src/novel_downloader/core/fetchers/yamibo/browser.py
src/novel_downloader/core/fetchers/yamibo/session.py
src/novel_downloader/core/interfaces/__init__.py
src/novel_downloader/core/interfaces/downloader.py
src/novel_downloader/core/interfaces/exporter.py
src/novel_downloader/core/interfaces/fetcher.py
src/novel_downloader/core/interfaces/parser.py
src/novel_downloader/core/parsers/__init__.py
src/novel_downloader/core/parsers/base.py
src/novel_downloader/core/parsers/biquge/__init__.py
src/novel_downloader/core/parsers/biquge/main_parser.py
src/novel_downloader/core/parsers/common/__init__.py
src/novel_downloader/core/parsers/common/helper.py
src/novel_downloader/core/parsers/common/main_parser.py
src/novel_downloader/core/parsers/esjzone/__init__.py
src/novel_downloader/core/parsers/esjzone/main_parser.py
src/novel_downloader/core/parsers/linovelib/__init__.py
src/novel_downloader/core/parsers/linovelib/main_parser.py
src/novel_downloader/core/parsers/qianbi/__init__.py
src/novel_downloader/core/parsers/qianbi/main_parser.py
src/novel_downloader/core/parsers/qidian/__init__.py
src/novel_downloader/core/parsers/qidian/book_info_parser.py
src/novel_downloader/core/parsers/qidian/chapter_encrypted.py
src/novel_downloader/core/parsers/qidian/chapter_normal.py
src/novel_downloader/core/parsers/qidian/chapter_router.py
src/novel_downloader/core/parsers/qidian/main_parser.py
src/novel_downloader/core/parsers/qidian/utils/__init__.py
src/novel_downloader/core/parsers/qidian/utils/decryptor_fetcher.py
src/novel_downloader/core/parsers/qidian/utils/helpers.py
src/novel_downloader/core/parsers/qidian/utils/node_decryptor.py
src/novel_downloader/core/parsers/sfacg/__init__.py
src/novel_downloader/core/parsers/sfacg/main_parser.py
src/novel_downloader/core/parsers/yamibo/__init__.py
src/novel_downloader/core/parsers/yamibo/main_parser.py
src/novel_downloader/locales/en.json
src/novel_downloader/locales/zh.json
src/novel_downloader/models/__init__.py
src/novel_downloader/models/browser.py
src/novel_downloader/models/chapter.py
src/novel_downloader/models/config.py
src/novel_downloader/models/login.py
src/novel_downloader/models/site_rules.py
src/novel_downloader/models/tasks.py
src/novel_downloader/models/types.py
src/novel_downloader/resources/config/settings.toml
src/novel_downloader/resources/css_styles/main.css
src/novel_downloader/resources/css_styles/volume-intro.css
src/novel_downloader/resources/images/volume_border.png
src/novel_downloader/resources/js_scripts/qidian_decrypt_node.js
src/novel_downloader/resources/json/linovelib_font_map.json
src/novel_downloader/resources/json/replace_word_map.json
src/novel_downloader/resources/text/blacklist.txt
src/novel_downloader/tui/__init__.py
src/novel_downloader/tui/app.py
src/novel_downloader/tui/main.py
src/novel_downloader/tui/screens/__init__.py
src/novel_downloader/tui/screens/home.py
src/novel_downloader/tui/screens/login.py
src/novel_downloader/tui/styles/home_layout.tcss
src/novel_downloader/tui/widgets/richlog_handler.py
src/novel_downloader/utils/__init__.py
src/novel_downloader/utils/cache.py
src/novel_downloader/utils/chapter_storage.py
src/novel_downloader/utils/constants.py
src/novel_downloader/utils/cookies.py
src/novel_downloader/utils/crypto_utils.py
src/novel_downloader/utils/hash_store.py
src/novel_downloader/utils/hash_utils.py
src/novel_downloader/utils/i18n.py
src/novel_downloader/utils/logger.py
src/novel_downloader/utils/network.py
src/novel_downloader/utils/state.py
src/novel_downloader/utils/file_utils/__init__.py
src/novel_downloader/utils/file_utils/io.py
src/novel_downloader/utils/file_utils/normalize.py
src/novel_downloader/utils/file_utils/sanitize.py
src/novel_downloader/utils/fontocr/__init__.py
src/novel_downloader/utils/fontocr/model_loader.py
src/novel_downloader/utils/fontocr/ocr_v1.py
src/novel_downloader/utils/fontocr/ocr_v2.py
src/novel_downloader/utils/text_utils/__init__.py
src/novel_downloader/utils/text_utils/chapter_formatting.py
src/novel_downloader/utils/text_utils/diff_display.py
src/novel_downloader/utils/text_utils/font_mapping.py
src/novel_downloader/utils/text_utils/text_cleaning.py
src/novel_downloader/utils/time_utils/__init__.py
src/novel_downloader/utils/time_utils/datetime_utils.py
src/novel_downloader/utils/time_utils/sleep_utils.py