zhenxun_bot/zhenxun/services/renderer/engine.py
webjoin111 33645422ac ♻️ refactor(UI): 重构UI渲染服务为组件化分层架构
♻️ **架构重构**
- UI渲染服务重构为组件化分层架构
- 解耦主题管理、HTML生成、截图功能

 **新增功能**
- `zhenxun.ui` 统一入口,提供 `render`、`markdown`、`vstack` 等API
- `RenderableComponent` 基类和渲染协议抽象
- 新增主题管理器和截图引擎模块

⚙️ **配置优化**
- UI配置迁移至 `superuser/ui_manager.py`
- 新增"重载UI主题"管理指令

🔧 **性能改进**
- 优化渲染缓存,支持组件级透明缓存
- 所有UI组件适配新渲染流程
2025-08-18 21:45:48 +08:00

35 lines
1015 B
Python

from pathlib import Path
from nonebot_plugin_htmlrender import html_to_pic
from .protocols import ScreenshotEngine
class PlaywrightEngine(ScreenshotEngine):
"""使用 nonebot-plugin-htmlrender 实现的截图引擎。"""
async def render(self, html: str, base_url_path: Path, **render_options) -> bytes:
base_url_for_browser = base_url_path.absolute().as_uri()
if not base_url_for_browser.endswith("/"):
base_url_for_browser += "/"
final_render_options = {
"viewport": {"width": 800, "height": 10},
**render_options,
"base_url": base_url_for_browser,
}
return await html_to_pic(
html=html,
template_path=base_url_for_browser,
**final_render_options,
)
def get_screenshot_engine() -> ScreenshotEngine:
"""
截图引擎工厂函数。
目前只返回 PlaywrightEngine, 未来可以根据配置返回不同的引擎。
"""
return PlaywrightEngine()