Merge pull request #296 from wikrin/main

feat(mediasyncdel): 新增时间验证,降低误删发生率
This commit is contained in:
thsrite
2025-10-07 16:21:49 +08:00
committed by GitHub

View File

@@ -583,7 +583,7 @@ class MediaSyncDel(_PluginBase):
if not self._enabled or str(self._sync_type) != "webhook":
return
event_data = event.event_data
event_data: schemas.WebhookEventInfo = event.event_data
event_type = event_data.event
# Emby Webhook event_type = library.deleted
@@ -602,6 +602,8 @@ class MediaSyncDel(_PluginBase):
season_num = event_data.season_id
# 集数
episode_num = event_data.episode_id
# 操作时间戳
delete_time = self.format_timestamp(event_data.json_object)
"""
执行删除逻辑
@@ -633,10 +635,11 @@ class MediaSyncDel(_PluginBase):
media_path=media_path,
tmdb_id=tmdb_id,
season_num=season_num,
episode_num=episode_num)
episode_num=episode_num,
delete_time=delete_time)
@eventmanager.register(EventType.WebhookMessage)
def sync_del_by_plugin(self, event):
def sync_del_by_plugin(self, event: Event):
"""
emby删除媒体库同步删除历史记录
Scripter X插件
@@ -644,7 +647,7 @@ class MediaSyncDel(_PluginBase):
if not self._enabled or str(self._sync_type) != "plugin":
return
event_data = event.event_data
event_data: schemas.WebhookEventInfo = event.event_data
event_type = event_data.event
# Scripter X插件 event_type = media_del
@@ -746,8 +749,16 @@ class MediaSyncDel(_PluginBase):
season_num=season_num,
episode_num=episode_num)
def __sync_del(self, media_type: str, media_name: str, media_path: str,
tmdb_id: int, season_num: str, episode_num: str):
def __sync_del(
self,
media_type: str,
media_name: str,
media_path: str,
tmdb_id: int,
season_num: str,
episode_num: str,
delete_time: Optional[str] = None,
):
if not media_type:
logger.error(f"{media_name} 同步删除失败,未获取到媒体类型,请检查媒体是否刮削")
return
@@ -774,14 +785,18 @@ class MediaSyncDel(_PluginBase):
season_num=season_num,
episode_num=episode_num)
logger.info(f"正在同步删除{msg}")
if not transfer_history:
logger.warn(
f"{media_type} {media_name} 未获取到可删除数据请检查路径映射是否配置错误请检查tmdbid获取是否正确")
return
logger.info(f"获取到 {len(transfer_history)} 条转移记录,开始同步删除")
if delete_time:
latest_his = max(transfer_history, key=lambda x: x.date)
if delete_time < latest_his.date:
logger.warn(f"忽略删除 {msg}, 整理时间: {latest_his.date}, 发生在删除事件: {delete_time} 之后")
return
logger.info(f"开始同步删除 {msg}, 获取到 {len(transfer_history)} 条转移记录")
# 开始删除
year = None
del_torrent_hashs = []
@@ -1223,3 +1238,14 @@ class MediaSyncDel(_PluginBase):
return ""
tmdb_image_url = f"https://{settings.TMDB_IMAGE_DOMAIN}"
return tmdb_image_url + f"/t/p/{prefix}{path}"
@staticmethod
def format_timestamp(json_data: dict) -> str:
from app.utils.string import StringUtils
return StringUtils.format_timestamp(
StringUtils.str_to_timestamp(
json_data.get("UtcTimestamp") # jellyfin
or json_data.get("Date") # emby
)
)