Replace image rendered in the HTML to thumbnail if possible

This commit is contained in:
KnugiHK
2023-06-15 16:19:35 +08:00
parent 3443143744
commit a49a911e03
3 changed files with 22 additions and 4 deletions

View File

@@ -61,6 +61,7 @@ class Message():
self.reply = None self.reply = None
self.quoted_data = None self.quoted_data = None
self.caption = None self.caption = None
self.thumb = None # Android specific
def to_json(self): def to_json(self):
return { return {

View File

@@ -11,6 +11,7 @@ import hmac
from pathlib import Path from pathlib import Path
from mimetypes import MimeTypes from mimetypes import MimeTypes
from hashlib import sha256 from hashlib import sha256
from base64 import b64decode
from Whatsapp_Chat_Exporter.data_model import ChatStore, Message from Whatsapp_Chat_Exporter.data_model import ChatStore, Message
from Whatsapp_Chat_Exporter.utility import MAX_SIZE, ROW_SIZE, Device, rendering, sanitize_except, determine_day, Crypt from Whatsapp_Chat_Exporter.utility import MAX_SIZE, ROW_SIZE, Device, rendering, sanitize_except, determine_day, Crypt
from Whatsapp_Chat_Exporter.utility import brute_force_offset, CRYPT14_OFFSETS from Whatsapp_Chat_Exporter.utility import brute_force_offset, CRYPT14_OFFSETS
@@ -412,10 +413,14 @@ def media(db, data, media_folder):
file_path, file_path,
message_url, message_url,
mime_type, mime_type,
media_key media_key,
file_hash,
thumbnail
FROM message_media FROM message_media
INNER JOIN messages INNER JOIN messages
ON message_media.message_row_id = messages._id ON message_media.message_row_id = messages._id
LEFT JOIN media_hash_thumbnail
ON message_media.file_hash = media_hash_thumbnail.media_hash
ORDER BY messages.key_remote_jid ASC""" ORDER BY messages.key_remote_jid ASC"""
) )
except sqlite3.OperationalError: except sqlite3.OperationalError:
@@ -424,7 +429,9 @@ def media(db, data, media_folder):
file_path, file_path,
message_url, message_url,
mime_type, mime_type,
media_key media_key,
file_hash,
thumbnail
FROM message_media FROM message_media
INNER JOIN message INNER JOIN message
ON message_media.message_row_id = message._id ON message_media.message_row_id = message._id
@@ -432,10 +439,14 @@ def media(db, data, media_folder):
ON chat._id = message.chat_row_id ON chat._id = message.chat_row_id
INNER JOIN jid INNER JOIN jid
ON jid._id = chat.jid_row_id ON jid._id = chat.jid_row_id
LEFT JOIN media_hash_thumbnail
ON message_media.file_hash = media_hash_thumbnail.media_hash
ORDER BY jid.raw_string ASC""" ORDER BY jid.raw_string ASC"""
) )
content = c.fetchone() content = c.fetchone()
mime = MimeTypes() mime = MimeTypes()
if not os.path.isdir(f"{media_folder}/thumbnails"):
os.mkdir(f"{media_folder}/thumbnails")
while content is not None: while content is not None:
file_path = f"{media_folder}/{content['file_path']}" file_path = f"{media_folder}/{content['file_path']}"
message = data[content["key_remote_jid"]].messages[content["message_row_id"]] message = data[content["key_remote_jid"]].messages[content["message_row_id"]]
@@ -465,6 +476,12 @@ def media(db, data, media_folder):
message.data = "The media is missing" message.data = "The media is missing"
message.mime = "media" message.mime = "media"
message.meta = True message.meta = True
if content["thumbnail"] is not None:
thumb_path = f"{media_folder}/thumbnails/{b64decode(content['file_hash']).hex()}.png"
if not os.path.isfile(thumb_path):
with open(thumb_path, "wb") as f:
f.write(content["thumbnail"])
message.thumb = thumb_path
i += 1 i += 1
if i % 100 == 0: if i % 100 == 0:
print(f"Processing media...({i}/{total_row_number})", end="\r") print(f"Processing media...({i}/{total_row_number})", end="\r")

View File

@@ -128,7 +128,7 @@
{{ msg.data | sanitize_except() }} {{ msg.data | sanitize_except() }}
{% else %} {% else %}
{% if "image/" in msg.mime %} {% if "image/" in msg.mime %}
<a href="{{ msg.data }}"><img src="{{ msg.data }}" /></a> <a href="{{ msg.data }}"><img src="{{ msg.thumb if msg.thumb is not none else msg.data }}" /></a>
{% elif "audio/" in msg.mime %} {% elif "audio/" in msg.mime %}
<audio controls="controls" autobuffer="autobuffer"> <audio controls="controls" autobuffer="autobuffer">
<source src="{{ msg.data }}" /> <source src="{{ msg.data }}" />
@@ -206,7 +206,7 @@
{{ msg.data | sanitize_except() }} {{ msg.data | sanitize_except() }}
{% else %} {% else %}
{% if "image/" in msg.mime %} {% if "image/" in msg.mime %}
<a href="{{ msg.data }}"><img src="{{ msg.data }}" /></a> <a href="{{ msg.data }}"><img src="{{ msg.thumb if msg.thumb is not none else msg.data }}" /></a>
{% elif "audio/" in msg.mime %} {% elif "audio/" in msg.mime %}
<audio controls preload="auto"> <audio controls preload="auto">
<source src="{{ msg.data }}" /> <source src="{{ msg.data }}" />