From a7b830e4fd1b156a449687dc6a509dff14d4f90b Mon Sep 17 00:00:00 2001 From: noone Date: Tue, 23 Dec 2025 07:54:42 +0800 Subject: [PATCH] =?UTF-8?q?fix(mediaservermsg):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=8D=95=E9=9B=86=E5=89=A7=E6=83=85=E4=BF=A1=E6=81=AF=E6=9C=89?= =?UTF-8?q?=E6=A6=82=E7=8E=87=E8=8E=B7=E5=8F=96=E5=A4=B1=E8=B4=A5=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构safe_get_overview函数,增加详细的文档说明 - 优化单集剧情获取逻辑,优先使用webhook事件的overview --- package.v2.json | 3 +- plugins.v2/mediaservermsg/__init__.py | 45 +++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/package.v2.json b/package.v2.json index f33e09c..47437a1 100644 --- a/package.v2.json +++ b/package.v2.json @@ -93,11 +93,12 @@ "name": "媒体库服务器通知", "description": "发送Emby/Jellyfin/Plex服务器的播放、入库等通知消息。", "labels": "消息通知,媒体库", - "version": "1.8", + "version": "1.8.1", "icon": "mediaplay.png", "author": "jxxghp", "level": 1, "history": { + "v1.8.1": "修复单集剧情信息有概率获取失败的问题", "v1.8": "当整理路径中没有tmdbid时,会尝试从媒体服务器中获取", "v1.7.1": "未获取到tmdb信息则按原有逻辑发送;电影显示海报", "v1.7": "对TV剧集入库事件进行聚合,避免消息轰炸。更新后如果打不开插件,请重置插件", diff --git a/plugins.v2/mediaservermsg/__init__.py b/plugins.v2/mediaservermsg/__init__.py index f195981..d0af719 100644 --- a/plugins.v2/mediaservermsg/__init__.py +++ b/plugins.v2/mediaservermsg/__init__.py @@ -37,7 +37,7 @@ class MediaServerMsg(_PluginBase): # 插件图标 plugin_icon = "mediaplay.png" # 插件版本 - plugin_version = "1.8" + plugin_version = "1.8.1" # 插件作者 plugin_author = "jxxghp" # 作者主页 @@ -761,29 +761,62 @@ class MediaServerMsg(_PluginBase): # 安全地获取概述信息 def safe_get_overview(tmdb_data, event_data, multiple_eps): - """安全地获取剧集概述""" + """ + 安全地获取剧集概述信息 + + 该函数按照以下优先级获取剧情概述: + 1. 首先尝试使用来自webhook事件的overview(event_data.overview) + 2. 如果webhook事件中没有overview,则从TMDB数据中获取 + - 如果是多集入库(multiple_eps=True),则返回剧集整体概述 + - 如果是单集入库(multiple_eps=False),则优先返回该集的概述 + 如果该集概述为空,则回退到剧集整体概述 + + Args: + tmdb_data (dict): TMDB API返回的剧集数据 + event_data (WebhookEventInfo): Webhook事件数据 + multiple_eps (bool): 是否为多集入库(多个episode聚合发送) + + Returns: + str: 剧情概述信息,如果无法获取则返回空字符串 + """ + # 优先使用来自webhook事件的概述信息 if event_data.overview: return event_data.overview + + # 如果webhook事件中没有概述,则尝试从TMDB数据中获取 elif tmdb_data: + # 多集入库情况下,返回剧集整体概述 if multiple_eps: return tmdb_data.get('overview', '') else: - # 单集情况下尝试获取具体集数的概述 + # 单集入库情况下,优先获取具体集数的概述 episodes = tmdb_data.get('episodes', []) + + # 检查是否有episode_id,并且episodes数据存在 if (episodes and hasattr(event_data, 'episode_id') and event_data.episode_id is not None): try: + # 将episode_id转换为数组索引(集数从1开始,数组从0开始) ep_index = int(event_data.episode_id) - 1 + + # 确保索引在有效范围内 if 0 <= ep_index < len(episodes): episode_info = episodes[ep_index] - return episode_info.get('overview', tmdb_data.get('overview', '')) + episode_overview = episode_info.get('overview', '') + + # 如果该集的概述存在且非空,则返回该集概述 + if episode_overview: + return episode_overview except (ValueError, TypeError): + # 如果转换episode_id为整数失败,跳过异常,回退到剧集整体概述 pass - # 如果无法获取单集概述,回退到剧集整体概述 + + # 如果无法获取该集概述,或episode_id不存在,回退到剧集整体概述 return tmdb_data.get('overview', '') + + # 如果以上都失败,返回空字符串 return '' - try: if not first_event.tmdb_id: logger.debug("tmdb_id为空,使用原有逻辑发送消息")