fix 手动刮削图片不完整
This commit is contained in:
jxxghp 2024-06-23 18:40:44 +08:00
parent 5a837a4161
commit 85e5338121
3 changed files with 52 additions and 39 deletions

View File

@ -142,7 +142,7 @@ class ChainBase(metaclass=ABCMeta):
bangumiid: int = None,
cache: bool = True) -> Optional[MediaInfo]:
"""
识别媒体信息
识别媒体信息不含Fanart图片
:param meta: 识别的元数据
:param mtype: 识别的媒体类型与tmdbid配套
:param tmdbid: tmdbid

View File

@ -216,6 +216,13 @@ class DownloadChain(ChainBase):
_media = context.media_info
_meta = context.meta_info
# 补充完整的media数据
if not _media.genre_ids:
new_media = self.recognize_media(mtype=_media.type, tmdbid=_media.tmdb_id,
doubanid=_media.douban_id, bangumiid=_media.bangumi_id)
if new_media:
_media = new_media
# 实际下载的集数
download_episodes = StringUtils.format_ep(list(episodes)) if episodes else None
_folder_name = ""

View File

@ -86,13 +86,16 @@ class TransferChain(ChainBase):
mediainfo = self.recognize_media(mtype=mtype,
tmdbid=downloadhis.tmdbid,
doubanid=downloadhis.doubanid)
if mediainfo:
# 补充图片
self.obtain_images(mediainfo)
else:
# 非MoviePilot下载的任务按文件识别
mediainfo = None
# 执行转移
self.do_transfer(storage="local", path=torrent.path,
mediainfo=mediainfo, download_hash=torrent.hash)
self.__do_transfer(storage="local", path=torrent.path,
mediainfo=mediainfo, download_hash=torrent.hash)
# 设置下载任务状态
self.transfer_completed(hashs=torrent.hash, path=torrent.path)
@ -100,13 +103,13 @@ class TransferChain(ChainBase):
logger.info("下载器文件转移执行完成")
return True
def do_transfer(self, storage: str, path: Path, drive_id: str = None, fileid: str = None, filetype: str = None,
meta: MetaBase = None, mediainfo: MediaInfo = None,
download_hash: str = None,
target: Path = None, transfer_type: str = None,
season: int = None, epformat: EpisodeFormat = None,
min_filesize: int = 0, scrape: bool = None,
force: bool = False) -> Tuple[bool, str]:
def __do_transfer(self, storage: str, path: Path, drive_id: str = None, fileid: str = None, filetype: str = None,
meta: MetaBase = None, mediainfo: MediaInfo = None,
download_hash: str = None,
target: Path = None, transfer_type: str = None,
season: int = None, epformat: EpisodeFormat = None,
min_filesize: int = 0, scrape: bool = None,
force: bool = False) -> Tuple[bool, str]:
"""
执行一个复杂目录的转移操作
:param storage: 存储器
@ -152,7 +155,7 @@ class TransferChain(ChainBase):
download_hash=download_hash, force=force)
else:
# 网盘整理
result = self.__transfer_remote(storage=storage,
result = self.__transfer_online(storage=storage,
fileitem=schemas.FileItem(
path=str(path) + ("/" if filetype == "dir" else ""),
type=filetype,
@ -467,7 +470,7 @@ class TransferChain(ChainBase):
key=ProgressKey.FileTransfer)
return True, "\n".join(err_msgs)
def __transfer_remote(self, storage: str, fileitem: schemas.FileItem,
def __transfer_online(self, storage: str, fileitem: schemas.FileItem,
meta: MetaBase, mediainfo: MediaInfo) -> Tuple[bool, str]:
"""
整理一个远程目录
@ -535,7 +538,7 @@ class TransferChain(ChainBase):
# 文件元数据
meta = MetaInfoPath(Path(fileitem.path))
if not mediainfo:
mediainfo = self.recognize_media(meta=meta)
mediainfo = self.mediachain.recognize_by_meta(meta)
if not mediainfo:
logger.warn(f"{fileitem.name} 未识别到媒体信息")
return False, f"{fileitem.name} 未识别到媒体信息"
@ -589,12 +592,12 @@ class TransferChain(ChainBase):
if not file_meta.name:
# 过滤掉无效文件
continue
file_media = self.recognize_media(meta=file_meta)
file_media = self.mediachain.recognize_by_meta(file_meta)
if not file_media:
logger.warn(f"{file.name} 未识别到媒体信息")
continue
# 整理这个文件或目录
self.__transfer_remote(storage=storage, fileitem=file, meta=file_meta, mediainfo=file_media)
self.__transfer_online(storage=storage, fileitem=file, meta=file_meta, mediainfo=file_media)
else:
# 电视剧目录
# 判断当前目录类型
@ -661,12 +664,12 @@ class TransferChain(ChainBase):
continue
# 重新识别文件或目录
file_meta = MetaInfoPath(Path(file.path))
file_media = self.recognize_media(meta=file_meta)
file_media = self.mediachain.recognize_by_meta(file_meta)
if not file_media:
logger.warn(f"{file.name} 未识别到媒体信息")
continue
# 整理这个文件或目录
self.__transfer_remote(storage=storage, fileitem=file, meta=file_meta, mediainfo=file_media)
self.__transfer_online(storage=storage, fileitem=file, meta=file_meta, mediainfo=file_media)
logger.info(f"{fileitem.path} 整理完成")
self.progress.update(value=0,
@ -747,16 +750,16 @@ class TransferChain(ChainBase):
if not type_str or type_str not in [MediaType.MOVIE.value, MediaType.TV.value]:
args_error()
return
state, errmsg = self.re_transfer(logid=int(logid),
mtype=MediaType(type_str),
mediaid=media_id)
state, errmsg = self.__re_transfer(logid=int(logid),
mtype=MediaType(type_str),
mediaid=media_id)
if not state:
self.post_message(Notification(channel=channel, title="手动整理失败",
text=errmsg, userid=userid, link=settings.MP_DOMAIN('#/history')))
return
def re_transfer(self, logid: int, mtype: MediaType = None,
mediaid: str = None) -> Tuple[bool, str]:
def __re_transfer(self, logid: int, mtype: MediaType = None,
mediaid: str = None) -> Tuple[bool, str]:
"""
根据历史记录重新识别转移只支持简单条件
:param logid: 历史记录ID
@ -791,11 +794,11 @@ class TransferChain(ChainBase):
self.delete_files(Path(history.dest))
# 强制转移
state, errmsg = self.do_transfer(storage="local",
path=src_path,
mediainfo=mediainfo,
download_hash=history.download_hash,
force=True)
state, errmsg = self.__do_transfer(storage="local",
path=src_path,
mediainfo=mediainfo,
download_hash=history.download_hash,
force=True)
if not state:
return False, errmsg
@ -843,13 +846,16 @@ class TransferChain(ChainBase):
mediainfo: MediaInfo = self.mediachain.recognize_media(tmdbid=tmdbid, doubanid=doubanid, mtype=mtype)
if not mediainfo:
return False, f"媒体信息识别失败tmdbid{tmdbid}doubanid{doubanid}type: {mtype.value}"
else:
# 更新媒体图片
self.obtain_images(mediainfo=mediainfo)
# 开始进度
self.progress.start(ProgressKey.FileTransfer)
self.progress.update(value=0,
text=f"开始转移 {in_path} ...",
key=ProgressKey.FileTransfer)
# 开始转移
state, errmsg = self.do_transfer(
state, errmsg = self.__do_transfer(
storage=storage,
path=in_path,
drive_id=drive_id,
@ -872,17 +878,17 @@ class TransferChain(ChainBase):
return True, ""
else:
# 没有输入TMDBID时按文件识别
state, errmsg = self.do_transfer(storage=storage,
path=in_path,
drive_id=drive_id,
fileid=fileid,
filetype=filetype,
target=target,
transfer_type=transfer_type,
season=season,
epformat=epformat,
min_filesize=min_filesize,
force=force)
state, errmsg = self.__do_transfer(storage=storage,
path=in_path,
drive_id=drive_id,
fileid=fileid,
filetype=filetype,
target=target,
transfer_type=transfer_type,
season=season,
epformat=epformat,
min_filesize=min_filesize,
force=force)
return state, errmsg
def send_transfer_message(self, meta: MetaBase, mediainfo: MediaInfo,