diff --git a/Whatsapp_Chat_Exporter/__main__.py b/Whatsapp_Chat_Exporter/__main__.py index cb9be4a..2f08776 100644 --- a/Whatsapp_Chat_Exporter/__main__.py +++ b/Whatsapp_Chat_Exporter/__main__.py @@ -5,6 +5,7 @@ from Whatsapp_Chat_Exporter import extract_new as extract from Whatsapp_Chat_Exporter import extract_iphone from Whatsapp_Chat_Exporter import extract_iphone_media +from Whatsapp_Chat_Exporter.data_model import ChatStore from Whatsapp_Chat_Exporter.extract_new import Crypt from argparse import ArgumentParser import os @@ -246,6 +247,8 @@ def main(): "Perhaps the directory is opened?") if args.json: + if isinstance(data[next(iter(data))], ChatStore): + data = {jik: chat.to_json() for jik, chat in data.items()} with open(args.json, "w") as f: data = json.dumps(data) print(f"\nWriting JSON file...({int(len(data)/1024/1024)}MB)") diff --git a/Whatsapp_Chat_Exporter/data_model.py b/Whatsapp_Chat_Exporter/data_model.py index 2e03c06..bd41394 100644 --- a/Whatsapp_Chat_Exporter/data_model.py +++ b/Whatsapp_Chat_Exporter/data_model.py @@ -18,6 +18,10 @@ def delete_message(self, id): if id in self.messages: del self.messages[id] + def to_json(self): + serialized_msgs = {id : msg.to_json() for id,msg in self.messages.items()} + return {'name' : self.name, 'messages' : serialized_msgs} + class Message(): def __init__(self, from_me: Union[bool,int], timestamp: int, time: str, key_id: int): self.from_me = bool(from_me) @@ -32,4 +36,18 @@ def __init__(self, from_me: Union[bool,int], timestamp: int, time: str, key_id: self.reply = None self.quoted_data = None self.caption = None - + + def to_json(self): + return { + 'from_me' : self.from_me, + 'timestamp' : self.timestamp, + 'time' : self.time, + 'media' : self.media, + 'key_id' : self.key_id, + 'meta' : self.meta, + 'data' : self.data, + 'sender' : self.sender, + 'reply' : self.reply, + 'quoted_data' : self.quoted_data, + 'caption' : self.caption + }