fix conflicts

This commit is contained in:
InfinityPacer
2025-01-15 00:20:08 +08:00
16 changed files with 193 additions and 141 deletions

View File

@@ -927,12 +927,13 @@
"name": "Bangumi收藏订阅",
"description": "Bangumi用户收藏添加到订阅",
"labels": "订阅",
"version": "1.5.2",
"version": "1.5.3",
"icon": "bangumi_b.png",
"author": "Attente",
"level": 1,
"v2": true,
"history": {
"v1.5.3": "增加多语言标题匹配, 去除未实现设置项",
"v1.5.2": "修复定时任务未正确注册的问题",
"v1.5.1": "修复季度信息未传递的问题. 新增站点列表同步删除",
"v1.5": "修复总集数会同步TMDB变动的问题,增加开关选项"

View File

@@ -25,7 +25,7 @@
"author": "jxxghp,InfinityPacer",
"level": 2,
"history": {
"v4.2": "支持带宽采样并计算平均值,以优化刷流效率",
"v4.2": "优化执行周期输入需要MoviePilot v2.2.1+",
"v4.1": "支持通过CRON表达式配置开启时间固定10分钟为执行周期",
"v4.0": "站点独立配置项支持配置NexusPHP 站点自动跳过下载提示页",
"v3.9": "MoviePilot V2 版本站点刷流插件"
@@ -35,11 +35,12 @@
"name": "站点自动签到",
"description": "自动模拟登录、签到站点。",
"labels": "站点",
"version": "2.5.2",
"version": "2.5.3",
"icon": "signin.png",
"author": "thsrite",
"level": 2,
"history": {
"v2.5.3": "优化执行周期输入需要MoviePilot v2.2.1+",
"v2.5.2": "修复HDArea签到",
"v2.5.1": "修复空签到失败问题",
"v2.5": "MoviePilot V2 版本站点自动签到插件"
@@ -100,11 +101,12 @@
"name": "自动转移做种",
"description": "定期转移下载器中的做种任务到另一个下载器。",
"labels": "做种",
"version": "1.8",
"version": "1.9",
"icon": "seed.png",
"author": "jxxghp",
"level": 2,
"history": {
"v1.9": "优化执行周期输入需要MoviePilot v2.2.1+",
"v1.8": "支持qbittorrent 5",
"v1.7": "MoviePilot V2 版本自动转移做种插件",
"v1.7.1": "修复兼容性问题"
@@ -114,11 +116,12 @@
"name": "自定义订阅",
"description": "定时刷新RSS报文识别内容后添加订阅或直接下载。",
"labels": "订阅",
"version": "2.0",
"version": "2.1",
"icon": "rss.png",
"author": "jxxghp",
"level": 2,
"history": {
"v2.1": "优化执行周期输入需要MoviePilot v2.2.1+",
"v2.0": "兼容MoviePilot V2 版本"
}
},
@@ -126,11 +129,12 @@
"name": "FFmpeg缩略图",
"description": "TheMovieDb没有背景图片时使用FFmpeg截取视频文件缩略图",
"labels": "刮削",
"version": "2.0",
"version": "2.1",
"icon": "ffmpeg.png",
"author": "jxxghp",
"level": 1,
"history": {
"v2.1": "优化执行周期输入需要MoviePilot v2.2.1+",
"v2.0": "兼容MoviePilot V2 版本"
}
},
@@ -138,11 +142,12 @@
"name": "媒体库刮削",
"description": "定时对媒体库进行刮削,补齐缺失元数据和图片。",
"labels": "刮削",
"version": "2.0",
"version": "2.1",
"icon": "scraper.png",
"author": "jxxghp",
"level": 1,
"history": {
"v2.1": "优化执行周期输入需要MoviePilot v2.2.1+",
"v2.0": "兼容MoviePilot V2 版本",
"v1.5": "修复未获取fanart图片的问题",
"v1.4.1": "修复nfo文件读取失败时任务中断问题"
@@ -152,11 +157,12 @@
"name": "演职人员刮削",
"description": "刮削演职人员图片以及中文名称。",
"labels": "媒体库,刮削",
"version": "2.0.1",
"version": "2.1",
"icon": "actor.png",
"author": "jxxghp",
"level": 1,
"history": {
"v2.1": "优化执行周期输入需要MoviePilot v2.2.1+",
"v2.0": "兼容MoviePilot V2 版本",
"v1.4": "人物图片调整为优先从TMDB获取避免douban图片CDN加载过慢的问题",
"v1.3": "修复v1.8.5版本后刮削报错问题"
@@ -180,11 +186,12 @@
"name": "定时清理媒体库",
"description": "定时清理用户下载的种子、源文件、媒体库文件。",
"labels": "媒体库",
"version": "2.0",
"version": "2.1",
"icon": "clean.png",
"author": "thsrite",
"level": 2,
"history": {
"v2.1": "优化执行周期输入需要MoviePilot v2.2.1+",
"v2.0": "兼容MoviePilot V2 版本"
}
},
@@ -192,11 +199,12 @@
"name": "自动删种",
"description": "自动删除下载器中的下载任务。",
"labels": "做种",
"version": "2.1.1",
"version": "2.2",
"icon": "delete.jpg",
"author": "jxxghp",
"level": 2,
"history": {
"v2.2": "优化执行周期输入需要MoviePilot v2.2.1+",
"v2.1.1": "修复兼容MoviePilot V2 版本",
"v2.0": "兼容MoviePilot V2 版本"
}
@@ -205,11 +213,14 @@
"name": "IYUU自动辅种",
"description": "基于IYUU官方Api实现自动辅种。",
"labels": "做种,IYUU",
"version": "2.5",
"version": "2.8",
"icon": "IYUU.png",
"author": "jxxghp",
"author": "jxxghp,ckun",
"level": 2,
"history": {
"v2.8": "为配置主辅分离时,不走辅种下载器检查",
"v2.7": "增加主辅分离配置,单独指定辅种下载器",
"v2.6": "优化执行周期输入需要MoviePilot v2.2.1+",
"v2.5": "修复qb辅种结束后自动开始暂停的种子",
"v2.4": "辅种结束后,一起开始所有辅种后暂停的种子(排除了出错的种子)",
"v2.3": "支持qbittorrent 5",
@@ -247,11 +258,12 @@
"name": "同步CookieCloud",
"description": "同步MoviePilot站点Cookie到本地CookieCloud。",
"labels": "站点",
"version": "2.1",
"version": "2.2",
"icon": "Cookiecloud_A.png",
"author": "thsrite",
"level": 1,
"history": {
"v2.2": "优化执行周期输入需要MoviePilot v2.2.1+",
"v2.1": "兼容MoviePilot V2"
}
},
@@ -296,11 +308,12 @@
"name": "MoviePilot更新推送",
"description": "MoviePilot推送release更新通知、自动重启。",
"labels": "消息通知,自动更新",
"version": "2.0",
"version": "2.1",
"icon": "Moviepilot_A.png",
"author": "thsrite",
"level": 1,
"history": {
"v2.1": "优化执行周期输入需要MoviePilot v2.2.1+",
"v2.0": "兼容MoviePilot V2"
}
}

View File

@@ -27,7 +27,7 @@ class AutoClean(_PluginBase):
# 插件图标
plugin_icon = "clean.png"
# 插件版本
plugin_version = "2.0"
plugin_version = "2.1"
# 插件作者
plugin_author = "thsrite"
# 作者主页
@@ -351,7 +351,7 @@ class AutoClean(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '执行周期',

View File

@@ -37,7 +37,7 @@ class AutoSignIn(_PluginBase):
# 插件图标
plugin_icon = "signin.png"
# 插件版本
plugin_version = "2.5.2"
plugin_version = "2.5.3"
# 插件作者
plugin_author = "thsrite"
# 作者主页
@@ -359,7 +359,7 @@ class AutoSignIn(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '执行周期',
@@ -856,9 +856,10 @@ class AutoSignIn(_PluginBase):
message=f"站点【{url}】不存在"
)
else:
site_name, message = self.signin_site(site_info)
return schemas.Response(
success=True,
message=self.signin_site(site_info)
message=f"站点【{site_name}{message or '签到成功'}"
)
def signin_site(self, site_info: CommentedMap) -> Tuple[str, str]:

View File

@@ -924,7 +924,7 @@ class BrushFlow(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '执行周期',

View File

@@ -28,7 +28,7 @@ class FFmpegThumb(_PluginBase):
# 插件图标
plugin_icon = "ffmpeg.png"
# 插件版本
plugin_version = "2.0"
plugin_version = "2.1"
# 插件作者
plugin_author = "jxxghp"
# 作者主页
@@ -176,7 +176,7 @@ class FFmpegThumb(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '定时扫描周期',

View File

@@ -33,9 +33,9 @@ class IYUUAutoSeed(_PluginBase):
# 插件图标
plugin_icon = "IYUU.png"
# 插件版本
plugin_version = "2.5"
plugin_version = "2.8"
# 插件作者
plugin_author = "jxxghp"
plugin_author = "jxxghp,ckun"
# 作者主页
author_url = "https://github.com/jxxghp"
# 插件配置项ID前缀
@@ -59,6 +59,8 @@ class IYUUAutoSeed(_PluginBase):
_onlyonce = False
_token = None
_downloaders = []
# 辅种下载器
_auto_downloader = None
_sites = []
_notify = False
_nolabels = None
@@ -107,6 +109,7 @@ class IYUUAutoSeed(_PluginBase):
self._cron = config.get("cron")
self._token = config.get("token")
self._downloaders = config.get("downloaders")
self._auto_downloader = config.get("auto_downloader")
self._sites = config.get("sites") or []
self._notify = config.get("notify")
self._nolabels = config.get("nolabels")
@@ -182,6 +185,25 @@ class IYUUAutoSeed(_PluginBase):
return active_services
@property
def auto_service_info(self) -> ServiceInfo | None:
"""
服务信息
"""
if not self._auto_downloader:
logger.info("尚未配置主辅分离下载器,辅种不分离")
return None
service = self.downloader_helper.get_service(name=self._auto_downloader)
if not service:
logger.warning("获取主辅分离下载器实例失败,请检查配置")
return None
if service.instance.is_inactive():
logger.warning(f"下载器 {service.name} 未连接,请检查配置")
return None
return service
def get_state(self) -> bool:
return True if self._enabled and self._cron and self._token and self._downloaders else False
@@ -309,7 +331,7 @@ class IYUUAutoSeed(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '执行周期',
@@ -327,7 +349,7 @@ class IYUUAutoSeed(_PluginBase):
'component': 'VCol',
'props': {
'cols': 12,
'md': 6
'md': 4
},
'content': [
{
@@ -348,7 +370,27 @@ class IYUUAutoSeed(_PluginBase):
'component': 'VCol',
'props': {
'cols': 12,
'md': 6
'md': 4
},
'content': [
{
'component': 'VSelect',
'props': {
'chips': True,
'clearable': True,
'model': 'auto_downloader',
'label': '主辅分离',
'items': [{"title": config.name, "value": config.name}
for config in self.downloader_helper.get_configs().values()]
}
}
]
},
{
'component': 'VCol',
'props': {
'cols': 12,
'md': 4
},
'content': [
{
@@ -524,6 +566,7 @@ class IYUUAutoSeed(_PluginBase):
"cron": "",
"token": "",
"downloaders": [],
"auto_downloader": "",
"sites": [],
"nopaths": "",
"nolabels": "",
@@ -544,6 +587,7 @@ class IYUUAutoSeed(_PluginBase):
"cron": self._cron,
"token": self._token,
"downloaders": self._downloaders,
"auto_downloader": self._auto_downloader,
"sites": self._sites,
"notify": self._notify,
"nolabels": self._nolabels,
@@ -643,22 +687,13 @@ class IYUUAutoSeed(_PluginBase):
self.check_recheck()
else:
logger.info(f"没有需要辅种的种子")
# qb 中,辅种结束后,一起开始所有辅种后暂停的种子(排除了出错的种子),及时人工确认也是手动开始这部分种子
for service in self.service_infos.values():
downloader = service.name
downloader_obj = service.instance
# 只处理 qb
if service.type == "qbittorrent":
paused_torrents, _ = downloader_obj.get_torrents(status="paused")
# errored_torrents, _ = downloader_obj.get_torrents(status=["errored"])
pausedUP_torrent_hashs = []
for torrent in paused_torrents:
if torrent.state in ['pausedUP', 'stoppedUP']:
pausedUP_torrent_hashs.append(torrent.hash)
logger.info(f"下载器 {downloader} 自动开始种子 {torrent.name}")
else:
logger.info(f"下载器 {downloader} 不自动开始种子 {torrent.name}, state={torrent.state}")
downloader_obj.start_torrents(ids=pausedUP_torrent_hashs)
# 指定主辅分离时只检查辅种下载器
if self.auto_service_info:
self.start_service_torrents(self.auto_service_info)
else:
# qb 中,辅种结束后,一起开始所有辅种后暂停的种子(排除了出错的种子),及时人工确认也是手动开始这部分种子
for service in self.service_infos.values():
self.start_service_torrents(service)
# 保存缓存
self.__update_config()
# 发送消息
@@ -676,49 +711,80 @@ class IYUUAutoSeed(_PluginBase):
)
logger.info("辅种任务执行完成")
def start_service_torrents(self, service: ServiceInfo):
"""
指定下载器开始种子
"""
downloader = service.name
downloader_obj = service.instance
# 只处理 qb
if service.type == "qbittorrent":
paused_torrents, _ = downloader_obj.get_torrents(status="paused")
# errored_torrents, _ = downloader_obj.get_torrents(status=["errored"])
pausedUP_torrent_hashs = []
for torrent in paused_torrents:
if torrent.state in ['pausedUP', 'stoppedUP']:
pausedUP_torrent_hashs.append(torrent.hash)
logger.info(f"下载器 {downloader} 自动开始种子 {torrent.name}")
else:
logger.info(f"下载器 {downloader} 不自动开始种子 {torrent.name}, state={torrent.state}")
downloader_obj.start_torrents(ids=pausedUP_torrent_hashs)
def check_recheck(self):
"""
定时检查下载器中种子是否校验完成,校验完成且完整的自动开始辅种
"""
if not self.service_infos:
return
if not self._recheck_torrents:
return
if self._is_recheck_running:
return
self._is_recheck_running = True
if self.auto_service_info:
# 检查指定下载器
self.check_recheck_service(self.auto_service_info)
self._is_recheck_running = False
return
if not self.service_infos:
return
for service in self.service_infos.values():
# 需要检查的种子
downloader = service.name
downloader_obj = service.instance
recheck_torrents = self._recheck_torrents.get(downloader) or []
if not recheck_torrents:
continue
logger.info(f"开始检查下载器 {downloader} 的校验任务 ...")
# 获取下载器中的种子状态
torrents, _ = downloader_obj.get_torrents(ids=recheck_torrents)
if torrents:
can_seeding_torrents = []
for torrent in torrents:
# 获取种子hash
hash_str = self.__get_hash(torrent=torrent, dl_type=service.type)
if self.__can_seeding(torrent=torrent, dl_type=service.type):
can_seeding_torrents.append(hash_str)
if can_seeding_torrents:
logger.info(f"{len(can_seeding_torrents)} 个任务校验完成,开始辅种 ...")
# 开始任务
downloader_obj.start_torrents(ids=can_seeding_torrents)
# 去除已经处理过的种子
self._recheck_torrents[downloader] = list(
set(recheck_torrents).difference(set(can_seeding_torrents)))
elif torrents is None:
logger.info(f"下载器 {downloader} 查询校验任务失败,将在下次继续查询 ...")
continue
else:
logger.info(f"下载器 {downloader} 中没有需要检查的校验任务,清空待处理列表 ...")
self._recheck_torrents[downloader] = []
self.check_recheck_service(service)
self._is_recheck_running = False
def check_recheck_service(self, service: ServiceInfo):
"""
检查指定下载器中种子是否校验完成,校验完成且完整的自动开始辅种
"""
# 需要检查的种子
downloader = service.name
downloader_obj = service.instance
recheck_torrents = self._recheck_torrents.get(downloader) or []
if not recheck_torrents:
return
logger.info(f"开始检查下载器 {downloader} 的校验任务 ...")
# 获取下载器中的种子状态
torrents, _ = downloader_obj.get_torrents(ids=recheck_torrents)
if torrents:
can_seeding_torrents = []
for torrent in torrents:
# 获取种子hash
hash_str = self.__get_hash(torrent=torrent, dl_type=service.type)
if self.__can_seeding(torrent=torrent, dl_type=service.type):
can_seeding_torrents.append(hash_str)
if can_seeding_torrents:
logger.info(f"{len(can_seeding_torrents)} 个任务校验完成,开始辅种 ...")
# 开始任务
downloader_obj.start_torrents(ids=can_seeding_torrents)
# 去除已经处理过的种子
self._recheck_torrents[downloader] = list(
set(recheck_torrents).difference(set(can_seeding_torrents)))
elif torrents is None:
logger.info(f"下载器 {downloader} 查询校验任务失败,将在下次继续查询 ...")
return
else:
logger.info(f"下载器 {downloader} 中没有需要检查的校验任务,清空待处理列表 ...")
self._recheck_torrents[downloader] = []
def __seed_torrents(self, hash_strs: list, service: ServiceInfo):
"""
执行一批种子的辅种
@@ -770,10 +836,15 @@ class IYUUAutoSeed(_PluginBase):
if seed.get("info_hash") in self._error_caches or seed.get("info_hash") in self._permanent_error_caches:
logger.info(f"种子 {seed.get('info_hash')} 辅种失败且已缓存,跳过 ...")
continue
# 添加任务
success = self.__download_torrent(seed=seed,
service=service,
save_path=save_paths.get(current_hash))
# 添加任务 如果配置了主辅分离使用辅种下载器
if self._auto_downloader:
success = self.__download_torrent(seed=seed,
service=self.auto_service_info,
save_path=save_paths.get(current_hash))
else:
success = self.__download_torrent(seed=seed,
service=service,
save_path=save_paths.get(current_hash))
if success:
success_torrents.append(seed.get("info_hash"))
@@ -1270,4 +1341,4 @@ class IYUUAutoSeed(_PluginBase):
self._sites = sites
# 保存配置
self.__update_config()
self.__update_config()

View File

@@ -27,7 +27,7 @@ class LibraryScraper(_PluginBase):
# 插件图标
plugin_icon = "scraper.png"
# 插件版本
plugin_version = "2.0"
plugin_version = "2.1"
# 插件作者
plugin_author = "jxxghp"
# 作者主页
@@ -205,7 +205,7 @@ class LibraryScraper(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '执行周期',

View File

@@ -23,7 +23,7 @@ class MoviePilotUpdateNotify(_PluginBase):
# 插件图标
plugin_icon = "Moviepilot_A.png"
# 插件版本
plugin_version = "2.0"
plugin_version = "2.1"
# 插件作者
plugin_author = "thsrite"
# 作者主页
@@ -288,7 +288,7 @@ class MoviePilotUpdateNotify(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '检查周期',

View File

@@ -38,7 +38,7 @@ class PersonMeta(_PluginBase):
# 插件图标
plugin_icon = "actor.png"
# 插件版本
plugin_version = "2.0.1"
plugin_version = "2.1"
# 插件作者
plugin_author = "jxxghp"
# 作者主页
@@ -199,7 +199,7 @@ class PersonMeta(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '媒体库扫描周期',

View File

@@ -33,7 +33,7 @@ class RssSubscribe(_PluginBase):
# 插件图标
plugin_icon = "rss.png"
# 插件版本
plugin_version = "2.0"
plugin_version = "2.1"
# 插件作者
plugin_author = "jxxghp"
# 作者主页
@@ -249,7 +249,7 @@ class RssSubscribe(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '执行周期',

View File

@@ -24,7 +24,7 @@ class SyncCookieCloud(_PluginBase):
# 插件图标
plugin_icon = "Cookiecloud_A.png"
# 插件版本
plugin_version = "2.1"
plugin_version = "2.2"
# 插件作者
plugin_author = "thsrite"
# 作者主页
@@ -243,7 +243,7 @@ class SyncCookieCloud(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '执行周期',

View File

@@ -26,7 +26,7 @@ class TorrentRemover(_PluginBase):
# 插件图标
plugin_icon = "delete.jpg"
# 插件版本
plugin_version = "2.1.1"
plugin_version = "2.2"
# 插件作者
plugin_author = "jxxghp"
# 作者主页
@@ -207,7 +207,7 @@ class TorrentRemover(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '执行周期',

View File

@@ -28,7 +28,7 @@ class TorrentTransfer(_PluginBase):
# 插件图标
plugin_icon = "seed.png"
# 插件版本
plugin_version = "1.8"
plugin_version = "1.9"
# 插件作者
plugin_author = "jxxghp"
# 作者主页
@@ -259,7 +259,7 @@ class TorrentTransfer(_PluginBase):
},
'content': [
{
'component': 'VTextField',
'component': 'VCronField',
'props': {
'model': 'cron',
'label': '执行周期',

View File

@@ -36,7 +36,7 @@ class BangumiColl(_PluginBase):
# 插件图标
plugin_icon = "bangumi_b.png"
# 插件版本
plugin_version = "1.5.2"
plugin_version = "1.5.3"
# 插件作者
plugin_author = "Attente"
# 作者主页
@@ -60,8 +60,6 @@ class BangumiColl(_PluginBase):
_cron: str = ""
_notify: bool = False
_onlyonce: bool = False
_include: str = ""
_exclude: str = ""
_uid: str = ""
_collection_type = []
_save_path: str = ""
@@ -130,8 +128,6 @@ class BangumiColl(_PluginBase):
"cron": self._cron,
"uid": self._uid,
"collection_type": self._collection_type,
"include": self._include,
"exclude": self._exclude,
"save_path": self._save_path,
"sites": self._sites,
}
@@ -151,7 +147,7 @@ class BangumiColl(_PluginBase):
"""
注册插件公共服务
"""
if self._enabled or self._cron:
if self._enabled:
trigger = CronTrigger.from_crontab(self._cron) if self._cron else "interval"
kwargs = {"hours": 6} if not self._cron else {}
return [
@@ -219,7 +215,6 @@ class BangumiColl(_PluginBase):
logger.error(f"Bangumi用户{self._uid} ,没有任何收藏")
return {}
logger.info("解析Bangumi条目信息...")
return {
item.get("subject_id"): {
"name": item['subject'].get('name'),
@@ -264,14 +259,18 @@ class BangumiColl(_PluginBase):
fail_items = {}
for self._subid, item in items.items():
meta = MetaInfo(item.get("name_cn"))
if item.get("name_cn"):
meta = MetaInfo(item.get("name_cn"))
meta.en_name = item.get("name")
else:
meta = MetaInfo(item.get("name"))
if not meta.name:
fail_items[self._subid] = f"{item.get('name_cn')} 未识别到有效数据"
logger.warn(f"{item.get('name_cn')} 未识别到有效数据")
fail_items[self._subid] = f"{self._subid} 未识别到有效数据"
logger.warn(f"{self._subid} 未识别到有效数据")
continue
meta.year = item.get("date")[:4] if item.get("date") else None
mediainfo = self.chain.recognize_media(meta=meta)
mediainfo = self.chain.recognize_media(meta=meta, cache=False)
meta.total_episode = item.get("eps", 0)
if not mediainfo:
fail_items[self._subid] = f"{item.get('name_cn')} 媒体信息识别失败"
@@ -301,7 +300,7 @@ class BangumiColl(_PluginBase):
**self.prepare_kwargs(meta, mediainfo),
)
if not sid:
fail_items[self._subid] = f"{item.get('name_cn')} {msg}"
fail_items[self._subid] = f"{item.get('name_cn') or item.get('name')} {msg}"
return fail_items
@@ -362,8 +361,9 @@ class BangumiColl(_PluginBase):
data = res.json().get("data", [{}])[0]
prev = data.get("sort", 1) - data.get("ep", 1)
total = res.json().get("total", None)
meta.begin_episode = prev + 1
meta.end_episode = prev + total if total else None
begin = prev + 1
end = prev + total if total else None
meta.set_episodes(begin, end)
except Exception as e:
logger.error(f"获取集数信息失败: {str(e)}")
finally:

View File

@@ -72,6 +72,7 @@ def form(sites_options) -> list:
'content': [
{
'component': 'VTextField',
# 'component': 'VCronField', # 暂不支持
'props': {
'model': 'cron',
'label': '执行周期',
@@ -115,39 +116,6 @@ def form(sites_options) -> list:
},
],
},
{
'component': 'VRow',
'content': [
{
'component': 'VCol',
'props': {'cols': 12, 'md': 6},
'content': [
{
'component': 'VTextField',
'props': {
'model': 'include',
'label': '包含',
'placeholder': '暂未实现',
},
}
],
},
{
'component': 'VCol',
'props': {'cols': 12, 'md': 6},
'content': [
{
'component': 'VTextField',
'props': {
'model': 'exclude',
'label': '排除',
'placeholder': '暂未实现',
},
}
],
},
],
},
{
'component': 'VRow',
'content': [
@@ -262,8 +230,6 @@ def form(sites_options) -> list:
"cron": "",
"uid": "",
"collection_type": [3],
"include": "",
"exclude": "",
"save_path": "",
"sites": [],
}