novel-downloader 1.4.3__tar.gz → 1.4.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {novel_downloader-1.4.3 → novel_downloader-1.4.5}/PKG-INFO +1 -1
- {novel_downloader-1.4.3 → novel_downloader-1.4.5}/pyproject.toml +4 -2
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/__init__.py +1 -1
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/qidian/browser.py +2 -2
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/qidian/session.py +2 -1
- novel_downloader-1.4.5/src/novel_downloader/core/parsers/qidian/book_info_parser.py +90 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/tui/screens/login.py +1 -1
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/time_utils/datetime_utils.py +1 -1
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader.egg-info/PKG-INFO +1 -1
- novel_downloader-1.4.5/src/novel_downloader.egg-info/SOURCES.txt +168 -0
- novel_downloader-1.4.3/novel_downloader/core/parsers/qidian/book_info_parser.py +0 -113
- novel_downloader-1.4.3/novel_downloader.egg-info/SOURCES.txt +0 -168
- {novel_downloader-1.4.3 → novel_downloader-1.4.5}/LICENSE +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5}/README.md +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5}/setup.cfg +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/cli/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/cli/clean.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/cli/config.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/cli/download.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/cli/export.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/cli/main.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/config/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/config/adapter.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/config/loader.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/config/site_rules.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/downloaders/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/downloaders/base.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/downloaders/biquge.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/downloaders/common.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/downloaders/esjzone.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/downloaders/linovelib.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/downloaders/qianbi.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/downloaders/qidian.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/downloaders/sfacg.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/downloaders/yamibo.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/base.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/biquge.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/common/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/common/epub.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/common/main_exporter.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/common/txt.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/epub_util.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/esjzone.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/linovelib/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/linovelib/epub.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/linovelib/main_exporter.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/linovelib/txt.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/qianbi.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/qidian.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/sfacg.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/exporters/yamibo.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/factory/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/factory/downloader.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/factory/exporter.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/factory/fetcher.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/factory/parser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/base/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/base/browser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/base/rate_limiter.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/base/session.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/biquge/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/biquge/browser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/biquge/session.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/common/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/common/browser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/common/session.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/esjzone/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/esjzone/browser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/esjzone/session.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/linovelib/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/linovelib/browser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/linovelib/session.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/qianbi/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/qianbi/browser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/qianbi/session.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/qidian/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/sfacg/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/sfacg/browser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/sfacg/session.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/yamibo/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/yamibo/browser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/fetchers/yamibo/session.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/interfaces/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/interfaces/downloader.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/interfaces/exporter.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/interfaces/fetcher.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/interfaces/parser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/base.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/biquge/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/biquge/main_parser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/common/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/common/helper.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/common/main_parser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/esjzone/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/esjzone/main_parser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/linovelib/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/linovelib/main_parser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/qianbi/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/qianbi/main_parser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/qidian/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/qidian/chapter_encrypted.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/qidian/chapter_normal.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/qidian/chapter_router.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/qidian/main_parser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/qidian/utils/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/qidian/utils/decryptor_fetcher.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/qidian/utils/helpers.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/qidian/utils/node_decryptor.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/sfacg/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/sfacg/main_parser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/yamibo/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/core/parsers/yamibo/main_parser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/locales/en.json +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/locales/zh.json +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/models/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/models/browser.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/models/chapter.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/models/config.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/models/login.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/models/site_rules.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/models/tasks.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/models/types.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/resources/config/settings.toml +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/resources/css_styles/main.css +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/resources/css_styles/volume-intro.css +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/resources/images/volume_border.png +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/resources/js_scripts/qidian_decrypt_node.js +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/resources/json/linovelib_font_map.json +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/resources/json/replace_word_map.json +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/resources/text/blacklist.txt +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/tui/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/tui/app.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/tui/main.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/tui/screens/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/tui/screens/home.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/tui/styles/home_layout.tcss +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/tui/widgets/richlog_handler.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/cache.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/chapter_storage.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/constants.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/cookies.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/crypto_utils.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/file_utils/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/file_utils/io.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/file_utils/normalize.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/file_utils/sanitize.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/fontocr/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/fontocr/model_loader.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/fontocr/ocr_v1.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/fontocr/ocr_v2.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/hash_store.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/hash_utils.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/i18n.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/logger.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/network.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/state.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/text_utils/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/text_utils/chapter_formatting.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/text_utils/diff_display.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/text_utils/font_mapping.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/text_utils/text_cleaning.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/time_utils/__init__.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader/utils/time_utils/sleep_utils.py +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader.egg-info/dependency_links.txt +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader.egg-info/entry_points.txt +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader.egg-info/requires.txt +0 -0
- {novel_downloader-1.4.3 → novel_downloader-1.4.5/src}/novel_downloader.egg-info/top_level.txt +0 -0
@@ -68,6 +68,7 @@ requires = ["setuptools>=61.0", "wheel"]
|
|
68
68
|
build-backend = "setuptools.build_meta"
|
69
69
|
|
70
70
|
[tool.setuptools.packages.find]
|
71
|
+
where = ["src"]
|
71
72
|
include = ["novel_downloader", "novel_downloader.*"]
|
72
73
|
|
73
74
|
[tool.setuptools.package-data]
|
@@ -110,13 +111,14 @@ strict = true
|
|
110
111
|
[tool.pytest.ini_options]
|
111
112
|
minversion = "7.1"
|
112
113
|
addopts = "--strict-markers"
|
114
|
+
pythonpath = ["src"]
|
113
115
|
testpaths = ["tests"]
|
114
116
|
|
115
117
|
[tool.commitizen]
|
116
118
|
name = "cz_conventional_commits"
|
117
|
-
version = "1.4.
|
119
|
+
version = "1.4.5"
|
118
120
|
version_files = [
|
119
|
-
"novel_downloader/__init__.py"
|
121
|
+
"src/novel_downloader/__init__.py"
|
120
122
|
]
|
121
123
|
update_changelog_on_bump = true
|
122
124
|
changelog_file = "CHANGELOG.md"
|
@@ -22,8 +22,8 @@ class QidianBrowser(BaseBrowser):
|
|
22
22
|
|
23
23
|
HOMEPAGE_URL = "https://www.qidian.com/"
|
24
24
|
BOOKCASE_URL = "https://my.qidian.com/bookcase/"
|
25
|
-
BOOK_INFO_URL = "https://book.qidian.com/info/{book_id}/"
|
26
|
-
|
25
|
+
# BOOK_INFO_URL = "https://book.qidian.com/info/{book_id}/"
|
26
|
+
BOOK_INFO_URL = "https://www.qidian.com/book/{book_id}/"
|
27
27
|
CHAPTER_URL = "https://www.qidian.com/chapter/{book_id}/{chapter_id}/"
|
28
28
|
|
29
29
|
LOGIN_URL = "https://passport.qidian.com/"
|
@@ -27,7 +27,8 @@ class QidianSession(BaseSession):
|
|
27
27
|
|
28
28
|
HOMEPAGE_URL = "https://www.qidian.com/"
|
29
29
|
BOOKCASE_URL = "https://my.qidian.com/bookcase/"
|
30
|
-
BOOK_INFO_URL = "https://book.qidian.com/info/{book_id}/"
|
30
|
+
# BOOK_INFO_URL = "https://book.qidian.com/info/{book_id}/"
|
31
|
+
BOOK_INFO_URL = "https://www.qidian.com/book/{book_id}/"
|
31
32
|
CHAPTER_URL = "https://www.qidian.com/chapter/{book_id}/{chapter_id}/"
|
32
33
|
|
33
34
|
LOGIN_URL = "https://passport.qidian.com/"
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
novel_downloader.core.parsers.qidian.book_info_parser
|
4
|
+
-----------------------------------------------------
|
5
|
+
|
6
|
+
This module provides parsing of Qidian book info pages.
|
7
|
+
|
8
|
+
It extracts metadata such as title, author, cover URL, update
|
9
|
+
time, status, word count, summary, and volume-chapter structure.
|
10
|
+
"""
|
11
|
+
|
12
|
+
import logging
|
13
|
+
import re
|
14
|
+
from datetime import datetime
|
15
|
+
from typing import Any
|
16
|
+
|
17
|
+
from lxml import html
|
18
|
+
|
19
|
+
logger = logging.getLogger(__name__)
|
20
|
+
|
21
|
+
|
22
|
+
def _chapter_url_to_id(url: str) -> str:
|
23
|
+
return url.rstrip("/").split("/")[-1]
|
24
|
+
|
25
|
+
|
26
|
+
def parse_book_info(html_str: str) -> dict[str, Any]:
|
27
|
+
"""
|
28
|
+
Extract metadata: title, author, cover_url, update_time, status,
|
29
|
+
word_count, summary, and volumes with chapters.
|
30
|
+
|
31
|
+
:param html_str: Raw HTML of the book info page.
|
32
|
+
:return: A dict containing book metadata.
|
33
|
+
"""
|
34
|
+
info: dict[str, Any] = {}
|
35
|
+
try:
|
36
|
+
doc = html.fromstring(html_str)
|
37
|
+
|
38
|
+
info["book_name"] = doc.xpath('string(//h1[@id="bookName"])').strip()
|
39
|
+
|
40
|
+
info["author"] = doc.xpath('string(//a[@class="writer-name"])').strip()
|
41
|
+
|
42
|
+
book_id = doc.xpath('//a[@id="bookImg"]/@data-bid')[0]
|
43
|
+
info[
|
44
|
+
"cover_url"
|
45
|
+
] = f"https://bookcover.yuewen.com/qdbimg/349573/{book_id}/600.webp"
|
46
|
+
|
47
|
+
ut = (
|
48
|
+
doc.xpath('string(//span[@class="update-time"])')
|
49
|
+
.replace("更新时间:", "")
|
50
|
+
.strip()
|
51
|
+
)
|
52
|
+
if re.match(r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$", ut):
|
53
|
+
info["update_time"] = ut
|
54
|
+
else:
|
55
|
+
info["update_time"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
56
|
+
|
57
|
+
info["serial_status"] = doc.xpath(
|
58
|
+
'string(//p[@class="book-attribute"]/span[1])'
|
59
|
+
).strip()
|
60
|
+
|
61
|
+
tags = doc.xpath('//p[contains(@class,"all-label")]//a/text()')
|
62
|
+
info["tags"] = [t.strip() for t in tags if t.strip()]
|
63
|
+
|
64
|
+
info["word_count"] = doc.xpath('string(//p[@class="count"]/em[1])').strip()
|
65
|
+
|
66
|
+
summary = doc.xpath('string(//p[@class="intro"])').strip()
|
67
|
+
info["summary_brief"] = summary
|
68
|
+
|
69
|
+
raw = doc.xpath('//p[@id="book-intro-detail"]//text()')
|
70
|
+
info["summary"] = "\n".join(line.strip() for line in raw if line.strip())
|
71
|
+
|
72
|
+
volumes = []
|
73
|
+
for vol in doc.xpath('//div[@id="allCatalog"]//div[@class="catalog-volume"]'):
|
74
|
+
vol_name = vol.xpath('string(.//h3[@class="volume-name"])').strip()
|
75
|
+
vol_name = vol_name.split(chr(183))[0].strip()
|
76
|
+
chapters = []
|
77
|
+
for li in vol.xpath('.//ul[contains(@class,"volume-chapters")]/li'):
|
78
|
+
a = li.xpath('.//a[@class="chapter-name"]')[0]
|
79
|
+
title = a.text.strip()
|
80
|
+
url = a.get("href")
|
81
|
+
chapters.append(
|
82
|
+
{"title": title, "url": url, "chapterId": _chapter_url_to_id(url)}
|
83
|
+
)
|
84
|
+
volumes.append({"volume_name": vol_name, "chapters": chapters})
|
85
|
+
info["volumes"] = volumes
|
86
|
+
|
87
|
+
except Exception as e:
|
88
|
+
logger.warning("[Parser] Error parsing book info: %s", e)
|
89
|
+
|
90
|
+
return info
|
@@ -0,0 +1,168 @@
|
|
1
|
+
LICENSE
|
2
|
+
README.md
|
3
|
+
pyproject.toml
|
4
|
+
src/novel_downloader/__init__.py
|
5
|
+
src/novel_downloader.egg-info/PKG-INFO
|
6
|
+
src/novel_downloader.egg-info/SOURCES.txt
|
7
|
+
src/novel_downloader.egg-info/dependency_links.txt
|
8
|
+
src/novel_downloader.egg-info/entry_points.txt
|
9
|
+
src/novel_downloader.egg-info/requires.txt
|
10
|
+
src/novel_downloader.egg-info/top_level.txt
|
11
|
+
src/novel_downloader/cli/__init__.py
|
12
|
+
src/novel_downloader/cli/clean.py
|
13
|
+
src/novel_downloader/cli/config.py
|
14
|
+
src/novel_downloader/cli/download.py
|
15
|
+
src/novel_downloader/cli/export.py
|
16
|
+
src/novel_downloader/cli/main.py
|
17
|
+
src/novel_downloader/config/__init__.py
|
18
|
+
src/novel_downloader/config/adapter.py
|
19
|
+
src/novel_downloader/config/loader.py
|
20
|
+
src/novel_downloader/config/site_rules.py
|
21
|
+
src/novel_downloader/core/__init__.py
|
22
|
+
src/novel_downloader/core/downloaders/__init__.py
|
23
|
+
src/novel_downloader/core/downloaders/base.py
|
24
|
+
src/novel_downloader/core/downloaders/biquge.py
|
25
|
+
src/novel_downloader/core/downloaders/common.py
|
26
|
+
src/novel_downloader/core/downloaders/esjzone.py
|
27
|
+
src/novel_downloader/core/downloaders/linovelib.py
|
28
|
+
src/novel_downloader/core/downloaders/qianbi.py
|
29
|
+
src/novel_downloader/core/downloaders/qidian.py
|
30
|
+
src/novel_downloader/core/downloaders/sfacg.py
|
31
|
+
src/novel_downloader/core/downloaders/yamibo.py
|
32
|
+
src/novel_downloader/core/exporters/__init__.py
|
33
|
+
src/novel_downloader/core/exporters/base.py
|
34
|
+
src/novel_downloader/core/exporters/biquge.py
|
35
|
+
src/novel_downloader/core/exporters/epub_util.py
|
36
|
+
src/novel_downloader/core/exporters/esjzone.py
|
37
|
+
src/novel_downloader/core/exporters/qianbi.py
|
38
|
+
src/novel_downloader/core/exporters/qidian.py
|
39
|
+
src/novel_downloader/core/exporters/sfacg.py
|
40
|
+
src/novel_downloader/core/exporters/yamibo.py
|
41
|
+
src/novel_downloader/core/exporters/common/__init__.py
|
42
|
+
src/novel_downloader/core/exporters/common/epub.py
|
43
|
+
src/novel_downloader/core/exporters/common/main_exporter.py
|
44
|
+
src/novel_downloader/core/exporters/common/txt.py
|
45
|
+
src/novel_downloader/core/exporters/linovelib/__init__.py
|
46
|
+
src/novel_downloader/core/exporters/linovelib/epub.py
|
47
|
+
src/novel_downloader/core/exporters/linovelib/main_exporter.py
|
48
|
+
src/novel_downloader/core/exporters/linovelib/txt.py
|
49
|
+
src/novel_downloader/core/factory/__init__.py
|
50
|
+
src/novel_downloader/core/factory/downloader.py
|
51
|
+
src/novel_downloader/core/factory/exporter.py
|
52
|
+
src/novel_downloader/core/factory/fetcher.py
|
53
|
+
src/novel_downloader/core/factory/parser.py
|
54
|
+
src/novel_downloader/core/fetchers/__init__.py
|
55
|
+
src/novel_downloader/core/fetchers/base/__init__.py
|
56
|
+
src/novel_downloader/core/fetchers/base/browser.py
|
57
|
+
src/novel_downloader/core/fetchers/base/rate_limiter.py
|
58
|
+
src/novel_downloader/core/fetchers/base/session.py
|
59
|
+
src/novel_downloader/core/fetchers/biquge/__init__.py
|
60
|
+
src/novel_downloader/core/fetchers/biquge/browser.py
|
61
|
+
src/novel_downloader/core/fetchers/biquge/session.py
|
62
|
+
src/novel_downloader/core/fetchers/common/__init__.py
|
63
|
+
src/novel_downloader/core/fetchers/common/browser.py
|
64
|
+
src/novel_downloader/core/fetchers/common/session.py
|
65
|
+
src/novel_downloader/core/fetchers/esjzone/__init__.py
|
66
|
+
src/novel_downloader/core/fetchers/esjzone/browser.py
|
67
|
+
src/novel_downloader/core/fetchers/esjzone/session.py
|
68
|
+
src/novel_downloader/core/fetchers/linovelib/__init__.py
|
69
|
+
src/novel_downloader/core/fetchers/linovelib/browser.py
|
70
|
+
src/novel_downloader/core/fetchers/linovelib/session.py
|
71
|
+
src/novel_downloader/core/fetchers/qianbi/__init__.py
|
72
|
+
src/novel_downloader/core/fetchers/qianbi/browser.py
|
73
|
+
src/novel_downloader/core/fetchers/qianbi/session.py
|
74
|
+
src/novel_downloader/core/fetchers/qidian/__init__.py
|
75
|
+
src/novel_downloader/core/fetchers/qidian/browser.py
|
76
|
+
src/novel_downloader/core/fetchers/qidian/session.py
|
77
|
+
src/novel_downloader/core/fetchers/sfacg/__init__.py
|
78
|
+
src/novel_downloader/core/fetchers/sfacg/browser.py
|
79
|
+
src/novel_downloader/core/fetchers/sfacg/session.py
|
80
|
+
src/novel_downloader/core/fetchers/yamibo/__init__.py
|
81
|
+
src/novel_downloader/core/fetchers/yamibo/browser.py
|
82
|
+
src/novel_downloader/core/fetchers/yamibo/session.py
|
83
|
+
src/novel_downloader/core/interfaces/__init__.py
|
84
|
+
src/novel_downloader/core/interfaces/downloader.py
|
85
|
+
src/novel_downloader/core/interfaces/exporter.py
|
86
|
+
src/novel_downloader/core/interfaces/fetcher.py
|
87
|
+
src/novel_downloader/core/interfaces/parser.py
|
88
|
+
src/novel_downloader/core/parsers/__init__.py
|
89
|
+
src/novel_downloader/core/parsers/base.py
|
90
|
+
src/novel_downloader/core/parsers/biquge/__init__.py
|
91
|
+
src/novel_downloader/core/parsers/biquge/main_parser.py
|
92
|
+
src/novel_downloader/core/parsers/common/__init__.py
|
93
|
+
src/novel_downloader/core/parsers/common/helper.py
|
94
|
+
src/novel_downloader/core/parsers/common/main_parser.py
|
95
|
+
src/novel_downloader/core/parsers/esjzone/__init__.py
|
96
|
+
src/novel_downloader/core/parsers/esjzone/main_parser.py
|
97
|
+
src/novel_downloader/core/parsers/linovelib/__init__.py
|
98
|
+
src/novel_downloader/core/parsers/linovelib/main_parser.py
|
99
|
+
src/novel_downloader/core/parsers/qianbi/__init__.py
|
100
|
+
src/novel_downloader/core/parsers/qianbi/main_parser.py
|
101
|
+
src/novel_downloader/core/parsers/qidian/__init__.py
|
102
|
+
src/novel_downloader/core/parsers/qidian/book_info_parser.py
|
103
|
+
src/novel_downloader/core/parsers/qidian/chapter_encrypted.py
|
104
|
+
src/novel_downloader/core/parsers/qidian/chapter_normal.py
|
105
|
+
src/novel_downloader/core/parsers/qidian/chapter_router.py
|
106
|
+
src/novel_downloader/core/parsers/qidian/main_parser.py
|
107
|
+
src/novel_downloader/core/parsers/qidian/utils/__init__.py
|
108
|
+
src/novel_downloader/core/parsers/qidian/utils/decryptor_fetcher.py
|
109
|
+
src/novel_downloader/core/parsers/qidian/utils/helpers.py
|
110
|
+
src/novel_downloader/core/parsers/qidian/utils/node_decryptor.py
|
111
|
+
src/novel_downloader/core/parsers/sfacg/__init__.py
|
112
|
+
src/novel_downloader/core/parsers/sfacg/main_parser.py
|
113
|
+
src/novel_downloader/core/parsers/yamibo/__init__.py
|
114
|
+
src/novel_downloader/core/parsers/yamibo/main_parser.py
|
115
|
+
src/novel_downloader/locales/en.json
|
116
|
+
src/novel_downloader/locales/zh.json
|
117
|
+
src/novel_downloader/models/__init__.py
|
118
|
+
src/novel_downloader/models/browser.py
|
119
|
+
src/novel_downloader/models/chapter.py
|
120
|
+
src/novel_downloader/models/config.py
|
121
|
+
src/novel_downloader/models/login.py
|
122
|
+
src/novel_downloader/models/site_rules.py
|
123
|
+
src/novel_downloader/models/tasks.py
|
124
|
+
src/novel_downloader/models/types.py
|
125
|
+
src/novel_downloader/resources/config/settings.toml
|
126
|
+
src/novel_downloader/resources/css_styles/main.css
|
127
|
+
src/novel_downloader/resources/css_styles/volume-intro.css
|
128
|
+
src/novel_downloader/resources/images/volume_border.png
|
129
|
+
src/novel_downloader/resources/js_scripts/qidian_decrypt_node.js
|
130
|
+
src/novel_downloader/resources/json/linovelib_font_map.json
|
131
|
+
src/novel_downloader/resources/json/replace_word_map.json
|
132
|
+
src/novel_downloader/resources/text/blacklist.txt
|
133
|
+
src/novel_downloader/tui/__init__.py
|
134
|
+
src/novel_downloader/tui/app.py
|
135
|
+
src/novel_downloader/tui/main.py
|
136
|
+
src/novel_downloader/tui/screens/__init__.py
|
137
|
+
src/novel_downloader/tui/screens/home.py
|
138
|
+
src/novel_downloader/tui/screens/login.py
|
139
|
+
src/novel_downloader/tui/styles/home_layout.tcss
|
140
|
+
src/novel_downloader/tui/widgets/richlog_handler.py
|
141
|
+
src/novel_downloader/utils/__init__.py
|
142
|
+
src/novel_downloader/utils/cache.py
|
143
|
+
src/novel_downloader/utils/chapter_storage.py
|
144
|
+
src/novel_downloader/utils/constants.py
|
145
|
+
src/novel_downloader/utils/cookies.py
|
146
|
+
src/novel_downloader/utils/crypto_utils.py
|
147
|
+
src/novel_downloader/utils/hash_store.py
|
148
|
+
src/novel_downloader/utils/hash_utils.py
|
149
|
+
src/novel_downloader/utils/i18n.py
|
150
|
+
src/novel_downloader/utils/logger.py
|
151
|
+
src/novel_downloader/utils/network.py
|
152
|
+
src/novel_downloader/utils/state.py
|
153
|
+
src/novel_downloader/utils/file_utils/__init__.py
|
154
|
+
src/novel_downloader/utils/file_utils/io.py
|
155
|
+
src/novel_downloader/utils/file_utils/normalize.py
|
156
|
+
src/novel_downloader/utils/file_utils/sanitize.py
|
157
|
+
src/novel_downloader/utils/fontocr/__init__.py
|
158
|
+
src/novel_downloader/utils/fontocr/model_loader.py
|
159
|
+
src/novel_downloader/utils/fontocr/ocr_v1.py
|
160
|
+
src/novel_downloader/utils/fontocr/ocr_v2.py
|
161
|
+
src/novel_downloader/utils/text_utils/__init__.py
|
162
|
+
src/novel_downloader/utils/text_utils/chapter_formatting.py
|
163
|
+
src/novel_downloader/utils/text_utils/diff_display.py
|
164
|
+
src/novel_downloader/utils/text_utils/font_mapping.py
|
165
|
+
src/novel_downloader/utils/text_utils/text_cleaning.py
|
166
|
+
src/novel_downloader/utils/time_utils/__init__.py
|
167
|
+
src/novel_downloader/utils/time_utils/datetime_utils.py
|
168
|
+
src/novel_downloader/utils/time_utils/sleep_utils.py
|
@@ -1,113 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
novel_downloader.core.parsers.qidian.book_info_parser
|
4
|
-
-----------------------------------------------------
|
5
|
-
|
6
|
-
This module provides parsing of Qidian book info pages.
|
7
|
-
|
8
|
-
It extracts metadata such as title, author, cover URL, update
|
9
|
-
time, status, word count, summary, and volume-chapter structure.
|
10
|
-
"""
|
11
|
-
|
12
|
-
import logging
|
13
|
-
from typing import Any
|
14
|
-
|
15
|
-
from lxml import html
|
16
|
-
|
17
|
-
logger = logging.getLogger(__name__)
|
18
|
-
|
19
|
-
_AUTHOR_XPATH = (
|
20
|
-
'string(//div[contains(@class, "book-info")]//a[contains(@class, "writer")])'
|
21
|
-
)
|
22
|
-
|
23
|
-
|
24
|
-
def _chapter_url_to_id(url: str) -> str:
|
25
|
-
return url.rstrip("/").split("/")[-1]
|
26
|
-
|
27
|
-
|
28
|
-
def _get_volume_name(
|
29
|
-
vol_elem: html.HtmlElement,
|
30
|
-
) -> str:
|
31
|
-
"""
|
32
|
-
Extracts the volume title from a <div class="volume"> element using lxml.
|
33
|
-
Ignores <a> tags, and extracts text from other elements.
|
34
|
-
"""
|
35
|
-
h3_candidates = vol_elem.xpath(".//h3")
|
36
|
-
if not h3_candidates:
|
37
|
-
return ""
|
38
|
-
texts = vol_elem.xpath(".//h3//text()[not(ancestor::a)]")
|
39
|
-
full_text = "".join(texts).strip()
|
40
|
-
return full_text.split(chr(183))[0].strip()
|
41
|
-
|
42
|
-
|
43
|
-
def parse_book_info(html_str: str) -> dict[str, Any]:
|
44
|
-
"""
|
45
|
-
Extract metadata: title, author, cover_url, update_time, status,
|
46
|
-
word_count, summary, and volumes with chapters.
|
47
|
-
|
48
|
-
:param html_str: Raw HTML of the book info page.
|
49
|
-
:return: A dict containing book metadata.
|
50
|
-
"""
|
51
|
-
info: dict[str, Any] = {}
|
52
|
-
try:
|
53
|
-
doc = html.fromstring(html_str)
|
54
|
-
|
55
|
-
book_name = doc.xpath('string(//h1/em[@id="bookName"])').strip()
|
56
|
-
info["book_name"] = book_name
|
57
|
-
|
58
|
-
author = doc.xpath(_AUTHOR_XPATH).strip()
|
59
|
-
info["author"] = author
|
60
|
-
|
61
|
-
cover_url = doc.xpath('string(//div[@class="book-img"]//img/@src)').strip()
|
62
|
-
info["cover_url"] = cover_url
|
63
|
-
|
64
|
-
update_raw = (
|
65
|
-
doc.xpath('string(//span[contains(@class, "update-time")])')
|
66
|
-
.replace("更新时间", "")
|
67
|
-
.strip()
|
68
|
-
)
|
69
|
-
info["update_time"] = update_raw
|
70
|
-
|
71
|
-
status = doc.xpath('string(//p[@class="tag"]/span[@class="blue"][1])').strip()
|
72
|
-
info["serial_status"] = status
|
73
|
-
|
74
|
-
tags = doc.xpath('//p[@class="tag"]/a[@class="red"]/text()')
|
75
|
-
info["tags"] = [t.strip() for t in tags if t.strip()]
|
76
|
-
|
77
|
-
wc_number = doc.xpath("string(//p[em and cite][1]/em[1])").strip()
|
78
|
-
wc_unit = doc.xpath("string(//p[em and cite][1]/cite[1])").strip()
|
79
|
-
info["word_count"] = (
|
80
|
-
(wc_number + wc_unit) if wc_number and wc_unit else "Unknown"
|
81
|
-
)
|
82
|
-
|
83
|
-
summary = doc.xpath('string(//p[@class="intro"])').strip()
|
84
|
-
info["summary_brief"] = summary
|
85
|
-
|
86
|
-
intro_list = doc.xpath('//div[@class="book-intro"]/p')[0]
|
87
|
-
detail_intro = "\n".join(intro_list.itertext()).strip()
|
88
|
-
info["summary"] = detail_intro
|
89
|
-
|
90
|
-
volumes = []
|
91
|
-
for vol_div in doc.xpath('//div[@class="volume-wrap"]/div[@class="volume"]'):
|
92
|
-
volume_name = _get_volume_name(vol_div)
|
93
|
-
chapters = []
|
94
|
-
for li in vol_div.xpath(".//li"):
|
95
|
-
a = li.xpath(".//a")[0] if li.xpath(".//a") else None
|
96
|
-
if a is None or "href" not in a.attrib:
|
97
|
-
continue
|
98
|
-
href = a.attrib["href"].strip()
|
99
|
-
title = "".join(a.itertext()).strip()
|
100
|
-
chapters.append(
|
101
|
-
{
|
102
|
-
"title": title,
|
103
|
-
"url": href,
|
104
|
-
"chapterId": _chapter_url_to_id(href),
|
105
|
-
}
|
106
|
-
)
|
107
|
-
volumes.append({"volume_name": volume_name, "chapters": chapters})
|
108
|
-
info["volumes"] = volumes
|
109
|
-
|
110
|
-
except Exception as e:
|
111
|
-
logger.warning("[Parser] Error parsing book info: %s", e)
|
112
|
-
|
113
|
-
return info
|
@@ -1,168 +0,0 @@
|
|
1
|
-
LICENSE
|
2
|
-
README.md
|
3
|
-
pyproject.toml
|
4
|
-
novel_downloader/__init__.py
|
5
|
-
novel_downloader.egg-info/PKG-INFO
|
6
|
-
novel_downloader.egg-info/SOURCES.txt
|
7
|
-
novel_downloader.egg-info/dependency_links.txt
|
8
|
-
novel_downloader.egg-info/entry_points.txt
|
9
|
-
novel_downloader.egg-info/requires.txt
|
10
|
-
novel_downloader.egg-info/top_level.txt
|
11
|
-
novel_downloader/cli/__init__.py
|
12
|
-
novel_downloader/cli/clean.py
|
13
|
-
novel_downloader/cli/config.py
|
14
|
-
novel_downloader/cli/download.py
|
15
|
-
novel_downloader/cli/export.py
|
16
|
-
novel_downloader/cli/main.py
|
17
|
-
novel_downloader/config/__init__.py
|
18
|
-
novel_downloader/config/adapter.py
|
19
|
-
novel_downloader/config/loader.py
|
20
|
-
novel_downloader/config/site_rules.py
|
21
|
-
novel_downloader/core/__init__.py
|
22
|
-
novel_downloader/core/downloaders/__init__.py
|
23
|
-
novel_downloader/core/downloaders/base.py
|
24
|
-
novel_downloader/core/downloaders/biquge.py
|
25
|
-
novel_downloader/core/downloaders/common.py
|
26
|
-
novel_downloader/core/downloaders/esjzone.py
|
27
|
-
novel_downloader/core/downloaders/linovelib.py
|
28
|
-
novel_downloader/core/downloaders/qianbi.py
|
29
|
-
novel_downloader/core/downloaders/qidian.py
|
30
|
-
novel_downloader/core/downloaders/sfacg.py
|
31
|
-
novel_downloader/core/downloaders/yamibo.py
|
32
|
-
novel_downloader/core/exporters/__init__.py
|
33
|
-
novel_downloader/core/exporters/base.py
|
34
|
-
novel_downloader/core/exporters/biquge.py
|
35
|
-
novel_downloader/core/exporters/epub_util.py
|
36
|
-
novel_downloader/core/exporters/esjzone.py
|
37
|
-
novel_downloader/core/exporters/qianbi.py
|
38
|
-
novel_downloader/core/exporters/qidian.py
|
39
|
-
novel_downloader/core/exporters/sfacg.py
|
40
|
-
novel_downloader/core/exporters/yamibo.py
|
41
|
-
novel_downloader/core/exporters/common/__init__.py
|
42
|
-
novel_downloader/core/exporters/common/epub.py
|
43
|
-
novel_downloader/core/exporters/common/main_exporter.py
|
44
|
-
novel_downloader/core/exporters/common/txt.py
|
45
|
-
novel_downloader/core/exporters/linovelib/__init__.py
|
46
|
-
novel_downloader/core/exporters/linovelib/epub.py
|
47
|
-
novel_downloader/core/exporters/linovelib/main_exporter.py
|
48
|
-
novel_downloader/core/exporters/linovelib/txt.py
|
49
|
-
novel_downloader/core/factory/__init__.py
|
50
|
-
novel_downloader/core/factory/downloader.py
|
51
|
-
novel_downloader/core/factory/exporter.py
|
52
|
-
novel_downloader/core/factory/fetcher.py
|
53
|
-
novel_downloader/core/factory/parser.py
|
54
|
-
novel_downloader/core/fetchers/__init__.py
|
55
|
-
novel_downloader/core/fetchers/base/__init__.py
|
56
|
-
novel_downloader/core/fetchers/base/browser.py
|
57
|
-
novel_downloader/core/fetchers/base/rate_limiter.py
|
58
|
-
novel_downloader/core/fetchers/base/session.py
|
59
|
-
novel_downloader/core/fetchers/biquge/__init__.py
|
60
|
-
novel_downloader/core/fetchers/biquge/browser.py
|
61
|
-
novel_downloader/core/fetchers/biquge/session.py
|
62
|
-
novel_downloader/core/fetchers/common/__init__.py
|
63
|
-
novel_downloader/core/fetchers/common/browser.py
|
64
|
-
novel_downloader/core/fetchers/common/session.py
|
65
|
-
novel_downloader/core/fetchers/esjzone/__init__.py
|
66
|
-
novel_downloader/core/fetchers/esjzone/browser.py
|
67
|
-
novel_downloader/core/fetchers/esjzone/session.py
|
68
|
-
novel_downloader/core/fetchers/linovelib/__init__.py
|
69
|
-
novel_downloader/core/fetchers/linovelib/browser.py
|
70
|
-
novel_downloader/core/fetchers/linovelib/session.py
|
71
|
-
novel_downloader/core/fetchers/qianbi/__init__.py
|
72
|
-
novel_downloader/core/fetchers/qianbi/browser.py
|
73
|
-
novel_downloader/core/fetchers/qianbi/session.py
|
74
|
-
novel_downloader/core/fetchers/qidian/__init__.py
|
75
|
-
novel_downloader/core/fetchers/qidian/browser.py
|
76
|
-
novel_downloader/core/fetchers/qidian/session.py
|
77
|
-
novel_downloader/core/fetchers/sfacg/__init__.py
|
78
|
-
novel_downloader/core/fetchers/sfacg/browser.py
|
79
|
-
novel_downloader/core/fetchers/sfacg/session.py
|
80
|
-
novel_downloader/core/fetchers/yamibo/__init__.py
|
81
|
-
novel_downloader/core/fetchers/yamibo/browser.py
|
82
|
-
novel_downloader/core/fetchers/yamibo/session.py
|
83
|
-
novel_downloader/core/interfaces/__init__.py
|
84
|
-
novel_downloader/core/interfaces/downloader.py
|
85
|
-
novel_downloader/core/interfaces/exporter.py
|
86
|
-
novel_downloader/core/interfaces/fetcher.py
|
87
|
-
novel_downloader/core/interfaces/parser.py
|
88
|
-
novel_downloader/core/parsers/__init__.py
|
89
|
-
novel_downloader/core/parsers/base.py
|
90
|
-
novel_downloader/core/parsers/biquge/__init__.py
|
91
|
-
novel_downloader/core/parsers/biquge/main_parser.py
|
92
|
-
novel_downloader/core/parsers/common/__init__.py
|
93
|
-
novel_downloader/core/parsers/common/helper.py
|
94
|
-
novel_downloader/core/parsers/common/main_parser.py
|
95
|
-
novel_downloader/core/parsers/esjzone/__init__.py
|
96
|
-
novel_downloader/core/parsers/esjzone/main_parser.py
|
97
|
-
novel_downloader/core/parsers/linovelib/__init__.py
|
98
|
-
novel_downloader/core/parsers/linovelib/main_parser.py
|
99
|
-
novel_downloader/core/parsers/qianbi/__init__.py
|
100
|
-
novel_downloader/core/parsers/qianbi/main_parser.py
|
101
|
-
novel_downloader/core/parsers/qidian/__init__.py
|
102
|
-
novel_downloader/core/parsers/qidian/book_info_parser.py
|
103
|
-
novel_downloader/core/parsers/qidian/chapter_encrypted.py
|
104
|
-
novel_downloader/core/parsers/qidian/chapter_normal.py
|
105
|
-
novel_downloader/core/parsers/qidian/chapter_router.py
|
106
|
-
novel_downloader/core/parsers/qidian/main_parser.py
|
107
|
-
novel_downloader/core/parsers/qidian/utils/__init__.py
|
108
|
-
novel_downloader/core/parsers/qidian/utils/decryptor_fetcher.py
|
109
|
-
novel_downloader/core/parsers/qidian/utils/helpers.py
|
110
|
-
novel_downloader/core/parsers/qidian/utils/node_decryptor.py
|
111
|
-
novel_downloader/core/parsers/sfacg/__init__.py
|
112
|
-
novel_downloader/core/parsers/sfacg/main_parser.py
|
113
|
-
novel_downloader/core/parsers/yamibo/__init__.py
|
114
|
-
novel_downloader/core/parsers/yamibo/main_parser.py
|
115
|
-
novel_downloader/locales/en.json
|
116
|
-
novel_downloader/locales/zh.json
|
117
|
-
novel_downloader/models/__init__.py
|
118
|
-
novel_downloader/models/browser.py
|
119
|
-
novel_downloader/models/chapter.py
|
120
|
-
novel_downloader/models/config.py
|
121
|
-
novel_downloader/models/login.py
|
122
|
-
novel_downloader/models/site_rules.py
|
123
|
-
novel_downloader/models/tasks.py
|
124
|
-
novel_downloader/models/types.py
|
125
|
-
novel_downloader/resources/config/settings.toml
|
126
|
-
novel_downloader/resources/css_styles/main.css
|
127
|
-
novel_downloader/resources/css_styles/volume-intro.css
|
128
|
-
novel_downloader/resources/images/volume_border.png
|
129
|
-
novel_downloader/resources/js_scripts/qidian_decrypt_node.js
|
130
|
-
novel_downloader/resources/json/linovelib_font_map.json
|
131
|
-
novel_downloader/resources/json/replace_word_map.json
|
132
|
-
novel_downloader/resources/text/blacklist.txt
|
133
|
-
novel_downloader/tui/__init__.py
|
134
|
-
novel_downloader/tui/app.py
|
135
|
-
novel_downloader/tui/main.py
|
136
|
-
novel_downloader/tui/screens/__init__.py
|
137
|
-
novel_downloader/tui/screens/home.py
|
138
|
-
novel_downloader/tui/screens/login.py
|
139
|
-
novel_downloader/tui/styles/home_layout.tcss
|
140
|
-
novel_downloader/tui/widgets/richlog_handler.py
|
141
|
-
novel_downloader/utils/__init__.py
|
142
|
-
novel_downloader/utils/cache.py
|
143
|
-
novel_downloader/utils/chapter_storage.py
|
144
|
-
novel_downloader/utils/constants.py
|
145
|
-
novel_downloader/utils/cookies.py
|
146
|
-
novel_downloader/utils/crypto_utils.py
|
147
|
-
novel_downloader/utils/hash_store.py
|
148
|
-
novel_downloader/utils/hash_utils.py
|
149
|
-
novel_downloader/utils/i18n.py
|
150
|
-
novel_downloader/utils/logger.py
|
151
|
-
novel_downloader/utils/network.py
|
152
|
-
novel_downloader/utils/state.py
|
153
|
-
novel_downloader/utils/file_utils/__init__.py
|
154
|
-
novel_downloader/utils/file_utils/io.py
|
155
|
-
novel_downloader/utils/file_utils/normalize.py
|
156
|
-
novel_downloader/utils/file_utils/sanitize.py
|
157
|
-
novel_downloader/utils/fontocr/__init__.py
|
158
|
-
novel_downloader/utils/fontocr/model_loader.py
|
159
|
-
novel_downloader/utils/fontocr/ocr_v1.py
|
160
|
-
novel_downloader/utils/fontocr/ocr_v2.py
|
161
|
-
novel_downloader/utils/text_utils/__init__.py
|
162
|
-
novel_downloader/utils/text_utils/chapter_formatting.py
|
163
|
-
novel_downloader/utils/text_utils/diff_display.py
|
164
|
-
novel_downloader/utils/text_utils/font_mapping.py
|
165
|
-
novel_downloader/utils/text_utils/text_cleaning.py
|
166
|
-
novel_downloader/utils/time_utils/__init__.py
|
167
|
-
novel_downloader/utils/time_utils/datetime_utils.py
|
168
|
-
novel_downloader/utils/time_utils/sleep_utils.py
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|