mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-07-09 06:22:29 +08:00
fix:只有媒体文件整完成才触发事件,以保持与历史一致
This commit is contained in:
@@ -4,7 +4,6 @@ import threading
|
|||||||
import traceback
|
import traceback
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from time import sleep
|
|
||||||
from typing import List, Optional, Tuple, Union, Dict, Callable
|
from typing import List, Optional, Tuple, Union, Dict, Callable
|
||||||
|
|
||||||
from app import schemas
|
from app import schemas
|
||||||
@@ -367,10 +366,12 @@ class TransferChain(ChainBase, metaclass=Singleton):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
# 可处理的文件后缀(视频文件、字幕、音频文件)
|
# 主要媒体文件后缀
|
||||||
self._allowed_exts = settings.RMT_MEDIAEXT + settings.RMT_SUBEXT + settings.RMT_AUDIOEXT
|
self._media_exts = settings.RMT_MEDIAEXT
|
||||||
# 附加文件后缀
|
# 附加文件后缀
|
||||||
self._extra_exts = settings.RMT_SUBEXT + settings.RMT_AUDIOEXT
|
self._extra_exts = settings.RMT_SUBEXT + settings.RMT_AUDIOEXT
|
||||||
|
# 可处理的文件后缀(视频文件、字幕、音频文件)
|
||||||
|
self._allowed_exts = self._media_exts + self._extra_exts
|
||||||
# 待整理任务队列
|
# 待整理任务队列
|
||||||
self._queue = queue.Queue()
|
self._queue = queue.Queue()
|
||||||
# 文件整理线程
|
# 文件整理线程
|
||||||
@@ -402,6 +403,37 @@ class TransferChain(ChainBase, metaclass=Singleton):
|
|||||||
daemon=True)
|
daemon=True)
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
|
def __is_allowed_file(self, fileitem: FileItem) -> bool:
|
||||||
|
"""
|
||||||
|
判断是否允许的扩展名
|
||||||
|
"""
|
||||||
|
if not fileitem.extension:
|
||||||
|
return False
|
||||||
|
return True if f".{fileitem.extension.lower()}" in self._allowed_exts else False
|
||||||
|
|
||||||
|
def __is_extra_file(self, fileitem: FileItem) -> bool:
|
||||||
|
"""
|
||||||
|
判断是否额外的扩展名
|
||||||
|
"""
|
||||||
|
if not fileitem.extension:
|
||||||
|
return False
|
||||||
|
return True if f".{fileitem.extension.lower()}" in self._extra_exts else False
|
||||||
|
|
||||||
|
def __is_media_file(self, fileitem: FileItem) -> bool:
|
||||||
|
"""
|
||||||
|
判断是否为主要媒体文件
|
||||||
|
"""
|
||||||
|
if not fileitem.extension:
|
||||||
|
return False
|
||||||
|
return True if f".{fileitem.extension.lower()}" in self._media_exts else False
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def __is_allow_filesize(fileitem: FileItem, min_filesize: int) -> bool:
|
||||||
|
"""
|
||||||
|
判断是否满足最小文件大小
|
||||||
|
"""
|
||||||
|
return True if not min_filesize or (fileitem.size or 0) > min_filesize * 1024 * 1024 else False
|
||||||
|
|
||||||
def __default_callback(self, task: TransferTask,
|
def __default_callback(self, task: TransferTask,
|
||||||
transferinfo: TransferInfo, /) -> Tuple[bool, str]:
|
transferinfo: TransferInfo, /) -> Tuple[bool, str]:
|
||||||
"""
|
"""
|
||||||
@@ -434,7 +466,7 @@ class TransferChain(ChainBase, metaclass=Singleton):
|
|||||||
season_episode=se_str,
|
season_episode=se_str,
|
||||||
username=task.username)
|
username=task.username)
|
||||||
# 刮削事件
|
# 刮削事件
|
||||||
if transferinfo.need_scrape:
|
if transferinfo.need_scrape and self.__is_media_file(task.fileitem):
|
||||||
self.eventmanager.send_event(EventType.MetadataScrape, {
|
self.eventmanager.send_event(EventType.MetadataScrape, {
|
||||||
'meta': task.meta,
|
'meta': task.meta,
|
||||||
'mediainfo': task.mediainfo,
|
'mediainfo': task.mediainfo,
|
||||||
@@ -459,6 +491,16 @@ class TransferChain(ChainBase, metaclass=Singleton):
|
|||||||
mediainfo=task.mediainfo,
|
mediainfo=task.mediainfo,
|
||||||
transferinfo=transferinfo
|
transferinfo=transferinfo
|
||||||
)
|
)
|
||||||
|
# 整理失败事件
|
||||||
|
if self.__is_media_file(task.fileitem):
|
||||||
|
self.eventmanager.send_event(EventType.TransferFailed, {
|
||||||
|
'fileitem': task.fileitem,
|
||||||
|
'meta': task.meta,
|
||||||
|
'mediainfo': task.mediainfo,
|
||||||
|
'transferinfo': transferinfo,
|
||||||
|
'downloader': task.downloader,
|
||||||
|
'download_hash': task.download_hash,
|
||||||
|
})
|
||||||
# 发送失败消息
|
# 发送失败消息
|
||||||
self.post_message(Notification(
|
self.post_message(Notification(
|
||||||
mtype=NotificationType.Manual,
|
mtype=NotificationType.Manual,
|
||||||
@@ -492,14 +534,15 @@ class TransferChain(ChainBase, metaclass=Singleton):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 整理完成事件
|
# 整理完成事件
|
||||||
self.eventmanager.send_event(EventType.TransferComplete, {
|
if self.__is_media_file(task.fileitem):
|
||||||
'fileitem': task.fileitem,
|
self.eventmanager.send_event(EventType.TransferComplete, {
|
||||||
'meta': task.meta,
|
'fileitem': task.fileitem,
|
||||||
'mediainfo': task.mediainfo,
|
'meta': task.meta,
|
||||||
'transferinfo': transferinfo,
|
'mediainfo': task.mediainfo,
|
||||||
'downloader': task.downloader,
|
'transferinfo': transferinfo,
|
||||||
'download_hash': task.download_hash,
|
'downloader': task.downloader,
|
||||||
})
|
'download_hash': task.download_hash,
|
||||||
|
})
|
||||||
|
|
||||||
with task_lock:
|
with task_lock:
|
||||||
# 登记转移成功文件清单
|
# 登记转移成功文件清单
|
||||||
@@ -605,8 +648,9 @@ class TransferChain(ChainBase, metaclass=Singleton):
|
|||||||
__process_msg = f"正在整理 {fileitem.name} ..."
|
__process_msg = f"正在整理 {fileitem.name} ..."
|
||||||
logger.info(__process_msg)
|
logger.info(__process_msg)
|
||||||
with task_lock:
|
with task_lock:
|
||||||
self._progress.update(value=(self._processed_num / self._total_num * 100) if self._total_num else 0,
|
self._progress.update(
|
||||||
text=__process_msg)
|
value=(self._processed_num / self._total_num * 100) if self._total_num else 0,
|
||||||
|
text=__process_msg)
|
||||||
# 整理
|
# 整理
|
||||||
state, err_msg = self.__handle_transfer(task=task, callback=item.callback)
|
state, err_msg = self.__handle_transfer(task=task, callback=item.callback)
|
||||||
|
|
||||||
@@ -618,8 +662,9 @@ class TransferChain(ChainBase, metaclass=Singleton):
|
|||||||
self._processed_num += 1
|
self._processed_num += 1
|
||||||
__process_msg = f"{fileitem.name} 整理完成"
|
__process_msg = f"{fileitem.name} 整理完成"
|
||||||
logger.info(__process_msg)
|
logger.info(__process_msg)
|
||||||
self._progress.update(value=(self._processed_num / self._total_num * 100) if self._total_num else 100,
|
self._progress.update(
|
||||||
text=__process_msg)
|
value=(self._processed_num / self._total_num * 100) if self._total_num else 100,
|
||||||
|
text=__process_msg)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"{fileitem.name} 整理任务处理出现错误:{e} - {traceback.format_exc()}")
|
logger.error(f"{fileitem.name} 整理任务处理出现错误:{e} - {traceback.format_exc()}")
|
||||||
with task_lock:
|
with task_lock:
|
||||||
@@ -916,7 +961,7 @@ class TransferChain(ChainBase, metaclass=Singleton):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def __get_trans_fileitems(
|
def __get_trans_fileitems(
|
||||||
self, fileitem: FileItem, check: bool = True
|
self, fileitem: FileItem, check: bool = True
|
||||||
) -> List[Tuple[FileItem, bool]]:
|
) -> List[Tuple[FileItem, bool]]:
|
||||||
"""
|
"""
|
||||||
获取整理目录或文件列表
|
获取整理目录或文件列表
|
||||||
@@ -1009,25 +1054,6 @@ class TransferChain(ChainBase, metaclass=Singleton):
|
|||||||
:param continue_callback: 继续处理回调
|
:param continue_callback: 继续处理回调
|
||||||
返回:成功标识,错误信息
|
返回:成功标识,错误信息
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __is_allowed_file(_ext: str) -> bool:
|
|
||||||
"""
|
|
||||||
判断是否允许的扩展名
|
|
||||||
"""
|
|
||||||
return True if f".{_ext.lower()}" in self._allowed_exts else False
|
|
||||||
|
|
||||||
def __is_extra_file(_ext: str) -> bool:
|
|
||||||
"""
|
|
||||||
判断是否额外的扩展名
|
|
||||||
"""
|
|
||||||
return True if f".{_ext.lower()}" in self._extra_exts else False
|
|
||||||
|
|
||||||
def __is_allow_filesize(_ext: str, _size: int, _min_filesize: int) -> bool:
|
|
||||||
"""
|
|
||||||
判断是否满足最小文件大小
|
|
||||||
"""
|
|
||||||
return True if not _min_filesize or _size > _min_filesize * 1024 * 1024 else False
|
|
||||||
|
|
||||||
# 是否全部成功
|
# 是否全部成功
|
||||||
all_success = True
|
all_success = True
|
||||||
|
|
||||||
@@ -1054,10 +1080,8 @@ class TransferChain(ChainBase, metaclass=Singleton):
|
|||||||
|
|
||||||
# 过滤后缀和大小(蓝光目录、附加文件不过滤大小)
|
# 过滤后缀和大小(蓝光目录、附加文件不过滤大小)
|
||||||
file_items = [f for f in file_items if f[1] or
|
file_items = [f for f in file_items if f[1] or
|
||||||
__is_extra_file(f[0].extension) or
|
self.__is_extra_file(f[0]) or
|
||||||
(__is_allowed_file(f[0].extension) and __is_allow_filesize(_ext=f[0].extension,
|
(self.__is_allowed_file(f[0]) and self.__is_allow_filesize(f[0], min_filesize))]
|
||||||
_size=f[0].size or 0,
|
|
||||||
_min_filesize=min_filesize))]
|
|
||||||
|
|
||||||
if not file_items:
|
if not file_items:
|
||||||
logger.warn(f"{fileitem.path} 没有找到可整理的媒体文件")
|
logger.warn(f"{fileitem.path} 没有找到可整理的媒体文件")
|
||||||
|
|||||||
@@ -38,8 +38,10 @@ class EventType(Enum):
|
|||||||
SiteUpdated = "site.updated"
|
SiteUpdated = "site.updated"
|
||||||
# 站点已刷新
|
# 站点已刷新
|
||||||
SiteRefreshed = "site.refreshed"
|
SiteRefreshed = "site.refreshed"
|
||||||
# 转移完成
|
# 整理完成
|
||||||
TransferComplete = "transfer.complete"
|
TransferComplete = "transfer.complete"
|
||||||
|
# 整理失败
|
||||||
|
TransferFailed = "transfer.failed"
|
||||||
# 下载已添加
|
# 下载已添加
|
||||||
DownloadAdded = "download.added"
|
DownloadAdded = "download.added"
|
||||||
# 删除历史记录
|
# 删除历史记录
|
||||||
|
|||||||
Reference in New Issue
Block a user