From be9e790b12d747caa16ff2fc71dfb86d0bc08a62 Mon Sep 17 00:00:00 2001 From: KnugiHK <24708955+KnugiHK@users.noreply.github.com> Date: Fri, 16 Jun 2023 01:25:51 +0800 Subject: [PATCH] Better handling of binary message #44 --- Whatsapp_Chat_Exporter/data_model.py | 1 + Whatsapp_Chat_Exporter/extract.py | 17 ++++++++++++----- Whatsapp_Chat_Exporter/whatsapp.html | 8 ++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Whatsapp_Chat_Exporter/data_model.py b/Whatsapp_Chat_Exporter/data_model.py index 36051e5..ac1f6f4 100644 --- a/Whatsapp_Chat_Exporter/data_model.py +++ b/Whatsapp_Chat_Exporter/data_model.py @@ -57,6 +57,7 @@ def __init__(self, from_me: Union[bool,int], timestamp: int, time: Union[int,flo self.meta = False self.data = None self.sender = None + self.safe = False # Extra self.reply = None self.quoted_data = None diff --git a/Whatsapp_Chat_Exporter/extract.py b/Whatsapp_Chat_Exporter/extract.py index 9415300..2e9dfea 100644 --- a/Whatsapp_Chat_Exporter/extract.py +++ b/Whatsapp_Chat_Exporter/extract.py @@ -11,7 +11,7 @@ from pathlib import Path from mimetypes import MimeTypes from hashlib import sha256 -from base64 import b64decode +from base64 import b64decode, b64encode 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 brute_force_offset, CRYPT14_OFFSETS @@ -252,8 +252,6 @@ def messages(db, data, media_folder): except sqlite3.OperationalError: continue else: - if content is not None and isinstance(content["data"], bytes): - continue break while content is not None: if content["key_remote_jid"] not in data: @@ -266,6 +264,17 @@ def messages(db, data, media_folder): time=content["timestamp"], key_id=content["key_id"], ) + if isinstance(content["data"], bytes): + message.data = ("The message is binary data and its base64 is " + '""") + message.data += b64encode(content["data"]).decode("utf-8") + "" + message.safe = message.meta = True + data[content["key_remote_jid"]].add_message(content["_id"], message) + i += 1 + content = c.fetchone() + continue invalid = False if "-" in content["key_remote_jid"] and content["key_from_me"] == 0: name = None @@ -407,8 +416,6 @@ def messages(db, data, media_folder): except sqlite3.OperationalError: continue else: - if content is not None and isinstance(content["data"], bytes): - continue break print(f"Processing messages...({total_row_number}/{total_row_number})", end="\r") diff --git a/Whatsapp_Chat_Exporter/whatsapp.html b/Whatsapp_Chat_Exporter/whatsapp.html index 03bbfb9..c5425c9 100644 --- a/Whatsapp_Chat_Exporter/whatsapp.html +++ b/Whatsapp_Chat_Exporter/whatsapp.html @@ -125,7 +125,11 @@ {% endif %} {% if msg.meta == true or msg.media == false and msg.data is none %}
+ {% if msg.safe %} +

{{ msg.data | safe or 'Not supported WhatsApp internal message' }}

+ {% else %}

{{ msg.data or 'Not supported WhatsApp internal message' }}

+ {% endif %}
{% else %} {% if msg.media == false %} @@ -205,7 +209,11 @@ {% endif %} {% if msg.meta == true or msg.media == false and msg.data is none %}
+ {% if msg.safe %} +

{{ msg.data | safe or 'Not supported WhatsApp internal message' }}

+ {% else %}

{{ msg.data or 'Not supported WhatsApp internal message' }}

+ {% endif %}
{% else %} {% if msg.media == false %}