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/cli/search.py
src/novel_downloader/config/__init__.py
src/novel_downloader/config/adapter.py
src/novel_downloader/config/loader.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/registry.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/registry.py
src/novel_downloader/core/exporters/sfacg.py
src/novel_downloader/core/exporters/txt_util.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/fetchers/__init__.py
src/novel_downloader/core/fetchers/registry.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/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/interfaces/searcher.py
src/novel_downloader/core/parsers/__init__.py
src/novel_downloader/core/parsers/base.py
src/novel_downloader/core/parsers/biquge.py
src/novel_downloader/core/parsers/esjzone.py
src/novel_downloader/core/parsers/linovelib.py
src/novel_downloader/core/parsers/qianbi.py
src/novel_downloader/core/parsers/registry.py
src/novel_downloader/core/parsers/sfacg.py
src/novel_downloader/core/parsers/yamibo.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/searchers/__init__.py
src/novel_downloader/core/searchers/base.py
src/novel_downloader/core/searchers/biquge.py
src/novel_downloader/core/searchers/esjzone.py
src/novel_downloader/core/searchers/qianbi.py
src/novel_downloader/core/searchers/qidian.py
src/novel_downloader/core/searchers/registry.py
src/novel_downloader/locales/en.json
src/novel_downloader/locales/zh.json
src/novel_downloader/models/__init__.py
src/novel_downloader/models/chapter.py
src/novel_downloader/models/config.py
src/novel_downloader/models/login.py
src/novel_downloader/models/search.py
src/novel_downloader/models/types.py
src/novel_downloader/resources/config/settings.toml
src/novel_downloader/resources/css_styles/intro.css
src/novel_downloader/resources/css_styles/main.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/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/i18n.py
src/novel_downloader/utils/logger.py
src/novel_downloader/utils/network.py
src/novel_downloader/utils/state.py
src/novel_downloader/utils/epub/__init__.py
src/novel_downloader/utils/epub/builder.py
src/novel_downloader/utils/epub/constants.py
src/novel_downloader/utils/epub/documents.py
src/novel_downloader/utils/epub/models.py
src/novel_downloader/utils/epub/utils.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/hash_store.py
src/novel_downloader/utils/fontocr/hash_utils.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/fontocr/ocr_v3.py
src/novel_downloader/utils/text_utils/__init__.py
src/novel_downloader/utils/text_utils/diff_display.py
src/novel_downloader/utils/text_utils/numeric_conversion.py
src/novel_downloader/utils/text_utils/text_cleaner.py
src/novel_downloader/utils/text_utils/truncate_utils.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