Files
MoviePilot/app/actions/scrape_file.py
2025-02-22 09:57:32 +08:00

59 lines
1.6 KiB
Python

from app.actions import BaseAction
from app.schemas import ActionParams, ActionContext
from chain.media import MediaChain
from chain.storage import StorageChain
from core.metainfo import MetaInfoPath
from log import logger
class ScrapeFileParams(ActionParams):
"""
刮削文件参数
"""
pass
class ScrapeFileAction(BaseAction):
"""
刮削文件
"""
__scraped_files = []
def __init__(self):
super().__init__()
self.storagechain = StorageChain()
self.mediachain = MediaChain()
@property
def name(self) -> str:
return "刮削文件"
@property
def description(self) -> str:
return "刮削媒体信息和图片"
@property
def success(self) -> bool:
return True if self.__scraped_files else False
async def execute(self, params: ScrapeFileParams, context: ActionContext) -> ActionContext:
"""
刮削fileitems中的所有文件
"""
for fileitem in context.fileitems:
if fileitem in self.__scraped_files:
continue
if not self.storagechain.exists(fileitem):
continue
meta = MetaInfoPath(fileitem.path)
mediainfo = self.chain.recognize_media(meta)
if not mediainfo:
logger.info(f"{fileitem.path} 未识别到媒体信息,无法刮削")
continue
self.mediachain.scrape_metadata(fileitem=fileitem, meta=meta, mediainfo=mediainfo)
self.__scraped_files.append(fileitem)
self.job_done()
return context