mirror of
https://github.com/d0zingcat/MoviePilot-Plugins.git
synced 2026-05-13 23:16:47 +00:00
fix plugins
This commit is contained in:
@@ -67,7 +67,6 @@ class BangumiColl(_PluginBase):
|
||||
_group_select_order: list = []
|
||||
|
||||
def init_plugin(self, config: dict = None):
|
||||
self.subscribeoper = SubscribeOper()
|
||||
|
||||
# 停止现有任务
|
||||
self.stop_service()
|
||||
@@ -81,17 +80,17 @@ class BangumiColl(_PluginBase):
|
||||
if config:
|
||||
# 遍历配置中的键并设置相应的属性
|
||||
for key in (
|
||||
"enabled",
|
||||
"total_change",
|
||||
"cron",
|
||||
"notify",
|
||||
"onlyonce",
|
||||
"uid",
|
||||
"collection_type",
|
||||
"save_path",
|
||||
"sites",
|
||||
"match_groups",
|
||||
"group_select_order",
|
||||
"enabled",
|
||||
"total_change",
|
||||
"cron",
|
||||
"notify",
|
||||
"onlyonce",
|
||||
"uid",
|
||||
"collection_type",
|
||||
"save_path",
|
||||
"sites",
|
||||
"match_groups",
|
||||
"group_select_order",
|
||||
):
|
||||
setattr(self, f"_{key}", config.get(key, getattr(self, f"_{key}")))
|
||||
# 获得所有站点
|
||||
@@ -108,8 +107,7 @@ class BangumiColl(_PluginBase):
|
||||
self._scheduler.add_job(
|
||||
func=self.bangumi_coll,
|
||||
trigger='date',
|
||||
run_date=datetime.datetime.now(tz=pytz.timezone(settings.TZ))
|
||||
+ datetime.timedelta(seconds=3),
|
||||
run_date=datetime.datetime.now(tz=pytz.timezone(settings.TZ)) + datetime.timedelta(seconds=3),
|
||||
)
|
||||
self._scheduler.start()
|
||||
|
||||
@@ -275,9 +273,8 @@ class BangumiColl(_PluginBase):
|
||||
'content': [
|
||||
{
|
||||
'component': 'div',
|
||||
'props': {'innerHTML':
|
||||
'提示:<strong>剧集组优先级</strong>越靠前优先级越高。'
|
||||
}
|
||||
'props': {
|
||||
'innerHTML': '提示:<strong>剧集组优先级</strong>越靠前优先级越高。'}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -385,9 +382,8 @@ class BangumiColl(_PluginBase):
|
||||
'content': [
|
||||
{
|
||||
'component': 'div',
|
||||
'props': {'innerHTML':
|
||||
'注意: 该插件仅会将<strong>公开</strong>的收藏添加到<strong>订阅</strong>。'
|
||||
}
|
||||
'props': {
|
||||
'innerHTML': '注意: 该插件仅会将<strong>公开</strong>的收藏添加到<strong>订阅</strong>。'}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -414,9 +410,8 @@ class BangumiColl(_PluginBase):
|
||||
'content': [
|
||||
{
|
||||
'component': 'div',
|
||||
'props': {'innerHTML':
|
||||
'注意: 开启<strong>自动取消订阅并通知</strong>后,已添加的订阅在下一次执行时若不在已选择的<strong>收藏类型</strong>中,将会被取消订阅。'
|
||||
}
|
||||
'props': {
|
||||
'innerHTML': '注意: 开启<strong>自动取消订阅并通知</strong>后,已添加的订阅在下一次执行时若不在已选择的<strong>收藏类型</strong>中,将会被取消订阅。'}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -443,9 +438,9 @@ class BangumiColl(_PluginBase):
|
||||
'content': [
|
||||
{
|
||||
'component': 'div',
|
||||
'props': {'innerHTML':
|
||||
'注意: 开启<strong>固定总集数</strong>后,从<a href="https://bangumi.github.io/api/#/%E7%AB%A0%E8%8A%82/getEpisodes" target="_blank"><u>Bangumi API</u></a>获取到总集数将不会因<strong>订阅元数据更新</strong>改变。'
|
||||
}
|
||||
'props': {
|
||||
'innerHTML': '注意: 开启<strong>固定总集数</strong>后,从<a href="https://bangumi.github.io/api/#/%E7%AB%A0%E8%8A%82/getEpisodes" target="_blank"><u>Bangumi API</u></a>获取到总集数将不会因<strong>订阅元数据更新</strong>改变。'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -513,11 +508,11 @@ class BangumiColl(_PluginBase):
|
||||
def get_command(self):
|
||||
return [
|
||||
{
|
||||
"cmd": "/bangumi_coll",
|
||||
"event": EventType.PluginAction,
|
||||
"desc": "Bangumi收藏订阅",
|
||||
"category": "",
|
||||
"data": {"action": "bangumi_coll"}
|
||||
"cmd": "/bangumi_coll",
|
||||
"event": EventType.PluginAction,
|
||||
"desc": "Bangumi收藏订阅",
|
||||
"category": "",
|
||||
"data": {"action": "bangumi_coll"}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -537,21 +532,21 @@ class BangumiColl(_PluginBase):
|
||||
return
|
||||
|
||||
self.post_message(channel=event_data.get("channel"),
|
||||
title=f"开始添加用户: {self._uid} 的收藏 ...",
|
||||
userid=event_data.get("user"))
|
||||
title=f"开始添加用户: {self._uid} 的收藏 ...",
|
||||
userid=event_data.get("user"))
|
||||
# 运行任务
|
||||
msg = self.bangumi_coll()
|
||||
|
||||
self.post_message(channel=event_data.get("channel"),
|
||||
title="添加完成" if not msg else msg,
|
||||
userid=event_data.get("user"))
|
||||
title="添加完成" if not msg else msg,
|
||||
userid=event_data.get("user"))
|
||||
|
||||
def bangumi_coll(self) -> str:
|
||||
"""订阅Bangumi用户收藏"""
|
||||
if not self._uid:
|
||||
logger.error("未设置UID")
|
||||
return "未设置UID"
|
||||
|
||||
msg = ""
|
||||
try:
|
||||
res = self.get_bgm_res(addr="UserCollections", id=self._uid)
|
||||
items = self.parse_collection_items(res)
|
||||
@@ -582,9 +577,8 @@ class BangumiColl(_PluginBase):
|
||||
"tags": [tag.get('name') for tag in item['subject'].get('tags', [{}])]
|
||||
}
|
||||
for item in data
|
||||
if item.get("type") in self._collection_type and item['subject'].get('date')\
|
||||
# 只添加未来30天内放送的条目
|
||||
and self.is_date_in_range(item['subject'].get('date'), threshold_days=30)[0]
|
||||
if item.get("type") in self._collection_type and item['subject'].get('date') and self.is_date_in_range(item['subject'].get('date'), threshold_days=30)[0]
|
||||
}
|
||||
|
||||
def manage_subscriptions(self, items: Dict[int, Dict[str, Any]]):
|
||||
@@ -592,7 +586,7 @@ class BangumiColl(_PluginBase):
|
||||
# 查询订阅
|
||||
db_sub = {
|
||||
i.bangumiid: i.id
|
||||
for i in self.subscribeoper.list()
|
||||
for i in SubscribeOper().list()
|
||||
if i.bangumiid
|
||||
}
|
||||
# bangumi 条目
|
||||
@@ -627,6 +621,7 @@ class BangumiColl(_PluginBase):
|
||||
"""添加订阅"""
|
||||
|
||||
fail_items = {}
|
||||
subscribeoper = SubscribeOper()
|
||||
for subid, item in items.items():
|
||||
if item.get("name_cn"):
|
||||
meta = MetaInfo(item.get("name_cn"))
|
||||
@@ -651,9 +646,9 @@ class BangumiColl(_PluginBase):
|
||||
meta.en_name = meta.title
|
||||
|
||||
if (mediainfo := self.chain.recognize_media(
|
||||
meta=meta,
|
||||
mtype=mtype,
|
||||
cache=False
|
||||
meta=meta,
|
||||
mtype=mtype,
|
||||
cache=False
|
||||
)) or any(
|
||||
getattr(meta, attr) == meta.org_string
|
||||
for attr in ('cn_name', 'en_name')
|
||||
@@ -668,9 +663,10 @@ class BangumiColl(_PluginBase):
|
||||
mediainfo.bangumi_id = subid
|
||||
# 根据发行日期判断是不是续作
|
||||
if mediainfo.type == MediaType.TV \
|
||||
and not self.is_date_in_range(sub_air_date, mediainfo.release_date)[0]:
|
||||
and not self.is_date_in_range(sub_air_date, mediainfo.release_date)[0]:
|
||||
# 识别剧集组标志
|
||||
group_flag: bool = True
|
||||
season_info = []
|
||||
if "OVA" in item.get("tags"):
|
||||
# 季0 处理
|
||||
if tmdb_info := self.chain.tmdb_info(mediainfo.tmdb_id, mediainfo.type, 0):
|
||||
@@ -678,12 +674,13 @@ class BangumiColl(_PluginBase):
|
||||
if self.is_date_in_range(sub_air_date, info.get("air_date"), 2)[0]:
|
||||
mediainfo.season = 0
|
||||
meta.begin_episode = info.get("episode_number")
|
||||
else: # 信息不完整, 跳过条目
|
||||
else: # 信息不完整, 跳过条目
|
||||
continue
|
||||
|
||||
else:
|
||||
# 过滤信息不完整和第0季
|
||||
season_info = [info for info in mediainfo.season_info if info.get("season_number") and info.get("air_date") and info.get("episode_count")]
|
||||
season_info = [info for info in mediainfo.season_info if
|
||||
info.get("season_number") and info.get("air_date") and info.get("episode_count")]
|
||||
# 获取 bangumi 信息
|
||||
meta = self.get_eps(meta, subid)
|
||||
# 先通过season_info处理三季及以上的情况, tmdb存在第二季也不能保证不会被合并
|
||||
@@ -718,16 +715,16 @@ class BangumiColl(_PluginBase):
|
||||
season_list = []
|
||||
for info in mediainfo.season_info:
|
||||
if info.get("season_number") == 0:
|
||||
season_list.append((len(season_info)+1, len(mediainfo.seasons[1])+info.get("episode_count")))
|
||||
season_list.append(
|
||||
(len(season_info) + 1, len(mediainfo.seasons[1]) + info.get("episode_count")))
|
||||
season_list.append((len(season_info), len(mediainfo.seasons[1])))
|
||||
# 预匹配剧集组
|
||||
candidate_groups = (
|
||||
group for group in mediainfo.episode_groups
|
||||
if any(
|
||||
group.get("group_count") == s[0] and
|
||||
group.get("episode_count") == s[1]
|
||||
for s in season_list
|
||||
)
|
||||
if any(group.get("group_count") == s[0] and
|
||||
group.get("episode_count") == s[1]
|
||||
for s in season_list
|
||||
)
|
||||
)
|
||||
|
||||
for group in candidate_groups:
|
||||
@@ -738,7 +735,8 @@ class BangumiColl(_PluginBase):
|
||||
else:
|
||||
mediainfo = self._match_group(air_date, meta, mediainfo)
|
||||
# 非续作
|
||||
elif mediainfo.type == MediaType.TV: mediainfo.season = 1
|
||||
elif mediainfo.type == MediaType.TV:
|
||||
mediainfo.season = 1
|
||||
# 检查本地媒体
|
||||
exist_flag, no_exists = DownloadChain().get_no_exists_info(meta=meta, mediainfo=mediainfo)
|
||||
if exist_flag:
|
||||
@@ -751,13 +749,13 @@ class BangumiColl(_PluginBase):
|
||||
self.update_data(key="exclude", value=subid)
|
||||
logger.info(f'{mediainfo.title_year} 媒体库中已存在 第 {mediainfo.season} 季')
|
||||
continue
|
||||
sid = self.subscribeoper.list_by_tmdbid(
|
||||
sid = subscribeoper.list_by_tmdbid(
|
||||
mediainfo.tmdb_id, mediainfo.season
|
||||
)
|
||||
if sid:
|
||||
logger.info(f"{mediainfo.title_year} 正在订阅中")
|
||||
if len(sid) == 1:
|
||||
self.subscribeoper.update(
|
||||
subscribeoper.update(
|
||||
sid=sid[0].id, payload={"bangumiid": subid}
|
||||
)
|
||||
logger.info(f"{mediainfo.title_year} Bangumi条目id更新成功")
|
||||
@@ -773,6 +771,7 @@ class BangumiColl(_PluginBase):
|
||||
"""
|
||||
将tmdb多季合并的季信息进行拆分
|
||||
"""
|
||||
season_data = {}
|
||||
if tmdb_info := self.chain.tmdb_info(mediainfo.tmdb_id, mediainfo.type, season):
|
||||
season = 1
|
||||
air_date = tmdb_info.get("air_date")
|
||||
@@ -824,8 +823,8 @@ class BangumiColl(_PluginBase):
|
||||
episode_count = group.get("episode_count", 0)
|
||||
|
||||
if (
|
||||
group_count >= total_season
|
||||
and episode_count >= begin_ep
|
||||
group_count >= total_season
|
||||
and episode_count >= begin_ep
|
||||
):
|
||||
logger.info(
|
||||
f"{mediainfo.title_year} 正在匹配 剧集组: "
|
||||
@@ -833,8 +832,8 @@ class BangumiColl(_PluginBase):
|
||||
f"共 {group_count} 季 {episode_count} 集")
|
||||
|
||||
if season_num := self.get_group_season(
|
||||
group.get("id"), air_date, mediainfo
|
||||
):
|
||||
group.get("id"), air_date, mediainfo
|
||||
):
|
||||
mediainfo.episode_group = group.get("id")
|
||||
mediainfo.season = season_num
|
||||
return mediainfo
|
||||
@@ -883,9 +882,9 @@ class BangumiColl(_PluginBase):
|
||||
|
||||
total_episode = len(mediainfo.seasons.get(mediainfo.season or 1) or [])
|
||||
if (
|
||||
meta.begin_season
|
||||
and mediainfo.season != meta.begin_season
|
||||
or total_episode != meta.total_episode
|
||||
meta.begin_season
|
||||
and mediainfo.season != meta.begin_season
|
||||
or total_episode != meta.total_episode
|
||||
):
|
||||
meta = self.get_eps(meta, mediainfo.bangumi_id)
|
||||
total_ep: int = meta.end_episode if meta.end_episode else total_episode
|
||||
@@ -947,10 +946,11 @@ class BangumiColl(_PluginBase):
|
||||
# 移除订阅
|
||||
def delete_subscribe(self, del_items: dict[int, int]):
|
||||
"""删除订阅"""
|
||||
subscribeoper = SubscribeOper()
|
||||
for subscribe_id in del_items.keys():
|
||||
try:
|
||||
if subscribe := self.subscribeoper.get(subscribe_id):
|
||||
self.subscribeoper.delete(subscribe_id)
|
||||
if subscribe := subscribeoper.get(subscribe_id):
|
||||
subscribeoper.delete(subscribe_id)
|
||||
SubscribeHelper().sub_done_async(
|
||||
{"tmdbid": subscribe.tmdbid, "doubanid": subscribe.doubanid}
|
||||
)
|
||||
@@ -1030,4 +1030,3 @@ class BangumiColl(_PluginBase):
|
||||
except Exception as e:
|
||||
logger.error(f"获取订阅历史失败: {str(e)}")
|
||||
return set()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user