mirror of
https://github.com/KnugiHK/WhatsApp-Chat-Exporter.git
synced 2026-04-27 00:11:33 +00:00
Refactoring empty filtering
This commit is contained in:
@@ -17,7 +17,7 @@ from Whatsapp_Chat_Exporter import exported_handler, android_handler
|
|||||||
from Whatsapp_Chat_Exporter import ios_handler, ios_media_handler
|
from Whatsapp_Chat_Exporter import ios_handler, ios_media_handler
|
||||||
from Whatsapp_Chat_Exporter.contacts_from_vcards import ContactsFromVCards
|
from Whatsapp_Chat_Exporter.contacts_from_vcards import ContactsFromVCards
|
||||||
from Whatsapp_Chat_Exporter.data_model import ChatStore
|
from Whatsapp_Chat_Exporter.data_model import ChatStore
|
||||||
from Whatsapp_Chat_Exporter.utility import APPLE_TIME, Crypt, DbType, is_chat_empty
|
from Whatsapp_Chat_Exporter.utility import APPLE_TIME, Crypt, DbType, chat_is_empty
|
||||||
from Whatsapp_Chat_Exporter.utility import check_update, import_from_json
|
from Whatsapp_Chat_Exporter.utility import check_update, import_from_json
|
||||||
from argparse import ArgumentParser, SUPPRESS
|
from argparse import ArgumentParser, SUPPRESS
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -261,11 +261,11 @@ def main():
|
|||||||
help="Exclude chats that match the supplied phone number"
|
help="Exclude chats that match the supplied phone number"
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--filter-empty",
|
"--dont-filter-empty",
|
||||||
dest="filter_empty",
|
dest="filter_empty",
|
||||||
default=False,
|
default=False,
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help="Exclude empty chats or with zero messages with content"
|
help="By default, the exporter will not render chats with no valid message. Setting this flag will cause the exporter to render those."
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--per-chat",
|
"--per-chat",
|
||||||
@@ -485,9 +485,6 @@ def main():
|
|||||||
if not args.no_html:
|
if not args.no_html:
|
||||||
if contact_store.should_enrich_from_vcards():
|
if contact_store.should_enrich_from_vcards():
|
||||||
contact_store.enrich_from_vcards(data)
|
contact_store.enrich_from_vcards(data)
|
||||||
|
|
||||||
if (args.filter_empty):
|
|
||||||
data = {k: v for k, v in data.items() if not is_chat_empty(v)}
|
|
||||||
|
|
||||||
create_html(
|
create_html(
|
||||||
data,
|
data,
|
||||||
@@ -496,7 +493,8 @@ def main():
|
|||||||
args.embedded,
|
args.embedded,
|
||||||
args.offline,
|
args.offline,
|
||||||
args.size,
|
args.size,
|
||||||
args.no_avatar
|
args.no_avatar,
|
||||||
|
not args.filter_empty
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
print(
|
print(
|
||||||
@@ -531,7 +529,9 @@ def main():
|
|||||||
args.template,
|
args.template,
|
||||||
args.embedded,
|
args.embedded,
|
||||||
args.offline,
|
args.offline,
|
||||||
args.size
|
args.size,
|
||||||
|
args.no_avatar,
|
||||||
|
not args.filter_empty
|
||||||
)
|
)
|
||||||
for file in glob.glob(r'*.*'):
|
for file in glob.glob(r'*.*'):
|
||||||
shutil.copy(file, args.output)
|
shutil.copy(file, args.output)
|
||||||
@@ -543,12 +543,14 @@ def main():
|
|||||||
args.template,
|
args.template,
|
||||||
args.embedded,
|
args.embedded,
|
||||||
args.offline,
|
args.offline,
|
||||||
args.size
|
args.size,
|
||||||
|
args.no_avatar,
|
||||||
|
not args.filter_empty
|
||||||
)
|
)
|
||||||
|
|
||||||
if args.json and not args.import_json:
|
if args.json and not args.import_json:
|
||||||
if (args.filter_empty):
|
if not args.filter_empty:
|
||||||
data = {k: v for k, v in data.items() if not is_chat_empty(v)}
|
data = {k: v for k, v in data.items() if not chat_is_empty(v)}
|
||||||
|
|
||||||
if contact_store.should_enrich_from_vcards():
|
if contact_store.should_enrich_from_vcards():
|
||||||
contact_store.enrich_from_vcards(data)
|
contact_store.enrich_from_vcards(data)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from markupsafe import escape as htmle
|
|||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
from base64 import b64decode, b64encode
|
from base64 import b64decode, b64encode
|
||||||
from Whatsapp_Chat_Exporter.data_model import ChatStore, Message
|
from Whatsapp_Chat_Exporter.data_model import ChatStore, Message
|
||||||
from Whatsapp_Chat_Exporter.utility import MAX_SIZE, ROW_SIZE, DbType, determine_metadata, JidType
|
from Whatsapp_Chat_Exporter.utility import MAX_SIZE, ROW_SIZE, DbType, determine_metadata, JidType, chat_is_empty
|
||||||
from Whatsapp_Chat_Exporter.utility import rendering, Crypt, Device, get_file_name, setup_template
|
from Whatsapp_Chat_Exporter.utility import rendering, Crypt, Device, get_file_name, setup_template
|
||||||
from Whatsapp_Chat_Exporter.utility import brute_force_offset, CRYPT14_OFFSETS, get_status_location
|
from Whatsapp_Chat_Exporter.utility import brute_force_offset, CRYPT14_OFFSETS, get_status_location
|
||||||
from Whatsapp_Chat_Exporter.utility import get_chat_condition, slugify
|
from Whatsapp_Chat_Exporter.utility import get_chat_condition, slugify
|
||||||
@@ -749,7 +749,8 @@ def create_html(
|
|||||||
embedded=False,
|
embedded=False,
|
||||||
offline_static=False,
|
offline_static=False,
|
||||||
maximum_size=None,
|
maximum_size=None,
|
||||||
no_avatar=False
|
no_avatar=False,
|
||||||
|
filter_empty=True
|
||||||
):
|
):
|
||||||
template = setup_template(template, no_avatar)
|
template = setup_template(template, no_avatar)
|
||||||
|
|
||||||
@@ -763,7 +764,7 @@ def create_html(
|
|||||||
|
|
||||||
for current, contact in enumerate(data):
|
for current, contact in enumerate(data):
|
||||||
chat = data[contact]
|
chat = data[contact]
|
||||||
if len(chat.messages) == 0:
|
if filter_empty and chat_is_empty(chat):
|
||||||
continue
|
continue
|
||||||
safe_file_name, name = get_file_name(contact, chat)
|
safe_file_name, name = get_file_name(contact, chat)
|
||||||
|
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ def get_chat_condition(filter, include, column):
|
|||||||
def _is_message_empty(message):
|
def _is_message_empty(message):
|
||||||
return (message.data is None or message.data == "") and not message.media
|
return (message.data is None or message.data == "") and not message.media
|
||||||
|
|
||||||
def is_chat_empty(chat: ChatStore):
|
def chat_is_empty(chat: ChatStore):
|
||||||
return len(chat.messages) == 0 or all(_is_message_empty(message) for message in chat.messages.values())
|
return len(chat.messages) == 0 or all(_is_message_empty(message) for message in chat.messages.values())
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user