v2.2.11: 修复命令行模式下option未配置的问题,优化GitHub Actions工作流,更新common依赖版本 (#134)

This commit is contained in:
hect0x7 2023-09-14 17:36:54 +08:00
parent f6f2d273a7
commit c5810d9535
5 changed files with 50 additions and 37 deletions

View File

@ -6,7 +6,12 @@ on:
JM_ALBUM_IDS:
type: string
description: 本子id多个id用-隔开,如 '123-456-789'
required: true
required: false
JM_PHOTO_IDS:
type: string
description: 章节id可以单独下载某个本子的某个章节多个id用-隔开(同上))
required: false
DIR_RULE:
type: string
@ -45,6 +50,7 @@ jobs:
env:
# 工作流输入
JM_ALBUM_IDS: ${{ github.event.inputs.JM_ALBUM_IDS }}
JM_PHOTO_IDS: ${{ github.event.inputs.JM_PHOTO_IDS }}
DIR_RULE: ${{ github.event.inputs.DIR_RULE }}
ZIP_NAME: ${{ github.event.inputs.ZIP_NAME }}
UPLOAD_NAME: ${{ github.event.inputs.UPLOAD_NAME }}

View File

@ -27,7 +27,7 @@ setup(
package_dir={"": "src"},
python_requires=">=3.7",
install_requires=[
'commonX>=0.5.3',
'commonX>=0.5.6',
'curl_cffi',
'PyYAML',
'Pillow',

View File

@ -2,7 +2,7 @@
# 被依赖方 <--- 使用方
# config <--- entity <--- toolkit <--- client <--- option <--- downloader
__version__ = '2.2.9'
__version__ = '2.2.11'
from .api import *
from .jm_plugin import *

View File

@ -8,7 +8,7 @@ $ jmcomic 123 456 p333 --option="D:/option.yml"
"""
import os.path
from typing import List
from typing import List, Optional
def get_env(name, default):
@ -23,7 +23,7 @@ def get_env(name, default):
class JmcomicUI:
def __init__(self) -> None:
self.option_path = None
self.option_path: Optional[str] = None
self.raw_id_list: List[str] = []
self.album_id_list: List[str] = []
self.photo_id_list: List[str] = []
@ -42,13 +42,16 @@ class JmcomicUI:
parser.add_argument(
'--option',
help='path to the option file, you can also specify it by env `JM_OPTION_PATH`',
default=get_env('JM_OPTION_PATH', './option.yml'),
default=get_env('JM_OPTION_PATH', None),
)
args = parser.parse_args()
self.option_path = os.path.abspath(args.option)
self.raw_id_list = args.id_list
if args.option is not None:
self.option_path = os.path.abspath(args.option)
else:
self.option_path = None
self.raw_id_list = args.id_list
self.parse_raw_id()
def parse_raw_id(self):
@ -75,18 +78,23 @@ class JmcomicUI:
from .api import jm_debug
jm_debug('command_line',
f'start downloading...\n'
f'- using option: [{self.option_path}]\n'
f'- using option: [{self.option_path or "default"}]\n'
f'to be downloaded: \n'
f'- album: {self.album_id_list}\n'
f'- photo: {self.photo_id_list}')
self.run()
def run(self):
from .api import download_album, download_photo, create_option
from .api import create_option, JmOption
if self.option_path is not None:
option = create_option(self.option_path)
else:
option = JmOption.default()
self.run(option)
def run(self, option):
from .api import download_album, download_photo
from common import MultiTaskLauncher
option = create_option(self.option_path)
if len(self.album_id_list) == 0:
download_photo(self.photo_id_list, option)
elif len(self.photo_id_list) == 0:

View File

@ -1,4 +1,5 @@
from jmcomic import *
from jmcomic.cl import get_env, JmcomicUI
# 下方填入你要下载的本子的id一行一个。
# 每行的首尾可以有空白字符
@ -12,12 +13,18 @@ jm_albums = '''
'''
# 单独下载章节
jm_photos = '''
def get_jm_album_ids():
'''
def get_id_set(env_name):
aid_set = set()
for text in [
jm_albums,
(get_env('JM_ALBUM_IDS') or '').replace('-', '\n'),
(get_env(env_name, '')).replace('-', '\n'),
]:
aid_set.update(str_to_set(text))
@ -25,8 +32,14 @@ def get_jm_album_ids():
def main():
# 下载漫画
download_album(get_jm_album_ids(), option=get_option())
album_id_set = get_id_set('JM_ALBUM_IDS')
photo_id_set = get_id_set('JM_PHOTO_IDS')
helper = JmcomicUI()
helper.album_id_list = list(album_id_set)
helper.photo_id_list = list(photo_id_set)
helper.run(get_option())
def get_option():
@ -39,18 +52,14 @@ def get_option():
# 覆盖client实现类实现把请求错误的html下载到文件方便GitHub Actions下载查看日志
hook_debug(option)
# 启用 client 的缓存
client = option.build_jm_client()
client.enable_cache()
# 登录,如果有配置的话
login_if_configured(client)
login_if_configured(option.build_jm_client())
return option
def cover_option_config(option: JmOption):
dir_rule = get_env('DIR_RULE')
dir_rule = get_env('DIR_RULE', None)
if dir_rule is not None:
the_old = option.dir_rule
the_new = DirRule(dir_rule, base_dir=the_old.base_dir)
@ -64,8 +73,8 @@ def login_if_configured(client):
# 配置的方式很简单,网页上点一点就可以了
# 具体做法请去看官方教程https://docs.github.com/en/actions/security-guides/encrypted-secrets
# 萌新注意!!!如果你想 `开源` 你的禁漫帐号,你也可以直接把账号密码写到下面的代码😅
username = get_env('JM_USERNAME')
password = get_env('JM_PASSWORD')
username = get_env('JM_USERNAME', None)
password = get_env('JM_PASSWORD', None)
if username is not None and password is not None:
client.login(username, password, True)
print_eye_catching(f'登录禁漫成功')
@ -73,7 +82,7 @@ def login_if_configured(client):
# noinspection PyUnusedLocal
def hook_debug(option):
jm_download_dir = get_env('JM_DOWNLOAD_DIR') or workspace()
jm_download_dir = get_env('JM_DOWNLOAD_DIR', workspace())
mkdir_if_not_exists(jm_download_dir)
class RaiseErrorAwareClient(JmHtmlClient):
@ -91,15 +100,5 @@ def hook_debug(option):
JmModuleConfig.CLASS_CLIENT_IMPL['html'] = RaiseErrorAwareClient
def get_env(name):
import os
value = os.getenv(name, None)
if value is None or value == '':
return None
return value
if __name__ == '__main__':
main()