import sqlite3 import os import shutil from common import COLORS, TEMPLATEBEGINNING, TEMPLATEEND, ROWTEMPLATE from common import get_color, reset_colors, get_date, sanitize_filename, iterate_with_progress, get_output_dirs OUTPUT_DIR, MEDIA_DIR = get_output_dirs("sms") CHAT_STORAGE_FILE = os.path.join(OUTPUT_DIR, "sms.db") CONTACTS_FILE = os.path.join(OUTPUT_DIR, "AddressBook.sqlitedb") FILES = [("HomeDomain", "Library/SMS/sms.db", CHAT_STORAGE_FILE), ("HomeDomain", "Library/AddressBook/AddressBook.sqlitedb", CONTACTS_FILE)] FIELDS = "ROWID, text, date, is_from_me, handle_id, cache_has_attachments" OBJ_MARKER = "\ufffc" contact_cache = {} def get_contact_name(conn, contact_conn, contact_id): if contact_id in contact_cache: return contact_cache[contact_id] c = conn.cursor() c.execute("SELECT id FROM handle WHERE ROWID=?;", (contact_id,)) handle_id = next(c)[0] # this is either a phone number or an iMessage address if handle_id.startswith("+"): c = contact_conn.cursor() p = handle_id.replace("+972", "0") phone_options = (handle_id, p, "{}-{}-{}".format(p[-10:-7], p[-7:-4], p[-4:]),
import sqlite3 import os import shutil import codecs from common import COLORS, TEMPLATEBEGINNING, TEMPLATEEND, ROWTEMPLATE from common import get_color, reset_colors, get_date, sanitize_filename, iterate_with_progress, get_output_dirs OUTPUT_DIR, MEDIA_DIR = get_output_dirs("whatsapp") CHAT_STORAGE_FILE = os.path.join(OUTPUT_DIR, "ChatStorage.sqlite") FILES = [("AppDomain-net.whatsapp.WhatsApp", "Documents/ChatStorage.sqlite", CHAT_STORAGE_FILE)] FIELDS = "ZFROMJID, ZTEXT, ZMESSAGEDATE, ZMESSAGETYPE, ZGROUPEVENTTYPE, ZGROUPMEMBER, ZMEDIAITEM" cached_members = {} def get_group_member_name(conn, id): if id in cached_members: return cached_members[id] c = conn.cursor() c.execute("SELECT ZCONTACTNAME FROM ZWAGROUPMEMBER WHERE Z_PK=?", (id,)) cached_members[id] = next(c)[0] return cached_members[id] def get_media_data(conn, mediaid, cols): c = conn.cursor() c.execute("SELECT {} FROM ZWAMEDIAITEM WHERE Z_PK=?".format(cols), (mediaid,)) return next(c) def copy_media_file(backup_extractor, path_in_backup): path_in_backup = "Library" + ("" if path_in_backup.startswith("/") else "/") + path_in_backup
import sqlite3 import os import shutil from common import COLORS, TEMPLATEBEGINNING, TEMPLATEEND, ROWTEMPLATE from common import get_color, reset_colors, get_date, sanitize_filename, iterate_with_progress, get_output_dirs OUTPUT_DIR, MEDIA_DIR = get_output_dirs("sms") CHAT_STORAGE_FILE = os.path.join(OUTPUT_DIR, "sms.db") CONTACTS_FILE = os.path.join(OUTPUT_DIR, "AddressBook.sqlitedb") FILES = [("HomeDomain", "Library/SMS/sms.db", CHAT_STORAGE_FILE), ("HomeDomain", "Library/AddressBook/AddressBook.sqlitedb", CONTACTS_FILE)] FIELDS = "ROWID, text, date, is_from_me, handle_id, cache_has_attachments" OBJ_MARKER = "\ufffc" contact_cache = {} def get_contact_name(conn, contact_conn, contact_id): if contact_id in contact_cache: return contact_cache[contact_id] c = conn.cursor() c.execute("SELECT id FROM handle WHERE ROWID=?;", (contact_id, )) handle_id = next(c)[ 0] # this is either a phone number or an iMessage address if handle_id.startswith("+"):
import sqlite3 import os import shutil import codecs from common import COLORS, TEMPLATEBEGINNING, TEMPLATEEND, ROWTEMPLATE from common import get_color, reset_colors, get_date, sanitize_filename, iterate_with_progress, get_output_dirs OUTPUT_DIR, MEDIA_DIR = get_output_dirs("whatsapp") CHAT_STORAGE_FILE = os.path.join(OUTPUT_DIR, "ChatStorage.sqlite") FILES = [("AppDomain-net.whatsapp.WhatsApp", "Documents/ChatStorage.sqlite", CHAT_STORAGE_FILE)] FIELDS = "ZFROMJID, ZTEXT, ZMESSAGEDATE, ZMESSAGETYPE, ZGROUPEVENTTYPE, ZGROUPMEMBER, ZMEDIAITEM" cached_members = {} def get_group_member_name(conn, id): if id in cached_members: return cached_members[id] c = conn.cursor() c.execute("SELECT ZCONTACTNAME FROM ZWAGROUPMEMBER WHERE Z_PK=?", (id, )) cached_members[id] = next(c)[0] return cached_members[id] def get_media_data(conn, mediaid, cols): c = conn.cursor() c.execute("SELECT {} FROM ZWAMEDIAITEM WHERE Z_PK=?".format(cols),