20 releases (9 stable)

1.8.0 Dec 4, 2023
1.7.0 Nov 20, 2023
1.6.0 Sep 18, 2023
1.5.0 Jul 29, 2023
0.1.4 Dec 30, 2022

#1202 in Database interfaces

Download history 61/week @ 2023-12-18 41/week @ 2023-12-25 64/week @ 2024-01-01 79/week @ 2024-01-08 95/week @ 2024-01-15 57/week @ 2024-01-22 78/week @ 2024-01-29 66/week @ 2024-02-05 73/week @ 2024-02-12 66/week @ 2024-02-19 71/week @ 2024-02-26 151/week @ 2024-03-04 88/week @ 2024-03-11 65/week @ 2024-03-18 53/week @ 2024-03-25 352/week @ 2024-04-01

576 downloads per month
Used in imessage-exporter

GPL-3.0-or-later

455KB
4.5K SLoC

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::{
        messages::Message,
        table::{get_connection, Table},
    },
    util::dirs::default_db_path,
};

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

    /// Create SQL statement
    let mut statement = Message::get(&db)?;

    /// Execute statement
    let messages = statement
        .query_map([], |row| Ok(Message::from_row(row)))
        .unwrap();

    /// Iterate over each row
    for message in messages {
        let mut msg = Message::extract(message)?;

        /// Parse message body if it was sent from macOS 13.0 or newer
        msg.gen_text(&db);

        /// Emit debug info for each message
        println!("{:?}", msg)
    }

    Ok(())
}

Dependencies

~26MB
~494K SLoC