Skip to content

Commit

Permalink
Merge pull request #430 from ReagentX/develop
Browse files Browse the repository at this point in the history
Whispering Bells
  • Loading branch information
ReagentX authored Jan 16, 2025
2 parents 4ccbdcd + bcb81e0 commit 8ccf732
Show file tree
Hide file tree
Showing 45 changed files with 2,489 additions and 600 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ env:
jobs:
Test:
runs-on: ubuntu-latest
env:
TZ: PST

steps:
- uses: actions/checkout@v2
Expand Down
18 changes: 9 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Documentation for the library is located [here](imessage-database/README.md).

### Supported Features

This crate supports every iMessage feature as of macOS 15.1.1 (24B91) and iOS 18.1.1 (22B91):
This crate supports every iMessage feature as of macOS 15.2 (24C101) and iOS 18.2.1 (22C161):

- Multi-part messages
- Replies/Threads
Expand Down
4 changes: 2 additions & 2 deletions docs/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ On my M1 Max MacBook Pro, approximate performance is as follows:

| `--copy-method` | Messages exported per second |
|---|---|
| `disabled` | 36,000 |
| `clone` | 23,000 |
| `disabled` | 40,800 |
| `clone` | 29,000 |
| `basic` | < 350 |
| `full` | < 20 |

Expand Down
1 change: 1 addition & 0 deletions docs/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ This tool targets the current latest public release for macOS and iMessage. It m
- Parses `typedstream` message body data
- Detects the service a message was sent from
- In HTML exports, balloons are colored correctly for the service they were sent with
- Supports iMessage, SMS, MMS, and RCS
- Formatted Text
- Parses formatted text ranges from `typedstream` message body data
- Supports all iMessage text format ranges:
Expand Down
Binary file modified docs/hero.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion imessage-database/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ repository = "https://github.com/ReagentX/imessage-exporter"
version = "0.0.0"

[dependencies]
chrono = "=0.4.38"
chrono = "=0.4.39"
plist = "=1.7.0"
rusqlite = { version = "=0.32.1", features = ["blob", "bundled"] }
sha1 = "=0.10.6"
Expand Down
28 changes: 14 additions & 14 deletions imessage-database/src/message_types/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ impl<'a> BalloonProvider<'a> for AppMessage<'a> {
}
}

impl<'a> AppMessage<'a> {
impl AppMessage<'_> {
/// Parse key/value pairs from the query string in the balloon's a URL
pub fn parse_query_string(&self) -> HashMap<&str, &str> {
let mut map = HashMap::new();
Expand All @@ -88,7 +88,7 @@ impl<'a> AppMessage<'a> {
mod tests {
use crate::{
message_types::{app::AppMessage, variants::BalloonProvider},
util::plist::parse_plist,
util::plist::parse_ns_keyed_archiver,
};
use plist::Value;
use std::fs::File;
Expand All @@ -102,7 +102,7 @@ mod tests {
.join("test_data/app_message/Sent265.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();
let expected = AppMessage {
Expand All @@ -129,7 +129,7 @@ mod tests {
.join("test_data/app_message/ApplePayRecurring.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();
let expected = AppMessage {
Expand All @@ -156,7 +156,7 @@ mod tests {
.join("test_data/app_message/OpenTableInvited.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();
let expected = AppMessage {
Expand All @@ -183,7 +183,7 @@ mod tests {
.join("test_data/app_message/Slideshow.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();
let expected = AppMessage {
Expand All @@ -210,7 +210,7 @@ mod tests {
.join("test_data/app_message/Game.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();
let expected = AppMessage {
Expand All @@ -237,7 +237,7 @@ mod tests {
.join("test_data/app_message/Business.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();
let expected = AppMessage {
Expand All @@ -264,7 +264,7 @@ mod tests {
.join("test_data/app_message/Business.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();
let mut expected = HashMap::new();
Expand All @@ -282,7 +282,7 @@ mod tests {
.join("test_data/app_message/CheckinTimer.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();

Expand Down Expand Up @@ -310,7 +310,7 @@ mod tests {
.join("test_data/app_message/CheckinLate.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();

Expand Down Expand Up @@ -338,7 +338,7 @@ mod tests {
.join("test_data/app_message/CheckinLocation.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();

Expand Down Expand Up @@ -366,7 +366,7 @@ mod tests {
.join("test_data/app_message/CheckinTimer.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();
let mut expected = HashMap::new();
Expand All @@ -385,7 +385,7 @@ mod tests {
.join("test_data/app_message/FindMy.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppMessage::from_map(&parsed).unwrap();
let expected = AppMessage {
Expand Down
4 changes: 2 additions & 2 deletions imessage-database/src/message_types/app_store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ impl<'a> AppStoreMessage<'a> {
mod tests {
use crate::{
message_types::{app_store::AppStoreMessage, variants::BalloonProvider},
util::plist::parse_plist,
util::plist::parse_ns_keyed_archiver,
};
use plist::Value;
use std::env::current_dir;
Expand All @@ -92,7 +92,7 @@ mod tests {
.join("test_data/app_store/AppStoreLink.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let balloon = AppStoreMessage::from_map(&parsed).unwrap();
let expected = AppStoreMessage {
Expand Down
4 changes: 2 additions & 2 deletions imessage-database/src/message_types/collaboration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ impl<'a> CollaborationMessage<'a> {
mod tests {
use crate::{
message_types::{collaboration::CollaborationMessage, variants::BalloonProvider},
util::plist::parse_plist,
util::plist::parse_ns_keyed_archiver,
};
use plist::Value;
use std::env::current_dir;
Expand All @@ -118,7 +118,7 @@ mod tests {
.join("test_data/collaboration_message/Freeform.plist");
let plist_data = File::open(plist_path).unwrap();
let plist = Value::from_reader(plist_data).unwrap();
let parsed = parse_plist(&plist).unwrap();
let parsed = parse_ns_keyed_archiver(&plist).unwrap();

let actual = CollaborationMessage::from_map(&parsed).unwrap();
let expected = CollaborationMessage {
Expand Down
Loading

0 comments on commit 8ccf732

Please sign in to comment.