mirror of
https://github.com/KnugiHK/WhatsApp-Chat-Exporter.git
synced 2026-05-27 11:26:22 +00:00
Replace image rendered in the HTML to thumbnail if possible
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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 }}" />
|
||||||
|
|||||||
Reference in New Issue
Block a user