Source code for imessagedb.db
import configparser
import os
import sqlite3
import imessagedb
from imessagedb.attachments import Attachments
from imessagedb.chats import Chats
from imessagedb.handles import Handles
from imessagedb.generate_html import HTMLOutput
from imessagedb.messages import Messages
from imessagedb.generate_text import TextOutput
[docs]class DB:
"""
A class to connect to an iMessage database
"""
def __init__(self, database_name=None, config=None):
"""
Parameters
----------
database_name : str
The database that it connects to (the default is to use the default database in the caller's home directory)
config : ConfigParser
Configuration information. If none is provided, we will create a default.
"""
if database_name is None:
database_name = f"{os.environ['HOME']}/Library/Messages/chat.db"
self._database_name = database_name
self._configuration = config
if self._configuration is None:
self._configuration = configparser.ConfigParser()
self._configuration.read_string(imessagedb.DEFAULT_CONFIGURATION)
self._control = self._configuration['CONTROL']
self._chat_connection = sqlite3.connect(database_name)
self._cursor = self._chat_connection.cursor()
# Preload some of the data
self._handles = Handles(self)
self._chats = Chats(self)
self._attachment_list = Attachments(self)
return
[docs] def Messages(self, query_type: str, title: str, numbers: list = None, chat_id: str = None) -> Messages:
"""A wrapper to create a Messages class
"""
return Messages(self, query_type, title, numbers=numbers, chat_id=chat_id)
[docs] def HTMLOutput(self, me: str, message_list: Messages, inline=False, output_file=None) -> HTMLOutput:
"""A wrapper to create an HTMLOutput class
"""
return HTMLOutput(self, me, message_list, inline, output_file)
[docs] def TextOutput(self, me: str, message_list: Messages, output_file=None) -> TextOutput:
"""A wrapper to create a TextOutput class
"""
return TextOutput(self, me, message_list, output_file)
[docs] def disconnect(self) -> None:
"""Disconnects from the database
"""
self._chat_connection.close()
return
@property
def connection(self) -> sqlite3.Cursor:
"""Returns a connection to query the database
"""
return self._cursor
@property
def handles(self) -> Handles:
"""Returns an imessagedb.Handles class with all the handles
"""
return self._handles
@property
def chats(self) -> Chats:
"""Returns an imessagedb.Chats class with all the chats
"""
return self._chats
@property
def attachment_list(self) -> Attachments:
"""Returns an imessagedb.Attachments class with all the attachments
"""
return self._attachment_list
@property
def config(self) -> configparser.ConfigParser:
"""Returns the configuration object
"""
return self._configuration
@property
def control(self):
"""Returns a shortcut to the CONTROL section of the configuration
"""
return self._control