From b583a60f23057942053a827d06f722836b23d9f4 Mon Sep 17 00:00:00 2001 From: Attente <19653207+wikrin@users.noreply.github.com> Date: Tue, 13 May 2025 19:35:13 +0800 Subject: [PATCH 1/2] =?UTF-8?q?refactor(app):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=9E=84=E5=BB=BA=E5=99=A8=E7=9A=84=E7=A9=BA?= =?UTF-8?q?=E5=80=BC=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 TemplateContextBuilder 类中增加了对空值的过滤,解决通知模板渲染出`'None'`的问题 --- app/helper/message.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/helper/message.py b/app/helper/message.py index 533df1ba..12b114c9 100644 --- a/app/helper/message.py +++ b/app/helper/message.py @@ -66,7 +66,8 @@ class TemplateContextBuilder: if include_raw_objects: self._add_raw_objects(meta, mediainfo, torrentinfo, transferinfo, episodes_info) - return self._context + # 移除空值 + return {k: v for k, v in self._context.items() if v is not None} def _add_media_info(self, mediainfo: MediaInfo): """ @@ -269,7 +270,7 @@ class TemplateContextBuilder: # 当前季的全部集信息 "__episodes_info__": episodes_info, } - self._context.update({k: v for k, v in raw_objects.items() if v is not None}) + self._context.update(raw_objects) @staticmethod def __convert_invalid_characters(filename: str): From 99c1422f37316d4a388923a0178d59a0a17f08e4 Mon Sep 17 00:00:00 2001 From: Attente <19653207+wikrin@users.noreply.github.com> Date: Tue, 13 May 2025 21:21:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(message):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=A8=A1=E6=9D=BF=E4=B8=AD=E7=9A=84=E5=AD=A3?= =?UTF-8?q?=E5=8F=B7=E6=98=BE=E7=A4=BA=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 TemplateContextBuilder 中添加 season_fmt 字段,用于存储 Sxx 格式的季号 - 在 meta_info 中添加 season_fmt 字段,用于存储 Sxx 格式的季号 - 更新消息模板中的 season 引用为 season_fmt,以实现统一的季号显示格式 - 新增数据库迁移脚本,用于更新消息模板中的 season 引用为 season_fmt --- app/helper/message.py | 5 ++++ database/versions/486e56a62dcb_2_1_5.py | 37 +++++++++++++++++++++++++ database/versions/89d24811e894_2_1_4.py | 7 +++-- 3 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 database/versions/486e56a62dcb_2_1_5.py diff --git a/app/helper/message.py b/app/helper/message.py index 12b114c9..8822e5fc 100644 --- a/app/helper/message.py +++ b/app/helper/message.py @@ -74,6 +74,7 @@ class TemplateContextBuilder: 增加媒体信息 """ if not mediainfo: return + season_fmt = f"S{mediainfo.season:02d}" if mediainfo.season is not None else None base_info = { # 标题 "title": self.__convert_invalid_characters(mediainfo.title), @@ -83,6 +84,8 @@ class TemplateContextBuilder: "original_title": self.__convert_invalid_characters(mediainfo.original_title), # 季号 "season": self._context.get("season") or mediainfo.season, + # Sxx + "season_fmt": self._context.get("season_fmt") or season_fmt, # 年份 "year": mediainfo.year or self._context.get("year"), # 媒体标题 + 年份 @@ -149,6 +152,8 @@ class TemplateContextBuilder: meta.name, meta.year) if meta.year else meta.name, # 季号 "season": meta.season_seq, + # Sxx + "season_fmt": meta.season, # 集号 "episode": meta.episode_seqs, # 季集 SxxExx diff --git a/database/versions/486e56a62dcb_2_1_5.py b/database/versions/486e56a62dcb_2_1_5.py new file mode 100644 index 00000000..dc4a333f --- /dev/null +++ b/database/versions/486e56a62dcb_2_1_5.py @@ -0,0 +1,37 @@ +"""2.1.5 + +Revision ID: 486e56a62dcb +Revises: 89d24811e894 +Create Date: 2025-05-13 19:49:51.271319 + +""" +import re + +from app.db.systemconfig_oper import SystemConfigOper +from app.schemas.types import SystemConfigKey + +# revision identifiers, used by Alembic. +revision = '486e56a62dcb' +down_revision = '89d24811e894' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + ### 将消息模板中的 `season`(为单数字, 且重命名需要这个字段)替换为 `season_fmt`(Sxx格式字符串) ### + _systemconfig = SystemConfigOper() + templates = _systemconfig.get(SystemConfigKey.NotificationTemplates) + if isinstance(templates, dict): + _re = r'(?<={{)(?![^}]*[%|])(\s*)season(\s*)(?=}})|(?<={%)if\s+(?![^%]*[%|])season\s*(?=%)' + for k, v in templates.items(): + # 替换season为season_fmt + result = re.sub(_re, r'\1season_fmt\2', v) + templates[k] = result + # 将更新后的模板存回系统配置 + _systemconfig.set(SystemConfigKey.NotificationTemplates, templates) + # ### end Alembic commands ### + + +def downgrade() -> None: + pass diff --git a/database/versions/89d24811e894_2_1_4.py b/database/versions/89d24811e894_2_1_4.py index aa544399..1f34f9f8 100644 --- a/database/versions/89d24811e894_2_1_4.py +++ b/database/versions/89d24811e894_2_1_4.py @@ -33,7 +33,7 @@ def upgrade() -> None: "downloadAdded": """ { 'title': '{{ title_year }}' - '{% if download_episodes %} {{ season }} {{ download_episodes }}{% else %}{{ season_episode }}{% endif %} 开始下载', + '{% if download_episodes %} {{ season_fmt }} {{ download_episodes }}{% else %}{{ season_episode }}{% endif %} 开始下载', 'text': '{% if site_name %}站点:{{ site_name }}{% endif %}' '{% if resource_term %}\\n质量:{{ resource_term }}{% endif %}' '{% if size %}\\n大小:{{ size }}{% endif %}' @@ -46,10 +46,11 @@ def upgrade() -> None: '{% if labels %}\\n标签:{{ labels }}{% endif %}' '{% if description %}\\n描述:{{ description }}{% endif %}' }""", - "subscribeAdded": "{'title': '{{ title_year }} {{season}} 已添加订阅'}", + "subscribeAdded": "{'title': '{{ title_year }}{% if season_fmt %} {{ season_fmt }}{% endif %} 已添加订阅'}", "subscribeComplete": """ { - 'title': '{{ title_year }} {{season}} 已完成{{msgstr}}', + 'title': '{{ title_year }}' + '{% if season_fmt %} {{ season_fmt }}{% endif %} 已完成{{ msgstr }}', 'text': '{% if vote_average %}评分:{{ vote_average }}{% endif %}' '{% if username %},来自用户:{{ username }}{% endif %}' '{% if actors %}\\n演员:{{ actors }}{% endif %}'