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)
|
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:
|
def _proxy_remote_media(target_url: str) -> Response:
|
||||||
if not target_url:
|
if not target_url:
|
||||||
return Response("missing url", status=400)
|
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)
|
referenced_msg = server.message_storage.get_message_by_message_id(reference_svrid)
|
||||||
if referenced_msg:
|
if referenced_msg:
|
||||||
if msg['quoted_type'] == 'image':
|
if msg['quoted_type'] == 'image':
|
||||||
msg['quoted_preview_image'] = (
|
image_path = referenced_msg.get('image_path') or ''
|
||||||
referenced_msg.get('image_path')
|
msg['quoted_preview_image'] = image_path if _is_usable_local_media_path(image_path) else ''
|
||||||
or referenced_msg.get('message_thumb')
|
|
||||||
or msg['quoted_preview_image']
|
|
||||||
)
|
|
||||||
elif msg['quoted_type'] == 'video':
|
elif msg['quoted_type'] == 'video':
|
||||||
msg['quoted_preview_video_thumb'] = (
|
video_thumb = referenced_msg.get('message_thumb') or referenced_msg.get('image_path') or ''
|
||||||
referenced_msg.get('message_thumb')
|
msg['quoted_preview_video_thumb'] = video_thumb if _is_usable_local_media_path(video_thumb) else ''
|
||||||
or referenced_msg.get('image_path')
|
|
||||||
or msg['quoted_preview_video_thumb']
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
# 其他类型的应用消息,解析 XML 提取标题
|
# 其他类型的应用消息,解析 XML 提取标题
|
||||||
root = ET.fromstring(msg['content'])
|
root = ET.fromstring(msg['content'])
|
||||||
|
|||||||
@@ -98,6 +98,9 @@
|
|||||||
<div class="message-media-label">【引用图片】</div>
|
<div class="message-media-label">【引用图片】</div>
|
||||||
<img :src="getQuotedPreviewUrl(scope.row.quoted_preview_image)" class="message-thumb" @click="showQuotedImage(scope.row.quoted_preview_image)">
|
<img :src="getQuotedPreviewUrl(scope.row.quoted_preview_image)" class="message-thumb" @click="showQuotedImage(scope.row.quoted_preview_image)">
|
||||||
</div>
|
</div>
|
||||||
|
<div v-else-if="scope.row.quoted_type === 'image'" class="quoted-media-text">
|
||||||
|
【图片消息】
|
||||||
|
</div>
|
||||||
<div v-else-if="scope.row.quoted_type === 'video' && scope.row.quoted_preview_video_thumb" class="quoted-media-preview">
|
<div v-else-if="scope.row.quoted_type === 'video' && scope.row.quoted_preview_video_thumb" class="quoted-media-preview">
|
||||||
<div class="message-media-label">【引用视频】</div>
|
<div class="message-media-label">【引用视频】</div>
|
||||||
<img :src="scope.row.quoted_preview_video_thumb" class="message-thumb">
|
<img :src="scope.row.quoted_preview_video_thumb" class="message-thumb">
|
||||||
@@ -479,6 +482,13 @@
|
|||||||
gap: 8px;
|
gap: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.quoted-media-text {
|
||||||
|
margin-top: 8px;
|
||||||
|
color: #64748b;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
.message-media-label {
|
.message-media-label {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: #64748b;
|
color: #64748b;
|
||||||
|
|||||||
Reference in New Issue
Block a user