fix: only use downloaded media paths for quoted images
This commit is contained in:
@@ -18,6 +18,19 @@ def _is_emoji_message(msg: dict) -> bool:
|
||||
return message_type in {'47', '1048625', '1090519089'} or any(marker in content for marker in xml_markers)
|
||||
|
||||
|
||||
def _is_usable_local_media_path(value: str) -> bool:
|
||||
if not value:
|
||||
return False
|
||||
value = str(value).strip()
|
||||
if value.startswith(('http://', 'https://')):
|
||||
return True
|
||||
if 'static/images' in value or 'static\\images' in value:
|
||||
return True
|
||||
if '/' in value or '\\' in value:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def _proxy_remote_media(target_url: str) -> Response:
|
||||
if not target_url:
|
||||
return Response("missing url", status=400)
|
||||
@@ -117,17 +130,11 @@ def get_messages():
|
||||
referenced_msg = server.message_storage.get_message_by_message_id(reference_svrid)
|
||||
if referenced_msg:
|
||||
if msg['quoted_type'] == 'image':
|
||||
msg['quoted_preview_image'] = (
|
||||
referenced_msg.get('image_path')
|
||||
or referenced_msg.get('message_thumb')
|
||||
or msg['quoted_preview_image']
|
||||
)
|
||||
image_path = referenced_msg.get('image_path') or ''
|
||||
msg['quoted_preview_image'] = image_path if _is_usable_local_media_path(image_path) else ''
|
||||
elif msg['quoted_type'] == 'video':
|
||||
msg['quoted_preview_video_thumb'] = (
|
||||
referenced_msg.get('message_thumb')
|
||||
or referenced_msg.get('image_path')
|
||||
or msg['quoted_preview_video_thumb']
|
||||
)
|
||||
video_thumb = referenced_msg.get('message_thumb') or referenced_msg.get('image_path') or ''
|
||||
msg['quoted_preview_video_thumb'] = video_thumb if _is_usable_local_media_path(video_thumb) else ''
|
||||
else:
|
||||
# 其他类型的应用消息,解析 XML 提取标题
|
||||
root = ET.fromstring(msg['content'])
|
||||
|
||||
Reference in New Issue
Block a user