diff --git a/app/actions/__init__.py b/app/actions/__init__.py index aa70125d..8bea4aab 100644 --- a/app/actions/__init__.py +++ b/app/actions/__init__.py @@ -10,6 +10,9 @@ class BaseAction(BaseModel, ABC): 工作流动作基类 """ + # 完成标志 + _done_flag = False + @property @abstractmethod def name(self) -> str: @@ -28,12 +31,11 @@ class BaseAction(BaseModel, ABC): raise NotImplementedError @property - @abstractmethod def done(self) -> bool: """ 判断动作是否完成 """ - pass + return self._done_flag @property @abstractmethod @@ -42,3 +44,9 @@ class BaseAction(BaseModel, ABC): 判断动作是否成功 """ pass + + def job_done(self): + """ + 标记动作完成 + """ + self._done_flag = True diff --git a/app/actions/add_download.py b/app/actions/add_download.py index 700feaec..b7c3b012 100644 --- a/app/actions/add_download.py +++ b/app/actions/add_download.py @@ -1,12 +1,19 @@ +from pydantic import Field + from app.actions import BaseAction -from app.schemas import ActionParams, ActionContext +from app.chain.download import DownloadChain +from app.chain.media import MediaChain +from app.core.metainfo import MetaInfo +from app.log import logger +from app.schemas import ActionParams, ActionContext, DownloadTask class AddDownloadParams(ActionParams): """ 添加下载资源参数 """ - pass + downloader: str = Field(None, description="下载器") + save_path: str = Field(None, description="保存路径") class AddDownloadAction(BaseAction): @@ -14,6 +21,9 @@ class AddDownloadAction(BaseAction): 添加下载资源 """ + # 已添加的下载 + _added_downloads = [] + @property def name(self) -> str: return "添加下载资源" @@ -22,13 +32,32 @@ class AddDownloadAction(BaseAction): def description(self) -> str: return "根据资源列表添加下载任务" - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: - return True + return True if self._added_downloads else False async def execute(self, params: AddDownloadParams, context: ActionContext) -> ActionContext: - pass + """ + 将上下文中的torrents添加到下载任务中 + """ + for t in context.torrents: + if not t.meta_info: + t.meta_info = MetaInfo(title=t.title, subtitle=t.description) + if not t.media_info: + t.media_info = MediaChain().recognize_media(meta=t.meta_info) + if not t.media_info: + logger.warning(f"{t.title} 未识别到媒体信息,无法下载") + continue + did = DownloadChain().download_single(context=t, + downloader=params.downloader, + save_path=params.save_path) + if did: + self._added_downloads.append(did) + + if self._added_downloads: + logger.info(f"已添加 {len(self._added_downloads)} 个下载任务") + context.downloads.extend( + [DownloadTask(download_id=did, downloader=params.downloader) for did in self._added_downloads] + ) + self.job_done() + return context diff --git a/app/actions/add_subscribe.py b/app/actions/add_subscribe.py index 2c71767f..481b149a 100644 --- a/app/actions/add_subscribe.py +++ b/app/actions/add_subscribe.py @@ -22,10 +22,6 @@ class AddSubscribeAction(BaseAction): def description(self) -> str: return "根据媒体列表添加订阅" - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: return True diff --git a/app/actions/fetch_downloads.py b/app/actions/fetch_downloads.py index 900d6d24..2545ff94 100644 --- a/app/actions/fetch_downloads.py +++ b/app/actions/fetch_downloads.py @@ -22,10 +22,6 @@ class FetchDownloadsAction(BaseAction): def description(self) -> str: return "获取下载任务,更新任务状态" - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: return True diff --git a/app/actions/fetch_medias.py b/app/actions/fetch_medias.py index 8f7ae324..36926723 100644 --- a/app/actions/fetch_medias.py +++ b/app/actions/fetch_medias.py @@ -22,10 +22,6 @@ class FetchMediasAction(BaseAction): def description(self) -> str: return "获取媒体数据" - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: return True diff --git a/app/actions/fetch_rss.py b/app/actions/fetch_rss.py index 95897214..def05ffe 100644 --- a/app/actions/fetch_rss.py +++ b/app/actions/fetch_rss.py @@ -30,13 +30,9 @@ class FetchRssAction(BaseAction): def description(self) -> str: return "请求RSS地址获取数据,并解析为资源列表" - async def execute(self, params: FetchRssParams, context: ActionContext) -> ActionContext: - pass - - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: return True + + async def execute(self, params: FetchRssParams, context: ActionContext) -> ActionContext: + pass diff --git a/app/actions/filter_medias.py b/app/actions/filter_medias.py index 609bf712..c3b79c39 100644 --- a/app/actions/filter_medias.py +++ b/app/actions/filter_medias.py @@ -22,10 +22,6 @@ class FilterMediasAction(BaseAction): def description(self) -> str: return "过滤媒体数据列表" - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: return True diff --git a/app/actions/filter_torrents.py b/app/actions/filter_torrents.py index d1879945..5db23e78 100644 --- a/app/actions/filter_torrents.py +++ b/app/actions/filter_torrents.py @@ -22,10 +22,6 @@ class FilterTorrentsAction(BaseAction): def description(self) -> str: return "过滤资源数据列表" - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: return True diff --git a/app/actions/scrape_file.py b/app/actions/scrape_file.py index bd13d7c3..b03c09a6 100644 --- a/app/actions/scrape_file.py +++ b/app/actions/scrape_file.py @@ -22,10 +22,6 @@ class ScrapeFileAction(BaseAction): def description(self) -> str: return "刮削媒体信息和图片" - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: return True diff --git a/app/actions/search_torrents.py b/app/actions/search_torrents.py index fb27bf1c..43964e8c 100644 --- a/app/actions/search_torrents.py +++ b/app/actions/search_torrents.py @@ -30,10 +30,6 @@ class SearchTorrentsAction(BaseAction): def description(self) -> str: return "根据关键字搜索站点种子资源" - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: return True diff --git a/app/actions/send_event.py b/app/actions/send_event.py index a5570597..b5e916e5 100644 --- a/app/actions/send_event.py +++ b/app/actions/send_event.py @@ -22,10 +22,6 @@ class SendEventAction(BaseAction): def description(self) -> str: return "发送特定事件" - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: return True diff --git a/app/actions/send_message.py b/app/actions/send_message.py index 90db29d2..e50d6ef8 100644 --- a/app/actions/send_message.py +++ b/app/actions/send_message.py @@ -22,10 +22,6 @@ class SendMessageAction(BaseAction): def description(self) -> str: return "发送特定消息" - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: return True diff --git a/app/actions/transfer_file.py b/app/actions/transfer_file.py index eab9c66a..a47428b6 100644 --- a/app/actions/transfer_file.py +++ b/app/actions/transfer_file.py @@ -22,10 +22,6 @@ class TransferFileAction(BaseAction): def description(self) -> str: return "整理和转移文件" - @property - def done(self) -> bool: - return True - @property def success(self) -> bool: return True