mirror of
https://github.com/KnugiHK/WhatsApp-Chat-Exporter.git
synced 2026-05-25 02:18:50 +00:00
Refactor Message class to accept pre-initialized Timing object
Pass the `Timing` object directly through `timezone_offset` to avoid repeated initialization of the same object within the `Message` class.
This commit is contained in:
@@ -11,11 +11,11 @@ import logging
|
|||||||
import importlib.metadata
|
import importlib.metadata
|
||||||
from Whatsapp_Chat_Exporter import android_crypt, exported_handler, android_handler
|
from Whatsapp_Chat_Exporter import android_crypt, 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.data_model import ChatCollection, ChatStore
|
from Whatsapp_Chat_Exporter.data_model import ChatCollection, ChatStore, Timing
|
||||||
from Whatsapp_Chat_Exporter.utility import APPLE_TIME, CLEAR_LINE, Crypt, check_update, convert_time_unit
|
from Whatsapp_Chat_Exporter.utility import APPLE_TIME, CLEAR_LINE, CURRENT_TZ_OFFSET, Crypt
|
||||||
from Whatsapp_Chat_Exporter.utility import readable_to_bytes, safe_name, bytes_to_readable
|
from Whatsapp_Chat_Exporter.utility import readable_to_bytes, safe_name, bytes_to_readable
|
||||||
from Whatsapp_Chat_Exporter.utility import import_from_json, incremental_merge, DbType
|
from Whatsapp_Chat_Exporter.utility import import_from_json, incremental_merge, check_update
|
||||||
from Whatsapp_Chat_Exporter.utility import telegram_json_format
|
from Whatsapp_Chat_Exporter.utility import telegram_json_format, convert_time_unit, DbType
|
||||||
from argparse import ArgumentParser, SUPPRESS
|
from argparse import ArgumentParser, SUPPRESS
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from getpass import getpass
|
from getpass import getpass
|
||||||
@@ -538,6 +538,7 @@ def process_messages(args, data: ChatCollection) -> None:
|
|||||||
exit(6)
|
exit(6)
|
||||||
|
|
||||||
filter_chat = (args.filter_chat_include, args.filter_chat_exclude)
|
filter_chat = (args.filter_chat_include, args.filter_chat_exclude)
|
||||||
|
timing = Timing(args.timezone_offset if args.timezone_offset else CURRENT_TZ_OFFSET)
|
||||||
|
|
||||||
with sqlite3.connect(msg_db) as db:
|
with sqlite3.connect(msg_db) as db:
|
||||||
db.row_factory = sqlite3.Row
|
db.row_factory = sqlite3.Row
|
||||||
@@ -549,7 +550,7 @@ def process_messages(args, data: ChatCollection) -> None:
|
|||||||
message_handler = ios_handler
|
message_handler = ios_handler
|
||||||
|
|
||||||
message_handler.messages(
|
message_handler.messages(
|
||||||
db, data, args.media, args.timezone_offset, args.filter_date,
|
db, data, args.media, timing, args.filter_date,
|
||||||
filter_chat, args.filter_empty, args.no_reply_ios
|
filter_chat, args.filter_empty, args.no_reply_ios
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -566,17 +567,17 @@ def process_messages(args, data: ChatCollection) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Process calls
|
# Process calls
|
||||||
process_calls(args, db, data, filter_chat)
|
process_calls(args, db, data, filter_chat, timing)
|
||||||
|
|
||||||
|
|
||||||
def process_calls(args, db, data: ChatCollection, filter_chat) -> None:
|
def process_calls(args, db, data: ChatCollection, filter_chat, timing) -> None:
|
||||||
"""Process call history if available."""
|
"""Process call history if available."""
|
||||||
if args.android:
|
if args.android:
|
||||||
android_handler.calls(db, data, args.timezone_offset, filter_chat)
|
android_handler.calls(db, data, timing, filter_chat)
|
||||||
elif args.ios and args.call_db_ios is not None:
|
elif args.ios and args.call_db_ios is not None:
|
||||||
with sqlite3.connect(args.call_db_ios) as cdb:
|
with sqlite3.connect(args.call_db_ios) as cdb:
|
||||||
cdb.row_factory = sqlite3.Row
|
cdb.row_factory = sqlite3.Row
|
||||||
ios_handler.calls(cdb, data, args.timezone_offset, filter_chat)
|
ios_handler.calls(cdb, data, timing, filter_chat)
|
||||||
|
|
||||||
|
|
||||||
def handle_media_directory(args) -> None:
|
def handle_media_directory(args) -> None:
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ from mimetypes import MimeTypes
|
|||||||
from markupsafe import escape as htmle
|
from markupsafe import escape as htmle
|
||||||
from base64 import b64decode, b64encode
|
from base64 import b64decode, b64encode
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from Whatsapp_Chat_Exporter.data_model import ChatStore, Message
|
from Whatsapp_Chat_Exporter.data_model import ChatStore, Message, Timing
|
||||||
from Whatsapp_Chat_Exporter.utility import CLEAR_LINE, CURRENT_TZ_OFFSET, MAX_SIZE, ROW_SIZE, JidType, Device
|
from Whatsapp_Chat_Exporter.utility import CLEAR_LINE, MAX_SIZE, ROW_SIZE, JidType, Device
|
||||||
from Whatsapp_Chat_Exporter.utility import rendering, get_file_name, setup_template, get_cond_for_empty
|
from Whatsapp_Chat_Exporter.utility import rendering, get_file_name, setup_template, get_cond_for_empty
|
||||||
from Whatsapp_Chat_Exporter.utility import get_status_location, convert_time_unit, determine_metadata
|
from Whatsapp_Chat_Exporter.utility import get_status_location, convert_time_unit, determine_metadata
|
||||||
from Whatsapp_Chat_Exporter.utility import get_chat_condition, safe_name, bytes_to_readable
|
from Whatsapp_Chat_Exporter.utility import get_chat_condition, safe_name, bytes_to_readable
|
||||||
@@ -317,7 +317,7 @@ def _process_single_message(data, content, table_message, timezone_offset):
|
|||||||
timestamp=content["timestamp"],
|
timestamp=content["timestamp"],
|
||||||
time=content["timestamp"],
|
time=content["timestamp"],
|
||||||
key_id=content["key_id"],
|
key_id=content["key_id"],
|
||||||
timezone_offset=timezone_offset if timezone_offset else CURRENT_TZ_OFFSET,
|
timezone_offset=timezone_offset,
|
||||||
message_type=content["media_wa_type"],
|
message_type=content["media_wa_type"],
|
||||||
received_timestamp=content["received_timestamp"],
|
received_timestamp=content["received_timestamp"],
|
||||||
read_timestamp=content["read_timestamp"]
|
read_timestamp=content["read_timestamp"]
|
||||||
@@ -867,7 +867,7 @@ def _process_call_record(content, chat, data, timezone_offset):
|
|||||||
timestamp=content["timestamp"],
|
timestamp=content["timestamp"],
|
||||||
time=content["timestamp"],
|
time=content["timestamp"],
|
||||||
key_id=content["call_id"],
|
key_id=content["call_id"],
|
||||||
timezone_offset=timezone_offset if timezone_offset else CURRENT_TZ_OFFSET,
|
timezone_offset=timezone_offset,
|
||||||
received_timestamp=None, # TODO: Add timestamp
|
received_timestamp=None, # TODO: Add timestamp
|
||||||
read_timestamp=None # TODO: Add timestamp
|
read_timestamp=None # TODO: Add timestamp
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -279,7 +279,7 @@ class Message:
|
|||||||
key_id: Union[int, str],
|
key_id: Union[int, str],
|
||||||
received_timestamp: int = None,
|
received_timestamp: int = None,
|
||||||
read_timestamp: int = None,
|
read_timestamp: int = None,
|
||||||
timezone_offset: int = 0,
|
timezone_offset: Optional[Timing] = Timing(0),
|
||||||
message_type: Optional[int] = None
|
message_type: Optional[int] = None
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
@@ -300,10 +300,9 @@ class Message:
|
|||||||
"""
|
"""
|
||||||
self.from_me = bool(from_me)
|
self.from_me = bool(from_me)
|
||||||
self.timestamp = timestamp / 1000 if timestamp > 9999999999 else timestamp
|
self.timestamp = timestamp / 1000 if timestamp > 9999999999 else timestamp
|
||||||
timing = Timing(timezone_offset)
|
|
||||||
|
|
||||||
if isinstance(time, (int, float)):
|
if isinstance(time, (int, float)):
|
||||||
self.time = timing.format_timestamp(self.timestamp, "%H:%M")
|
self.time = timezone_offset.format_timestamp(self.timestamp, "%H:%M")
|
||||||
elif isinstance(time, str):
|
elif isinstance(time, str):
|
||||||
self.time = time
|
self.time = time
|
||||||
else:
|
else:
|
||||||
@@ -318,14 +317,14 @@ class Message:
|
|||||||
self.mime = None
|
self.mime = None
|
||||||
self.message_type = message_type
|
self.message_type = message_type
|
||||||
if isinstance(received_timestamp, (int, float)):
|
if isinstance(received_timestamp, (int, float)):
|
||||||
self.received_timestamp = timing.format_timestamp(
|
self.received_timestamp = timezone_offset.format_timestamp(
|
||||||
received_timestamp, "%Y/%m/%d %H:%M")
|
received_timestamp, "%Y/%m/%d %H:%M")
|
||||||
elif isinstance(received_timestamp, str):
|
elif isinstance(received_timestamp, str):
|
||||||
self.received_timestamp = received_timestamp
|
self.received_timestamp = received_timestamp
|
||||||
else:
|
else:
|
||||||
self.received_timestamp = None
|
self.received_timestamp = None
|
||||||
if isinstance(read_timestamp, (int, float)):
|
if isinstance(read_timestamp, (int, float)):
|
||||||
self.read_timestamp = timing.format_timestamp(
|
self.read_timestamp = timezone_offset.format_timestamp(
|
||||||
read_timestamp, "%Y/%m/%d %H:%M")
|
read_timestamp, "%Y/%m/%d %H:%M")
|
||||||
elif isinstance(read_timestamp, str):
|
elif isinstance(read_timestamp, str):
|
||||||
self.read_timestamp = read_timestamp
|
self.read_timestamp = read_timestamp
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ from pathlib import Path
|
|||||||
from mimetypes import MimeTypes
|
from mimetypes import MimeTypes
|
||||||
from markupsafe import escape as htmle
|
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, CLEAR_LINE, CURRENT_TZ_OFFSET, get_chat_condition
|
from Whatsapp_Chat_Exporter.utility import APPLE_TIME, CLEAR_LINE, get_chat_condition, Device
|
||||||
from Whatsapp_Chat_Exporter.utility import bytes_to_readable, convert_time_unit, safe_name, Device
|
from Whatsapp_Chat_Exporter.utility import bytes_to_readable, convert_time_unit, safe_name
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -211,7 +211,7 @@ def messages(db, data, media_folder, timezone_offset, filter_date, filter_chat,
|
|||||||
timestamp=ts,
|
timestamp=ts,
|
||||||
time=ts,
|
time=ts,
|
||||||
key_id=content["ZSTANZAID"][:17],
|
key_id=content["ZSTANZAID"][:17],
|
||||||
timezone_offset=timezone_offset if timezone_offset else CURRENT_TZ_OFFSET,
|
timezone_offset=timezone_offset,
|
||||||
message_type=content["ZMESSAGETYPE"],
|
message_type=content["ZMESSAGETYPE"],
|
||||||
received_timestamp=APPLE_TIME + content["ZSENTDATE"] if content["ZSENTDATE"] else None,
|
received_timestamp=APPLE_TIME + content["ZSENTDATE"] if content["ZSENTDATE"] else None,
|
||||||
read_timestamp=None # TODO: Add timestamp
|
read_timestamp=None # TODO: Add timestamp
|
||||||
@@ -567,7 +567,7 @@ def process_call_record(content, chat, data, timezone_offset):
|
|||||||
timestamp=ts,
|
timestamp=ts,
|
||||||
time=ts,
|
time=ts,
|
||||||
key_id=content["ZCALLIDSTRING"],
|
key_id=content["ZCALLIDSTRING"],
|
||||||
timezone_offset=timezone_offset if timezone_offset else CURRENT_TZ_OFFSET
|
timezone_offset=timezone_offset
|
||||||
)
|
)
|
||||||
|
|
||||||
# Set sender info
|
# Set sender info
|
||||||
|
|||||||
Reference in New Issue
Block a user