mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-06 20:42:43 +08:00
feat(transfer): TransferOverwriteCheck 支持插件提供源文件真实大小
strm → strm 整理场景下,源 .strm 的 fileitem.size 同样不准, size 模式比较仍会失效,新增 source_size 输出字段允许插件同时 覆盖源/目标的真实媒体大小。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -298,7 +298,7 @@ class TransHandler:
|
||||
logger.info(
|
||||
f"目的文件系统中已经存在同名文件 {target_file},当前整理覆盖模式设置为 {overwrite_mode}"
|
||||
)
|
||||
# 触发覆盖检查事件,允许插件提供目标文件真实大小
|
||||
# 触发覆盖检查事件,允许插件提供源/目标文件真实大小
|
||||
# 或直接给出覆盖决策(例如 .strm 文件指向网盘原始文件)
|
||||
overwrite_event_data = TransferOverwriteCheckEventData(
|
||||
fileitem=fileitem,
|
||||
@@ -313,18 +313,22 @@ class TransHandler:
|
||||
overwrite_event_data,
|
||||
)
|
||||
plugin_overwrite: Optional[bool] = None
|
||||
plugin_source_size: Optional[int] = None
|
||||
plugin_target_size: Optional[int] = None
|
||||
if overwrite_event and overwrite_event.event_data:
|
||||
overwrite_event_data = overwrite_event.event_data
|
||||
plugin_overwrite = overwrite_event_data.overwrite
|
||||
plugin_source_size = overwrite_event_data.source_size
|
||||
plugin_target_size = overwrite_event_data.target_size
|
||||
if (
|
||||
plugin_overwrite is not None
|
||||
or plugin_source_size is not None
|
||||
or plugin_target_size is not None
|
||||
):
|
||||
logger.info(
|
||||
f"覆盖检查事件由 {overwrite_event_data.source} 处理:"
|
||||
f"overwrite={plugin_overwrite}, "
|
||||
f"source_size={plugin_source_size}, "
|
||||
f"target_size={plugin_target_size}, "
|
||||
f"reason={overwrite_event_data.reason}"
|
||||
)
|
||||
@@ -349,12 +353,17 @@ class TransHandler:
|
||||
overflag = True
|
||||
elif overwrite_mode == "size":
|
||||
# 存在时大覆盖小
|
||||
source_size = (
|
||||
plugin_source_size
|
||||
if plugin_source_size is not None
|
||||
else fileitem.size
|
||||
)
|
||||
target_size = (
|
||||
plugin_target_size
|
||||
if plugin_target_size is not None
|
||||
else target_item.size
|
||||
)
|
||||
if target_size < fileitem.size:
|
||||
if target_size < source_size:
|
||||
logger.info(
|
||||
f"目标文件文件大小更小,将覆盖:{new_file}"
|
||||
)
|
||||
|
||||
@@ -317,9 +317,9 @@ class TransferOverwriteCheckEventData(ChainEventData):
|
||||
"""
|
||||
TransferOverwriteCheck 事件的数据模型
|
||||
|
||||
在覆盖模式判断(如按文件大小覆盖)执行之前触发,允许插件提供目标文件
|
||||
的真实大小(例如本地 .strm 文件指向的网盘原始文件大小),或者直接给出
|
||||
覆盖决策。
|
||||
在覆盖模式判断(如按文件大小覆盖)执行之前触发,允许插件提供源文件与
|
||||
目标文件的真实大小(例如本地 .strm 文件指向的网盘原始文件大小),或者
|
||||
直接给出覆盖决策。
|
||||
|
||||
Attributes:
|
||||
# 输入参数
|
||||
@@ -332,6 +332,8 @@ class TransferOverwriteCheckEventData(ChainEventData):
|
||||
options (dict): 其他参数
|
||||
|
||||
# 输出参数
|
||||
source_size (Optional[int]): 由插件提供的源文件真实大小,覆盖
|
||||
fileitem.size 用于 size 模式比较;为 None 时表示不修改
|
||||
target_size (Optional[int]): 由插件提供的目标文件真实大小,覆盖
|
||||
target_item.size 用于 size 模式比较;为 None 时表示不修改
|
||||
overwrite (Optional[bool]): 由插件直接给出的覆盖决策,非 None 时
|
||||
@@ -350,6 +352,9 @@ class TransferOverwriteCheckEventData(ChainEventData):
|
||||
options: Optional[dict] = Field(default=None, description="其他参数")
|
||||
|
||||
# 输出参数
|
||||
source_size: Optional[int] = Field(
|
||||
default=None, description="插件提供的源文件真实大小"
|
||||
)
|
||||
target_size: Optional[int] = Field(
|
||||
default=None, description="插件提供的目标文件真实大小"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user