Skip to main content

Crate imessage_database

Crate imessage_database 

Source
Expand description

§imessage-database

This library provides interfaces to interact with iMessage Databases.

§Installation

This library is available on crates.io.

§Documentation

Documentation is available on docs.rs.

§Example

use imessage_database::{
    error::table::TableError,
    tables::{capabilities::Capabilities, messages::Message, table::get_connection},
    util::{dirs::default_db_path, query_context::QueryContext},
};

fn iter_messages() -> Result<(), TableError> {
    // Create a read-only connection to an iMessage database
    let db = get_connection(&default_db_path().unwrap())?;

    // Probe the schema and use the result to compose every message query
    let capabilities = Capabilities::determine(&db)?;
    let context = QueryContext::default();

    // Prepare the message query and iterate over its rows
    let mut statement = Message::stream_rows(&db, &capabilities, &context)?;
    for message_result in Message::rows(&mut statement, [])? {
        match message_result {
            Ok(message) => {
                println!("Text: {:?}", message.text);
                println!("Body components: {:#?}", message.components);
                println!("Edit history: {:#?}", message.edited_parts);
            }
            Err(e) => eprintln!("Error: {:?}", e),
        }
    }

    Ok(())
}

Re-exports§

pub use chrono;
pub use crabstep;
pub use plist;
pub use rusqlite;

Modules§

error
This module contains types of errors that can happen when parsing iMessage data.
message_types
iMessages can represent different kinds of data. This module defines types for those data.
tables
Representations of iMessage database tables as structs.
util
This module defines common utilities used across table queries.