From 011c8ff1e7b87922aae7a16a5494d2484d60e70d Mon Sep 17 00:00:00 2001 From: KnugiHK <24708955+KnugiHK@users.noreply.github.com> Date: Thu, 15 Jun 2023 17:44:38 +0800 Subject: [PATCH] Support missed call (PM) metadata for Android --- Whatsapp_Chat_Exporter/extract.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/Whatsapp_Chat_Exporter/extract.py b/Whatsapp_Chat_Exporter/extract.py index 22a6eed..17a9fc6 100644 --- a/Whatsapp_Chat_Exporter/extract.py +++ b/Whatsapp_Chat_Exporter/extract.py @@ -189,10 +189,13 @@ def messages(db, data, media_folder): messages_quotes.key_id as quoted, messages.key_id, messages_quotes.data as quoted_data, - messages.media_caption + messages.media_caption, + missed_call_logs.video_call FROM messages LEFT JOIN messages_quotes ON messages.quoted_row_id = messages_quotes._id + LEFT JOIN missed_call_logs + ON messages._id = missed_call_logs.message_row_id WHERE messages.key_remote_jid <> '-1';""" ) except sqlite3.OperationalError: @@ -213,7 +216,8 @@ def messages(db, data, media_folder): message_quoted.text_data as quoted_data, message.message_type as media_wa_type, jid_group.raw_string as group_sender_jid, - chat.subject as chat_subject + chat.subject as chat_subject, + missed_call_logs.video_call FROM message LEFT JOIN message_quoted ON message_quoted.message_row_id = message._id @@ -231,6 +235,8 @@ def messages(db, data, media_folder): ON jid_global._id = chat.jid_row_id LEFT JOIN jid jid_group ON jid_group._id = message.sender_jid_row_id + LEFT JOIN missed_call_logs + ON message._id = missed_call_logs.message_row_id WHERE key_remote_jid <> '-1';""" ) except Exception as e: @@ -346,11 +352,17 @@ def messages(db, data, media_folder): invalid = True else: # Private chat - if content["data"] is None and content["thumb_image"] is None: - invalid = True - + if content["video_call"] is not None: # Missed call + message.meta = True + if content["video_call"] == 1: + message.data = "A video call was missed" + elif content["video_call"] == 0: + message.data = "A voice call was missed" + elif content["data"] is None and content["thumb_image"] is None: + invalid = True # Unhandle metadata else: - if content["media_wa_type"] == 20: # Sticker + # Real message + if content["media_wa_type"] == 20: # Sticker is a message message.sticker = True if content["key_from_me"] == 1: if content["status"] == 5 and content["edit_version"] == 7 or table_message and content["media_wa_type"] == 15: