iMessage Exporter 4.0.0: Sand Verbena contains the following fixes and improvements:
- New Features
- Support for jailbroken iOS filesystem data with
--attachment-root(contributed by @iCrazeiOS) - Restructured diagnostics output
- New diagnostics:
- Recoverable deleted messages count
- Message date range with human-readable time span
- New diagnostics:
- Improve chatroom participant deduplication using union-find
- Support for jailbroken iOS filesystem data with
- Performance (≈+8%)
- Reduce dependency surface
- Make
protobuf-codegenoptional behindproto-regenfeature flag (-44 build dependencies for normal
builds) - Remove
indicatifdependency, replace with custom progress indicator (-7 transitive dependencies) - Remove
filetimedependency (-2 transitive dependencies)
- Make
- Refactor
sanitizationfunctions for improved performance - Cache
from_guidquery withprepare_cached - Optimize capacity allocation in
handleandchat_handle_joincaches - Defer clones in message body parsing
- Reduce dependency surface
- Bug Fixes
- Fix incorrect contact matching on country codes for #671
- Fix group removal/addition messages #670 and #681
- Fix filename truncation panics on multi-byte UTF-8 characters using
floor_char_boundary() - Fix estimated export space double-counting attachment sizes
- Fix poll messages with no
associated_message_guidbeing misclassified as poll updates - Fix
is_from_me()incorrectly consideringother_handle/share_directionon non-location-sharing messages - Fix file extension being added twice to attachment filenames
- Remove duplicate fallback check and duplicate query in
chat_handle_joindiagnostics - Parameterize
from_guidquery to prevent SQL injection - Remove mismatched paragraph tag added to recovered messages
- Use correct permissions when updating file metadata on Windows
- Fix custom attachment path not applying to diagnostic runs
- API Changes
- Breaking
generate_text()replaced byparse_body()+apply_body()APITable::stream()now propagates callback errors:Result<(), E> where E: From<TableError>DiagnosticandDeduplicatetraits removed; methods moved to inherentimplsrun_diagnostic()methods return structured data typesService::from()renamed toService::from_name()- All
Message::date()related signatures changed from&i64toi64 datemodule functions now receive&DateTimeinstead ofResult<&DateTime, MessageError>get_sticker_effect()signature changed fromVec<u8>to&[u8]util::outputmodule removed
- Ergonomic
- Implement
std::error::Errorwithsource()chains for all error types Table::extract()now has a default implementationChat::Propertiesfields made public- Derive
PartialEq/Eqon most data types
- Implement
- Breaking
- Security
- Introduce
HtmlBuilderto separate trusted HTML structure from untrusted content - Sanitize
Attachmentmetadata in HTML output
- Introduce
- Miscellaneous
- Support "Phone Number Changed" group action type
- Deduplicate common exporter logic into
shared.rs - Replace
panic!withcontinueinHandle::build_person_id_lookup - Bump dependencies
- Build with latest
rustc