Skip to content

Commit fc55c61

Browse files
authored
feat(renderer): improve error handling with fallback images for missing resources (#525)
1 parent ebec256 commit fc55c61

12 files changed

Lines changed: 14 additions & 16 deletions

File tree

src/nonebot_plugin_parser/renders/common.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -387,15 +387,12 @@ async def _load_cover(self) -> PILImage | None:
387387
if self.result.video is None:
388388
return None
389389

390-
cover_task = self.result.video.cover
390+
cover_path = None
391+
if cover_task := self.result.video.cover:
392+
cover_path = await cover_task.safe_get()
391393

392-
if cover_task is None:
393-
return None
394-
395-
cover_path = await cover_task.safe_get()
396-
397-
if cover_path is None or not cover_path.exists():
398-
return None
394+
if cover_path is None:
395+
return Image.open(resources.random_fallback_pic())
399396

400397
with Image.open(cover_path) as img:
401398
if img.mode != "RGBA":
@@ -473,7 +470,7 @@ async def _render_image_grid(self) -> None:
473470
for content in display_contents:
474471
path = await content.safe_get()
475472
if path is None or not path.exists():
476-
continue
473+
path = resources.random_fallback_pic()
477474
if img := self._load_grid_image(path, len(display_contents)):
478475
images.append(img)
479476

@@ -578,7 +575,7 @@ async def _render_img_in_graphics(self, image_content: ImageContent) -> None:
578575
"""渲染图片"""
579576
path = await image_content.path_task.safe_get()
580577
if path is None or not path.exists():
581-
return
578+
path = resources.random_fallback_pic()
582579

583580
with Image.open(path) as img:
584581
if img.width > self.content_width:

src/nonebot_plugin_parser/renders/htmlrender.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import random
21
from typing_extensions import override
32

43
from nonebot import require
@@ -23,18 +22,15 @@ async def render_image(self) -> bytes:
2322
font = pconfig.custom_font or resources.DEFAULT_FONT_PATH
2423
font = font.as_uri() if font.exists() else None
2524

26-
fallback_pics = list(resources.FAILED_PIC_DIR.glob("*.jpg"))
27-
fallback_pic = random.choice(fallback_pics).as_uri() if fallback_pics else None
28-
2925
return await template_to_pic(
3026
template_path=str(self.templates_dir),
3127
template_name="card.html.jinja2",
3228
templates={
3329
"logo": logo,
3430
"font": font,
3531
"result": self.result,
36-
"fallback_pic": fallback_pic,
3732
"font_weight": pconfig.custom_font_weight,
33+
"fallback_pic": resources.random_fallback_pic().as_uri(),
3834
"play_button": resources.DEFAULT_VIDEO_BUTTON_PATH.as_uri(),
3935
"default_avatar": resources.DEFAULT_AVATAR_PATH.as_uri(),
4036
},

src/nonebot_plugin_parser/renders/resources/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import random
12
from pathlib import Path
23

34
RESOURCES_DIR = Path(__file__).parent
@@ -8,5 +9,9 @@
89
"""默认头像文件路径"""
910
DEFAULT_VIDEO_BUTTON_PATH = RESOURCES_DIR / "play.png"
1011
"""默认视频播放按钮文件路径"""
11-
FAILED_PIC_DIR = RESOURCES_DIR / "failed_pic"
12+
FALLBACK_PIC_DIR = RESOURCES_DIR / "fallback_pic"
1213
"""下载失败显示的图片文件路径"""
14+
15+
16+
def random_fallback_pic() -> Path:
17+
return FALLBACK_PIC_DIR / f"{random.randint(1, 9)}.jpg"

src/nonebot_plugin_parser/renders/resources/failed_pic/1.jpg renamed to src/nonebot_plugin_parser/renders/resources/fallback_pic/1.jpg

File renamed without changes.

src/nonebot_plugin_parser/renders/resources/failed_pic/2.jpg renamed to src/nonebot_plugin_parser/renders/resources/fallback_pic/2.jpg

File renamed without changes.

src/nonebot_plugin_parser/renders/resources/failed_pic/3.jpg renamed to src/nonebot_plugin_parser/renders/resources/fallback_pic/3.jpg

File renamed without changes.

src/nonebot_plugin_parser/renders/resources/failed_pic/4.jpg renamed to src/nonebot_plugin_parser/renders/resources/fallback_pic/4.jpg

File renamed without changes.

src/nonebot_plugin_parser/renders/resources/failed_pic/5.jpg renamed to src/nonebot_plugin_parser/renders/resources/fallback_pic/5.jpg

File renamed without changes.

src/nonebot_plugin_parser/renders/resources/failed_pic/6.jpg renamed to src/nonebot_plugin_parser/renders/resources/fallback_pic/6.jpg

File renamed without changes.

src/nonebot_plugin_parser/renders/resources/failed_pic/7.jpg renamed to src/nonebot_plugin_parser/renders/resources/fallback_pic/7.jpg

File renamed without changes.

0 commit comments

Comments
 (0)