mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-16 13:55:28 +08:00
feat(event): send events for resource download based on source
This commit is contained in:
@@ -51,7 +51,7 @@ def download(
|
|||||||
torrent_info=torrentinfo
|
torrent_info=torrentinfo
|
||||||
)
|
)
|
||||||
did = DownloadChain().download_single(context=context, username=current_user.name,
|
did = DownloadChain().download_single(context=context, username=current_user.name,
|
||||||
downloader=downloader, save_path=save_path)
|
downloader=downloader, save_path=save_path, source="Manual")
|
||||||
if not did:
|
if not did:
|
||||||
return schemas.Response(success=False, message="任务添加失败")
|
return schemas.Response(success=False, message="任务添加失败")
|
||||||
return schemas.Response(success=True, data={
|
return schemas.Response(success=True, data={
|
||||||
@@ -84,7 +84,7 @@ def add(
|
|||||||
torrent_info=torrentinfo
|
torrent_info=torrentinfo
|
||||||
)
|
)
|
||||||
did = DownloadChain().download_single(context=context, username=current_user.name,
|
did = DownloadChain().download_single(context=context, username=current_user.name,
|
||||||
downloader=downloader, save_path=save_path)
|
downloader=downloader, save_path=save_path, source="Manual")
|
||||||
if not did:
|
if not did:
|
||||||
return schemas.Response(success=False, message="任务添加失败")
|
return schemas.Response(success=False, message="任务添加失败")
|
||||||
return schemas.Response(success=True, data={
|
return schemas.Response(success=True, data={
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from app.helper.message import MessageHelper
|
|||||||
from app.helper.torrent import TorrentHelper
|
from app.helper.torrent import TorrentHelper
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
from app.schemas import ExistMediaInfo, NotExistMediaInfo, DownloadingTorrent, Notification
|
from app.schemas import ExistMediaInfo, NotExistMediaInfo, DownloadingTorrent, Notification
|
||||||
from app.schemas.event import ResourceSelectionEventData
|
from app.schemas.event import ResourceSelectionEventData, ResourceDownloadEventData
|
||||||
from app.schemas.types import MediaType, TorrentStatus, EventType, MessageChannel, NotificationType, ChainEventType
|
from app.schemas.types import MediaType, TorrentStatus, EventType, MessageChannel, NotificationType, ChainEventType
|
||||||
from app.utils.http import RequestUtils
|
from app.utils.http import RequestUtils
|
||||||
from app.utils.string import StringUtils
|
from app.utils.string import StringUtils
|
||||||
@@ -192,7 +192,7 @@ class DownloadChain(ChainBase):
|
|||||||
logger.error(f"下载种子文件失败:{torrent.title} - {torrent_url}")
|
logger.error(f"下载种子文件失败:{torrent.title} - {torrent_url}")
|
||||||
self.post_message(Notification(
|
self.post_message(Notification(
|
||||||
channel=channel,
|
channel=channel,
|
||||||
source=source,
|
source=source if channel else None,
|
||||||
mtype=NotificationType.Manual,
|
mtype=NotificationType.Manual,
|
||||||
title=f"{torrent.title} 种子下载失败!",
|
title=f"{torrent.title} 种子下载失败!",
|
||||||
text=f"错误信息:{error_msg}\n站点:{torrent.site_name}",
|
text=f"错误信息:{error_msg}\n站点:{torrent.site_name}",
|
||||||
@@ -204,7 +204,8 @@ class DownloadChain(ChainBase):
|
|||||||
|
|
||||||
def download_single(self, context: Context, torrent_file: Path = None,
|
def download_single(self, context: Context, torrent_file: Path = None,
|
||||||
episodes: Set[int] = None,
|
episodes: Set[int] = None,
|
||||||
channel: MessageChannel = None, source: str = None,
|
channel: MessageChannel = None,
|
||||||
|
source: str = None,
|
||||||
downloader: str = None,
|
downloader: str = None,
|
||||||
save_path: str = None,
|
save_path: str = None,
|
||||||
userid: Union[str, int] = None,
|
userid: Union[str, int] = None,
|
||||||
@@ -216,13 +217,36 @@ class DownloadChain(ChainBase):
|
|||||||
:param torrent_file: 种子文件路径
|
:param torrent_file: 种子文件路径
|
||||||
:param episodes: 需要下载的集数
|
:param episodes: 需要下载的集数
|
||||||
:param channel: 通知渠道
|
:param channel: 通知渠道
|
||||||
:param source: 通知来源
|
:param source: 来源(消息通知、Subscribe、Manual等)
|
||||||
:param downloader: 下载器
|
:param downloader: 下载器
|
||||||
:param save_path: 保存路径
|
:param save_path: 保存路径
|
||||||
:param userid: 用户ID
|
:param userid: 用户ID
|
||||||
:param username: 调用下载的用户名/插件名
|
:param username: 调用下载的用户名/插件名
|
||||||
:param media_category: 自定义媒体类别
|
:param media_category: 自定义媒体类别
|
||||||
"""
|
"""
|
||||||
|
# 发送资源下载事件,允许外部拦截下载
|
||||||
|
event_data = ResourceDownloadEventData(
|
||||||
|
context=context,
|
||||||
|
episodes=episodes,
|
||||||
|
channel=channel,
|
||||||
|
source=source,
|
||||||
|
downloader=downloader,
|
||||||
|
save_path=save_path,
|
||||||
|
userid=userid,
|
||||||
|
username=username,
|
||||||
|
media_category=media_category
|
||||||
|
)
|
||||||
|
# 触发资源下载事件
|
||||||
|
event = eventmanager.send_event(ChainEventType.ResourceDownload, event_data)
|
||||||
|
if event and event.event_data:
|
||||||
|
event_data: ResourceDownloadEventData = event.event_data
|
||||||
|
# 如果事件被取消,跳过资源下载
|
||||||
|
if event_data.cancel:
|
||||||
|
logger.debug(
|
||||||
|
f"Resource download canceled by event: {event_data.source},"
|
||||||
|
f"Reason: {event_data.reason}")
|
||||||
|
return None
|
||||||
|
|
||||||
_torrent = context.torrent_info
|
_torrent = context.torrent_info
|
||||||
_media = context.media_info
|
_media = context.media_info
|
||||||
_meta = context.meta_info
|
_meta = context.meta_info
|
||||||
@@ -366,7 +390,7 @@ class DownloadChain(ChainBase):
|
|||||||
# 只发送给对应渠道和用户
|
# 只发送给对应渠道和用户
|
||||||
self.post_message(Notification(
|
self.post_message(Notification(
|
||||||
channel=channel,
|
channel=channel,
|
||||||
source=source,
|
source=source if channel else None,
|
||||||
mtype=NotificationType.Manual,
|
mtype=NotificationType.Manual,
|
||||||
title="添加下载任务失败:%s %s"
|
title="添加下载任务失败:%s %s"
|
||||||
% (_media.title_year, _meta.season_episode),
|
% (_media.title_year, _meta.season_episode),
|
||||||
@@ -394,7 +418,7 @@ class DownloadChain(ChainBase):
|
|||||||
:param no_exists: 缺失的剧集信息
|
:param no_exists: 缺失的剧集信息
|
||||||
:param save_path: 保存路径
|
:param save_path: 保存路径
|
||||||
:param channel: 通知渠道
|
:param channel: 通知渠道
|
||||||
:param source: 通知来源
|
:param source: 来源(消息通知、订阅、手工下载等)
|
||||||
:param userid: 用户ID
|
:param userid: 用户ID
|
||||||
:param username: 调用下载的用户名/插件名
|
:param username: 调用下载的用户名/插件名
|
||||||
:param media_category: 自定义媒体类别
|
:param media_category: 自定义媒体类别
|
||||||
|
|||||||
@@ -111,6 +111,8 @@ class MessageChain(ChainBase):
|
|||||||
info = self.message_parser(source=source, body=body, form=form, args=args)
|
info = self.message_parser(source=source, body=body, form=form, args=args)
|
||||||
if not info:
|
if not info:
|
||||||
return
|
return
|
||||||
|
# 更新消息来源
|
||||||
|
source = info.source
|
||||||
# 渠道
|
# 渠道
|
||||||
channel = info.channel
|
channel = info.channel
|
||||||
# 用户ID
|
# 用户ID
|
||||||
|
|||||||
@@ -399,6 +399,7 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
|
|||||||
save_path=subscribe.save_path,
|
save_path=subscribe.save_path,
|
||||||
media_category=subscribe.media_category,
|
media_category=subscribe.media_category,
|
||||||
downloader=subscribe.downloader,
|
downloader=subscribe.downloader,
|
||||||
|
source="Subscribe"
|
||||||
)
|
)
|
||||||
|
|
||||||
# 判断是否应完成订阅
|
# 判断是否应完成订阅
|
||||||
@@ -789,7 +790,8 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
|
|||||||
username=subscribe.username,
|
username=subscribe.username,
|
||||||
save_path=subscribe.save_path,
|
save_path=subscribe.save_path,
|
||||||
media_category=subscribe.media_category,
|
media_category=subscribe.media_category,
|
||||||
downloader=subscribe.downloader)
|
downloader=subscribe.downloader,
|
||||||
|
source="Subscribe")
|
||||||
# 判断是否要完成订阅
|
# 判断是否要完成订阅
|
||||||
self.finish_subscribe_or_not(subscribe=subscribe, meta=meta, mediainfo=mediainfo,
|
self.finish_subscribe_or_not(subscribe=subscribe, meta=meta, mediainfo=mediainfo,
|
||||||
downloads=downloads, lefts=lefts)
|
downloads=downloads, lefts=lefts)
|
||||||
|
|||||||
Reference in New Issue
Block a user