mirror of
https://github.com/KnugiHK/WhatsApp-Chat-Exporter.git
synced 2026-05-29 20:38:51 +00:00
Make ChatStore.messages private
This commit is contained in:
@@ -451,7 +451,7 @@ def media(db, data, media_folder, filter_date, filter_chat, filter_empty, separa
|
|||||||
Path(f"{media_folder}/thumbnails").mkdir(parents=True, exist_ok=True)
|
Path(f"{media_folder}/thumbnails").mkdir(parents=True, exist_ok=True)
|
||||||
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"]].get_message(content["message_row_id"])
|
||||||
message.media = True
|
message.media = True
|
||||||
if os.path.isfile(file_path):
|
if os.path.isfile(file_path):
|
||||||
message.data = file_path
|
message.data = file_path
|
||||||
@@ -547,7 +547,7 @@ def vcard(db, data, media_folder, filter_date, filter_chat, filter_empty):
|
|||||||
if not os.path.isfile(file_path):
|
if not os.path.isfile(file_path):
|
||||||
with open(file_path, "w", encoding="utf-8") as f:
|
with open(file_path, "w", encoding="utf-8") as f:
|
||||||
f.write(row["vcard"])
|
f.write(row["vcard"])
|
||||||
message = data[row["key_remote_jid"]].messages[row["message_row_id"]]
|
message = data[row["key_remote_jid"]].get_message(row["message_row_id"])
|
||||||
message.data = "This media include the following vCard file(s):<br>" \
|
message.data = "This media include the following vCard file(s):<br>" \
|
||||||
f'<a href="{htmle(file_path)}">{htmle(media_name)}</a>'
|
f'<a href="{htmle(file_path)}">{htmle(media_name)}</a>'
|
||||||
message.mime = "text/x-vcard"
|
message.mime = "text/x-vcard"
|
||||||
@@ -736,7 +736,7 @@ def create_txt(data, output):
|
|||||||
contact = jik.replace('+', '')
|
contact = jik.replace('+', '')
|
||||||
output_file = os.path.join(output, f"{contact}.txt")
|
output_file = os.path.join(output, f"{contact}.txt")
|
||||||
with open(output_file, "w", encoding="utf8") as f:
|
with open(output_file, "w", encoding="utf8") as f:
|
||||||
for message in chat.messages.values():
|
for message in chat.get_messages():
|
||||||
date = datetime.fromtimestamp(message.timestamp).date()
|
date = datetime.fromtimestamp(message.timestamp).date()
|
||||||
if message.meta and message.mime != "media":
|
if message.meta and message.mime != "media":
|
||||||
continue # Skip any metadata in text format
|
continue # Skip any metadata in text format
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ class ChatStore:
|
|||||||
if name is not None and not isinstance(name, str):
|
if name is not None and not isinstance(name, str):
|
||||||
raise TypeError("Name must be a string or None")
|
raise TypeError("Name must be a string or None")
|
||||||
self.name = name
|
self.name = name
|
||||||
self.messages: Dict[str, 'Message'] = {}
|
self._messages: Dict[str, 'Message'] = {}
|
||||||
self.type = type
|
self.type = type
|
||||||
if media is not None:
|
if media is not None:
|
||||||
from Whatsapp_Chat_Exporter.utility import Device
|
from Whatsapp_Chat_Exporter.utility import Device
|
||||||
@@ -95,12 +95,16 @@ class ChatStore:
|
|||||||
"""Add a message to the chat store."""
|
"""Add a message to the chat store."""
|
||||||
if not isinstance(message, Message):
|
if not isinstance(message, Message):
|
||||||
raise TypeError("message must be a Message object")
|
raise TypeError("message must be a Message object")
|
||||||
self.messages[id] = message
|
self._messages[id] = message
|
||||||
|
|
||||||
|
def get_message(self, id: str) -> 'Message':
|
||||||
|
"""Get a message from the chat store."""
|
||||||
|
return self._messages.get(id)
|
||||||
|
|
||||||
def delete_message(self, id: str) -> None:
|
def delete_message(self, id: str) -> None:
|
||||||
"""Delete a message from the chat store."""
|
"""Delete a message from the chat store."""
|
||||||
if id in self.messages:
|
if id in self._messages:
|
||||||
del self.messages[id]
|
del self._messages[id]
|
||||||
|
|
||||||
def to_json(self) -> Dict[str, Any]:
|
def to_json(self) -> Dict[str, Any]:
|
||||||
"""Convert chat store to JSON-serializable dict."""
|
"""Convert chat store to JSON-serializable dict."""
|
||||||
@@ -111,16 +115,16 @@ class ChatStore:
|
|||||||
'their_avatar': self.their_avatar,
|
'their_avatar': self.their_avatar,
|
||||||
'their_avatar_thumb': self.their_avatar_thumb,
|
'their_avatar_thumb': self.their_avatar_thumb,
|
||||||
'status': self.status,
|
'status': self.status,
|
||||||
'messages': {id: msg.to_json() for id, msg in self.messages.items()}
|
'messages': {id: msg.to_json() for id, msg in self._messages.items()}
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_last_message(self) -> 'Message':
|
def get_last_message(self) -> 'Message':
|
||||||
"""Get the most recent message in the chat."""
|
"""Get the most recent message in the chat."""
|
||||||
return tuple(self.messages.values())[-1]
|
return tuple(self._messages.values())[-1]
|
||||||
|
|
||||||
def get_messages(self) -> Dict[str, 'Message']:
|
def get_messages(self) -> Dict[str, 'Message']:
|
||||||
"""Get all messages in the chat."""
|
"""Get all messages in the chat."""
|
||||||
return self.messages.values()
|
return self._messages.values()
|
||||||
|
|
||||||
|
|
||||||
class Message:
|
class Message:
|
||||||
|
|||||||
@@ -283,7 +283,7 @@ def media(db, data, media_folder, filter_date, filter_chat, filter_empty, separa
|
|||||||
file_path = f"{media_folder}/Message/{content['ZMEDIALOCALPATH']}"
|
file_path = f"{media_folder}/Message/{content['ZMEDIALOCALPATH']}"
|
||||||
ZMESSAGE = content["ZMESSAGE"]
|
ZMESSAGE = content["ZMESSAGE"]
|
||||||
contact = data[content["ZCONTACTJID"]]
|
contact = data[content["ZCONTACTJID"]]
|
||||||
message = contact.messages[ZMESSAGE]
|
message = contact.get_message(ZMESSAGE)
|
||||||
message.media = True
|
message.media = True
|
||||||
if contact.media_base == "":
|
if contact.media_base == "":
|
||||||
contact.media_base = media_folder + "/"
|
contact.media_base = media_folder + "/"
|
||||||
@@ -367,7 +367,7 @@ def vcard(db, data, media_folder, filter_date, filter_chat, filter_empty):
|
|||||||
|
|
||||||
vcard_summary = "This media include the following vCard file(s):<br>"
|
vcard_summary = "This media include the following vCard file(s):<br>"
|
||||||
vcard_summary += " | ".join([f'<a href="{htmle(fp)}">{htmle(name)}</a>' for name, fp in zip(vcard_names, file_paths)])
|
vcard_summary += " | ".join([f'<a href="{htmle(fp)}">{htmle(name)}</a>' for name, fp in zip(vcard_names, file_paths)])
|
||||||
message = data[content["ZCONTACTJID"]].messages[content["ZMESSAGE"]]
|
message = data[content["ZCONTACTJID"]].get_message(content["ZMESSAGE"])
|
||||||
message.data = vcard_summary
|
message.data = vcard_summary
|
||||||
message.mime = "text/x-vcard"
|
message.mime = "text/x-vcard"
|
||||||
message.media = True
|
message.media = True
|
||||||
|
|||||||
Reference in New Issue
Block a user