diff --git a/Whatsapp_Chat_Exporter/__main__.py b/Whatsapp_Chat_Exporter/__main__.py index 28c0f43..51cffe9 100644 --- a/Whatsapp_Chat_Exporter/__main__.py +++ b/Whatsapp_Chat_Exporter/__main__.py @@ -11,11 +11,11 @@ import logging import importlib.metadata 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.data_model import ChatCollection, ChatStore -from Whatsapp_Chat_Exporter.utility import APPLE_TIME, CLEAR_LINE, Crypt, check_update, convert_time_unit +from Whatsapp_Chat_Exporter.data_model import ChatCollection, ChatStore, Timing +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 import_from_json, incremental_merge, DbType -from Whatsapp_Chat_Exporter.utility import telegram_json_format +from Whatsapp_Chat_Exporter.utility import import_from_json, incremental_merge, check_update +from Whatsapp_Chat_Exporter.utility import telegram_json_format, convert_time_unit, DbType from argparse import ArgumentParser, SUPPRESS from datetime import datetime from getpass import getpass @@ -538,6 +538,7 @@ def process_messages(args, data: ChatCollection) -> None: exit(6) 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: db.row_factory = sqlite3.Row @@ -549,7 +550,7 @@ def process_messages(args, data: ChatCollection) -> None: message_handler = ios_handler 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 ) @@ -566,17 +567,17 @@ def process_messages(args, data: ChatCollection) -> None: ) # 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.""" 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: with sqlite3.connect(args.call_db_ios) as cdb: 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: diff --git a/Whatsapp_Chat_Exporter/android_handler.py b/Whatsapp_Chat_Exporter/android_handler.py index 6b7e919..bbf2cfb 100644 --- a/Whatsapp_Chat_Exporter/android_handler.py +++ b/Whatsapp_Chat_Exporter/android_handler.py @@ -10,8 +10,8 @@ from mimetypes import MimeTypes from markupsafe import escape as htmle from base64 import b64decode, b64encode from datetime import datetime -from Whatsapp_Chat_Exporter.data_model import ChatStore, Message -from Whatsapp_Chat_Exporter.utility import CLEAR_LINE, CURRENT_TZ_OFFSET, MAX_SIZE, ROW_SIZE, JidType, Device +from Whatsapp_Chat_Exporter.data_model import ChatStore, Message, Timing +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 get_status_location, convert_time_unit, determine_metadata 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"], time=content["timestamp"], 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"], received_timestamp=content["received_timestamp"], read_timestamp=content["read_timestamp"] @@ -867,7 +867,7 @@ def _process_call_record(content, chat, data, timezone_offset): timestamp=content["timestamp"], time=content["timestamp"], 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 read_timestamp=None # TODO: Add timestamp ) diff --git a/Whatsapp_Chat_Exporter/data_model.py b/Whatsapp_Chat_Exporter/data_model.py index 8747419..b63ed01 100644 --- a/Whatsapp_Chat_Exporter/data_model.py +++ b/Whatsapp_Chat_Exporter/data_model.py @@ -279,7 +279,7 @@ class Message: key_id: Union[int, str], received_timestamp: int = None, read_timestamp: int = None, - timezone_offset: int = 0, + timezone_offset: Optional[Timing] = Timing(0), message_type: Optional[int] = None ) -> None: """ @@ -300,10 +300,9 @@ class Message: """ self.from_me = bool(from_me) self.timestamp = timestamp / 1000 if timestamp > 9999999999 else timestamp - timing = Timing(timezone_offset) 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): self.time = time else: @@ -318,14 +317,14 @@ class Message: self.mime = None self.message_type = message_type 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") elif isinstance(received_timestamp, str): self.received_timestamp = received_timestamp else: self.received_timestamp = None 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") elif isinstance(read_timestamp, str): self.read_timestamp = read_timestamp diff --git a/Whatsapp_Chat_Exporter/ios_handler.py b/Whatsapp_Chat_Exporter/ios_handler.py index 3dba02e..5ece928 100644 --- a/Whatsapp_Chat_Exporter/ios_handler.py +++ b/Whatsapp_Chat_Exporter/ios_handler.py @@ -9,8 +9,8 @@ from pathlib import Path from mimetypes import MimeTypes from markupsafe import escape as htmle 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 bytes_to_readable, convert_time_unit, safe_name, Device +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 logger = logging.getLogger(__name__) @@ -211,7 +211,7 @@ def messages(db, data, media_folder, timezone_offset, filter_date, filter_chat, timestamp=ts, time=ts, key_id=content["ZSTANZAID"][:17], - timezone_offset=timezone_offset if timezone_offset else CURRENT_TZ_OFFSET, + timezone_offset=timezone_offset, message_type=content["ZMESSAGETYPE"], received_timestamp=APPLE_TIME + content["ZSENTDATE"] if content["ZSENTDATE"] else None, read_timestamp=None # TODO: Add timestamp @@ -567,7 +567,7 @@ def process_call_record(content, chat, data, timezone_offset): timestamp=ts, time=ts, key_id=content["ZCALLIDSTRING"], - timezone_offset=timezone_offset if timezone_offset else CURRENT_TZ_OFFSET + timezone_offset=timezone_offset ) # Set sender info