Merge branch 'pr/99' into dev

This commit is contained in:
KnugiHK
2024-06-08 17:38:51 +08:00

View File

@@ -5,6 +5,7 @@ import shutil
from glob import glob from glob import glob
from pathlib import Path from pathlib import Path
from mimetypes import MimeTypes from mimetypes import MimeTypes
from markupsafe import escape as htmle
from Whatsapp_Chat_Exporter.data_model import ChatStore, Message from Whatsapp_Chat_Exporter.data_model import ChatStore, Message
from Whatsapp_Chat_Exporter.utility import APPLE_TIME, Device, get_chat_condition, slugify from Whatsapp_Chat_Exporter.utility import APPLE_TIME, Device, get_chat_condition, slugify
@@ -313,20 +314,33 @@ def vcard(db, data, media_folder, filter_date, filter_chat):
total_row_number = len(contents) total_row_number = len(contents)
print(f"\nProcessing vCards...(0/{total_row_number})", end="\r") print(f"\nProcessing vCards...(0/{total_row_number})", end="\r")
path = f'{media_folder}/Message/vCards' path = f'{media_folder}/Message/vCards'
if not os.path.isdir(path): Path(path).mkdir(parents=True, exist_ok=True)
Path(path).mkdir(parents=True, exist_ok=True)
for index, content in enumerate(contents): for index, content in enumerate(contents):
file_name = "".join(x for x in content["ZVCARDNAME"] if x.isalnum()) file_paths = []
file_name = file_name.encode('utf-8')[:230].decode('utf-8', 'ignore') vcard_names = content["ZVCARDNAME"].split("_$!<Name-Separator>!$_")
file_path = os.path.join(path, f"{file_name}.vcf") vcard_strings = content["ZVCARDSTRING"].split("_$!<VCard-Separator>!$_")
if not os.path.isfile(file_path):
with open(file_path, "w", encoding="utf-8") as f: # If this is a list of contacts
f.write(content["ZVCARDSTRING"]) if len(vcard_names) > len(vcard_strings):
vcard_names.pop(0) # Dismiss the first element, which is the group name
for name, vcard_string in zip(vcard_names, vcard_strings):
file_name = "".join(x for x in name if x.isalnum())
file_name = file_name.encode('utf-8')[:230].decode('utf-8', 'ignore')
file_path = os.path.join(path, f"{file_name}.vcf")
file_paths.append(file_path)
if not os.path.isfile(file_path):
with open(file_path, "w", encoding="utf-8") as f:
f.write(vcard_string)
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)])
message = data[content["ZCONTACTJID"]].messages[content["ZMESSAGE"]] message = data[content["ZCONTACTJID"]].messages[content["ZMESSAGE"]]
message.data = content["ZVCARDNAME"] + \ message.data = vcard_summary
"The vCard file cannot be displayed here, " \
f"however it should be located at {file_path}"
message.mime = "text/x-vcard" message.mime = "text/x-vcard"
message.media = True message.media = True
message.meta = True message.meta = True
message.safe = True
print(f"Processing vCards...({index + 1}/{total_row_number})", end="\r") print(f"Processing vCards...({index + 1}/{total_row_number})", end="\r")