LICENSE
README.md
pyproject.toml
src/novel_downloader/__init__.py
src/novel_downloader/__main__.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/apps/__init__.py
src/novel_downloader/apps/constants.py
src/novel_downloader/apps/cli/__init__.py
src/novel_downloader/apps/cli/main.py
src/novel_downloader/apps/cli/ui.py
src/novel_downloader/apps/cli/commands/__init__.py
src/novel_downloader/apps/cli/commands/base.py
src/novel_downloader/apps/cli/commands/clean.py
src/novel_downloader/apps/cli/commands/config.py
src/novel_downloader/apps/cli/commands/download.py
src/novel_downloader/apps/cli/commands/export.py
src/novel_downloader/apps/cli/commands/search.py
src/novel_downloader/apps/cli/handlers/__init__.py
src/novel_downloader/apps/cli/handlers/config.py
src/novel_downloader/apps/cli/handlers/download.py
src/novel_downloader/apps/cli/handlers/export.py
src/novel_downloader/apps/cli/handlers/login.py
src/novel_downloader/apps/web/__init__.py
src/novel_downloader/apps/web/main.py
src/novel_downloader/apps/web/components/__init__.py
src/novel_downloader/apps/web/components/navigation.py
src/novel_downloader/apps/web/pages/__init__.py
src/novel_downloader/apps/web/pages/download.py
src/novel_downloader/apps/web/pages/history.py
src/novel_downloader/apps/web/pages/progress.py
src/novel_downloader/apps/web/pages/search.py
src/novel_downloader/apps/web/services/__init__.py
src/novel_downloader/apps/web/services/client_dialog.py
src/novel_downloader/apps/web/services/cred_broker.py
src/novel_downloader/apps/web/services/cred_models.py
src/novel_downloader/apps/web/services/task_manager.py
src/novel_downloader/infra/__init__.py
src/novel_downloader/infra/cookies.py
src/novel_downloader/infra/http_defaults.py
src/novel_downloader/infra/i18n.py
src/novel_downloader/infra/logger.py
src/novel_downloader/infra/network.py
src/novel_downloader/infra/paths.py
src/novel_downloader/infra/config/__init__.py
src/novel_downloader/infra/config/adapter.py
src/novel_downloader/infra/config/file_io.py
src/novel_downloader/infra/fontocr/__init__.py
src/novel_downloader/infra/fontocr/core.py
src/novel_downloader/infra/fontocr/loader.py
src/novel_downloader/infra/jsbridge/__init__.py
src/novel_downloader/infra/jsbridge/decryptor.py
src/novel_downloader/infra/jsbridge/decryptor_fetcher.py
src/novel_downloader/infra/persistence/__init__.py
src/novel_downloader/infra/persistence/chapter_storage.py
src/novel_downloader/infra/persistence/state.py
src/novel_downloader/libs/__init__.py
src/novel_downloader/libs/book_url_resolver.py
src/novel_downloader/libs/time_utils.py
src/novel_downloader/libs/crypto/__init__.py
src/novel_downloader/libs/crypto/aes_util.py
src/novel_downloader/libs/crypto/aes_v1.py
src/novel_downloader/libs/crypto/aes_v2.py
src/novel_downloader/libs/crypto/rc4.py
src/novel_downloader/libs/epub/__init__.py
src/novel_downloader/libs/epub/builder.py
src/novel_downloader/libs/epub/constants.py
src/novel_downloader/libs/epub/documents.py
src/novel_downloader/libs/epub/models.py
src/novel_downloader/libs/epub/utils.py
src/novel_downloader/libs/filesystem/__init__.py
src/novel_downloader/libs/filesystem/file.py
src/novel_downloader/libs/filesystem/sanitize.py
src/novel_downloader/libs/textutils/__init__.py
src/novel_downloader/libs/textutils/numbers.py
src/novel_downloader/libs/textutils/text_cleaner.py
src/novel_downloader/libs/textutils/truncate.py
src/novel_downloader/locales/zh_CN/LC_MESSAGES/messages.mo
src/novel_downloader/plugins/__init__.py
src/novel_downloader/plugins/registry.py
src/novel_downloader/plugins/searching.py
src/novel_downloader/plugins/archived/deqixs/fetcher.py
src/novel_downloader/plugins/archived/deqixs/parser.py
src/novel_downloader/plugins/archived/deqixs/searcher.py
src/novel_downloader/plugins/archived/n8tsw/fetcher.py
src/novel_downloader/plugins/archived/n8tsw/parser.py
src/novel_downloader/plugins/archived/xiaoshuoge/fetcher.py
src/novel_downloader/plugins/archived/xiaoshuoge/parser.py
src/novel_downloader/plugins/archived/xiaoshuoge/searcher.py
src/novel_downloader/plugins/archived/xs63b/fetcher.py
src/novel_downloader/plugins/archived/xs63b/parser.py
src/novel_downloader/plugins/archived/xs63b/searcher.py
src/novel_downloader/plugins/base/__init__.py
src/novel_downloader/plugins/base/downloader.py
src/novel_downloader/plugins/base/exporter.py
src/novel_downloader/plugins/base/fetcher.py
src/novel_downloader/plugins/base/parser.py
src/novel_downloader/plugins/base/searcher.py
src/novel_downloader/plugins/common/downloader.py
src/novel_downloader/plugins/common/exporter.py
src/novel_downloader/plugins/protocols/__init__.py
src/novel_downloader/plugins/protocols/downloader.py
src/novel_downloader/plugins/protocols/exporter.py
src/novel_downloader/plugins/protocols/fetcher.py
src/novel_downloader/plugins/protocols/parser.py
src/novel_downloader/plugins/sites/__init__.py
src/novel_downloader/plugins/sites/aaatxt/__init__.py
src/novel_downloader/plugins/sites/aaatxt/fetcher.py
src/novel_downloader/plugins/sites/aaatxt/parser.py
src/novel_downloader/plugins/sites/aaatxt/searcher.py
src/novel_downloader/plugins/sites/b520/__init__.py
src/novel_downloader/plugins/sites/b520/fetcher.py
src/novel_downloader/plugins/sites/b520/parser.py
src/novel_downloader/plugins/sites/b520/searcher.py
src/novel_downloader/plugins/sites/biquge5/__init__.py
src/novel_downloader/plugins/sites/biquge5/fetcher.py
src/novel_downloader/plugins/sites/biquge5/parser.py
src/novel_downloader/plugins/sites/biquge5/searcher.py
src/novel_downloader/plugins/sites/biquguo/__init__.py
src/novel_downloader/plugins/sites/biquguo/fetcher.py
src/novel_downloader/plugins/sites/biquguo/parser.py
src/novel_downloader/plugins/sites/biquguo/searcher.py
src/novel_downloader/plugins/sites/biquyuedu/__init__.py
src/novel_downloader/plugins/sites/biquyuedu/fetcher.py
src/novel_downloader/plugins/sites/biquyuedu/parser.py
src/novel_downloader/plugins/sites/blqudu/__init__.py
src/novel_downloader/plugins/sites/blqudu/fetcher.py
src/novel_downloader/plugins/sites/blqudu/parser.py
src/novel_downloader/plugins/sites/bxwx9/__init__.py
src/novel_downloader/plugins/sites/bxwx9/fetcher.py
src/novel_downloader/plugins/sites/bxwx9/parser.py
src/novel_downloader/plugins/sites/bxwx9/searcher.py
src/novel_downloader/plugins/sites/ciluke/__init__.py
src/novel_downloader/plugins/sites/ciluke/fetcher.py
src/novel_downloader/plugins/sites/ciluke/parser.py
src/novel_downloader/plugins/sites/ciluke/searcher.py
src/novel_downloader/plugins/sites/dxmwx/__init__.py
src/novel_downloader/plugins/sites/dxmwx/fetcher.py
src/novel_downloader/plugins/sites/dxmwx/parser.py
src/novel_downloader/plugins/sites/dxmwx/searcher.py
src/novel_downloader/plugins/sites/esjzone/__init__.py
src/novel_downloader/plugins/sites/esjzone/fetcher.py
src/novel_downloader/plugins/sites/esjzone/parser.py
src/novel_downloader/plugins/sites/esjzone/searcher.py
src/novel_downloader/plugins/sites/fsshu/__init__.py
src/novel_downloader/plugins/sites/fsshu/fetcher.py
src/novel_downloader/plugins/sites/fsshu/parser.py
src/novel_downloader/plugins/sites/fsshu/searcher.py
src/novel_downloader/plugins/sites/guidaye/__init__.py
src/novel_downloader/plugins/sites/guidaye/fetcher.py
src/novel_downloader/plugins/sites/guidaye/parser.py
src/novel_downloader/plugins/sites/hetushu/__init__.py
src/novel_downloader/plugins/sites/hetushu/fetcher.py
src/novel_downloader/plugins/sites/hetushu/parser.py
src/novel_downloader/plugins/sites/hetushu/searcher.py
src/novel_downloader/plugins/sites/i25zw/__init__.py
src/novel_downloader/plugins/sites/i25zw/fetcher.py
src/novel_downloader/plugins/sites/i25zw/parser.py
src/novel_downloader/plugins/sites/i25zw/searcher.py
src/novel_downloader/plugins/sites/ixdzs8/__init__.py
src/novel_downloader/plugins/sites/ixdzs8/fetcher.py
src/novel_downloader/plugins/sites/ixdzs8/parser.py
src/novel_downloader/plugins/sites/ixdzs8/searcher.py
src/novel_downloader/plugins/sites/jpxs123/__init__.py
src/novel_downloader/plugins/sites/jpxs123/fetcher.py
src/novel_downloader/plugins/sites/jpxs123/parser.py
src/novel_downloader/plugins/sites/jpxs123/searcher.py
src/novel_downloader/plugins/sites/ktshu/__init__.py
src/novel_downloader/plugins/sites/ktshu/fetcher.py
src/novel_downloader/plugins/sites/ktshu/parser.py
src/novel_downloader/plugins/sites/ktshu/searcher.py
src/novel_downloader/plugins/sites/kunnu/__init__.py
src/novel_downloader/plugins/sites/kunnu/fetcher.py
src/novel_downloader/plugins/sites/kunnu/parser.py
src/novel_downloader/plugins/sites/laoyaoxs/__init__.py
src/novel_downloader/plugins/sites/laoyaoxs/fetcher.py
src/novel_downloader/plugins/sites/laoyaoxs/parser.py
src/novel_downloader/plugins/sites/laoyaoxs/searcher.py
src/novel_downloader/plugins/sites/lewenn/__init__.py
src/novel_downloader/plugins/sites/lewenn/fetcher.py
src/novel_downloader/plugins/sites/lewenn/parser.py
src/novel_downloader/plugins/sites/linovelib/__init__.py
src/novel_downloader/plugins/sites/linovelib/exporter.py
src/novel_downloader/plugins/sites/linovelib/fetcher.py
src/novel_downloader/plugins/sites/linovelib/parser.py
src/novel_downloader/plugins/sites/lnovel/__init__.py
src/novel_downloader/plugins/sites/lnovel/fetcher.py
src/novel_downloader/plugins/sites/lnovel/parser.py
src/novel_downloader/plugins/sites/mangg_com/__init__.py
src/novel_downloader/plugins/sites/mangg_com/fetcher.py
src/novel_downloader/plugins/sites/mangg_com/parser.py
src/novel_downloader/plugins/sites/mangg_net/__init__.py
src/novel_downloader/plugins/sites/mangg_net/fetcher.py
src/novel_downloader/plugins/sites/mangg_net/parser.py
src/novel_downloader/plugins/sites/mangg_net/searcher.py
src/novel_downloader/plugins/sites/n23ddw/__init__.py
src/novel_downloader/plugins/sites/n23ddw/fetcher.py
src/novel_downloader/plugins/sites/n23ddw/parser.py
src/novel_downloader/plugins/sites/n23ddw/searcher.py
src/novel_downloader/plugins/sites/n23qb/__init__.py
src/novel_downloader/plugins/sites/n23qb/downloader.py
src/novel_downloader/plugins/sites/n23qb/fetcher.py
src/novel_downloader/plugins/sites/n23qb/parser.py
src/novel_downloader/plugins/sites/n23qb/searcher.py
src/novel_downloader/plugins/sites/n37yq/__init__.py
src/novel_downloader/plugins/sites/n37yq/fetcher.py
src/novel_downloader/plugins/sites/n37yq/parser.py
src/novel_downloader/plugins/sites/n37yq/searcher.py
src/novel_downloader/plugins/sites/n37yue/__init__.py
src/novel_downloader/plugins/sites/n37yue/fetcher.py
src/novel_downloader/plugins/sites/n37yue/parser.py
src/novel_downloader/plugins/sites/n37yue/searcher.py
src/novel_downloader/plugins/sites/n71ge/__init__.py
src/novel_downloader/plugins/sites/n71ge/fetcher.py
src/novel_downloader/plugins/sites/n71ge/parser.py
src/novel_downloader/plugins/sites/n71ge/searcher.py
src/novel_downloader/plugins/sites/n8novel/__init__.py
src/novel_downloader/plugins/sites/n8novel/fetcher.py
src/novel_downloader/plugins/sites/n8novel/parser.py
src/novel_downloader/plugins/sites/n8novel/searcher.py
src/novel_downloader/plugins/sites/piaotia/__init__.py
src/novel_downloader/plugins/sites/piaotia/fetcher.py
src/novel_downloader/plugins/sites/piaotia/parser.py
src/novel_downloader/plugins/sites/piaotia/searcher.py
src/novel_downloader/plugins/sites/qbtr/__init__.py
src/novel_downloader/plugins/sites/qbtr/fetcher.py
src/novel_downloader/plugins/sites/qbtr/parser.py
src/novel_downloader/plugins/sites/qbtr/searcher.py
src/novel_downloader/plugins/sites/qidian/__init__.py
src/novel_downloader/plugins/sites/qidian/downloader.py
src/novel_downloader/plugins/sites/qidian/exporter.py
src/novel_downloader/plugins/sites/qidian/fetcher.py
src/novel_downloader/plugins/sites/qidian/parser.py
src/novel_downloader/plugins/sites/qidian/searcher.py
src/novel_downloader/plugins/sites/qqbook/__init__.py
src/novel_downloader/plugins/sites/qqbook/downloader.py
src/novel_downloader/plugins/sites/qqbook/exporter.py
src/novel_downloader/plugins/sites/qqbook/fetcher.py
src/novel_downloader/plugins/sites/qqbook/parser.py
src/novel_downloader/plugins/sites/quanben5/__init__.py
src/novel_downloader/plugins/sites/quanben5/fetcher.py
src/novel_downloader/plugins/sites/quanben5/parser.py
src/novel_downloader/plugins/sites/quanben5/searcher.py
src/novel_downloader/plugins/sites/sfacg/__init__.py
src/novel_downloader/plugins/sites/sfacg/downloader.py
src/novel_downloader/plugins/sites/sfacg/fetcher.py
src/novel_downloader/plugins/sites/sfacg/parser.py
src/novel_downloader/plugins/sites/shencou/__init__.py
src/novel_downloader/plugins/sites/shencou/fetcher.py
src/novel_downloader/plugins/sites/shencou/parser.py
src/novel_downloader/plugins/sites/shu111/__init__.py
src/novel_downloader/plugins/sites/shu111/fetcher.py
src/novel_downloader/plugins/sites/shu111/parser.py
src/novel_downloader/plugins/sites/shuhaige/__init__.py
src/novel_downloader/plugins/sites/shuhaige/fetcher.py
src/novel_downloader/plugins/sites/shuhaige/parser.py
src/novel_downloader/plugins/sites/shuhaige/searcher.py
src/novel_downloader/plugins/sites/sososhu/__init__.py
src/novel_downloader/plugins/sites/sososhu/searcher.py
src/novel_downloader/plugins/sites/tongrenquan/__init__.py
src/novel_downloader/plugins/sites/tongrenquan/fetcher.py
src/novel_downloader/plugins/sites/tongrenquan/parser.py
src/novel_downloader/plugins/sites/tongrenquan/searcher.py
src/novel_downloader/plugins/sites/trxs/__init__.py
src/novel_downloader/plugins/sites/trxs/fetcher.py
src/novel_downloader/plugins/sites/trxs/parser.py
src/novel_downloader/plugins/sites/trxs/searcher.py
src/novel_downloader/plugins/sites/ttkan/__init__.py
src/novel_downloader/plugins/sites/ttkan/fetcher.py
src/novel_downloader/plugins/sites/ttkan/parser.py
src/novel_downloader/plugins/sites/ttkan/searcher.py
src/novel_downloader/plugins/sites/wanbengo/__init__.py
src/novel_downloader/plugins/sites/wanbengo/fetcher.py
src/novel_downloader/plugins/sites/wanbengo/parser.py
src/novel_downloader/plugins/sites/wanbengo/searcher.py
src/novel_downloader/plugins/sites/xiguashuwu/__init__.py
src/novel_downloader/plugins/sites/xiguashuwu/fetcher.py
src/novel_downloader/plugins/sites/xiguashuwu/parser.py
src/novel_downloader/plugins/sites/xiguashuwu/searcher.py
src/novel_downloader/plugins/sites/xshbook/__init__.py
src/novel_downloader/plugins/sites/xshbook/fetcher.py
src/novel_downloader/plugins/sites/xshbook/parser.py
src/novel_downloader/plugins/sites/xshbook/searcher.py
src/novel_downloader/plugins/sites/yamibo/__init__.py
src/novel_downloader/plugins/sites/yamibo/fetcher.py
src/novel_downloader/plugins/sites/yamibo/parser.py
src/novel_downloader/plugins/sites/yibige/__init__.py
src/novel_downloader/plugins/sites/yibige/fetcher.py
src/novel_downloader/plugins/sites/yibige/parser.py
src/novel_downloader/plugins/sites/yodu/__init__.py
src/novel_downloader/plugins/sites/yodu/fetcher.py
src/novel_downloader/plugins/sites/yodu/parser.py
src/novel_downloader/plugins/sites/yodu/searcher.py
src/novel_downloader/plugins/sites/zhenhunxiaoshuo/__init__.py
src/novel_downloader/plugins/sites/zhenhunxiaoshuo/fetcher.py
src/novel_downloader/plugins/sites/zhenhunxiaoshuo/parser.py
src/novel_downloader/plugins/utils/__init__.py
src/novel_downloader/plugins/utils/rate_limiter.py
src/novel_downloader/plugins/utils/signals.py
src/novel_downloader/resources/config/settings.sample.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/images/volume_border_tinify.png
src/novel_downloader/resources/js_scripts/expr_to_json.js
src/novel_downloader/resources/js_scripts/qidian_decrypt_node.js
src/novel_downloader/resources/js_scripts/qq_decrypt_node.js
src/novel_downloader/resources/json/linovelib.json
src/novel_downloader/resources/json/linovelib_pctheme.json
src/novel_downloader/resources/json/xiguashuwu.json
src/novel_downloader/resources/json/yodu.json
src/novel_downloader/schemas/__init__.py
src/novel_downloader/schemas/book.py
src/novel_downloader/schemas/config.py
src/novel_downloader/schemas/login.py
src/novel_downloader/schemas/search.py