Skip to content

imessage-exporter 4.1.0#285218

Open
BrewTestBot wants to merge 1 commit into
mainfrom
bump-imessage-exporter-4.1.0
Open

imessage-exporter 4.1.0#285218
BrewTestBot wants to merge 1 commit into
mainfrom
bump-imessage-exporter-4.1.0

Conversation

@BrewTestBot
Copy link
Copy Markdown
Contributor

Created by brew bump


Created with brew bump-formula-pr.

Details

release notes
iMessage Exporter 4.1.0: [Chaparral Yucca](https://calscape.org/Hesperoyucca-whipplei-(Chaparral-Yucca)) contains the following fixes and improvements:
  • New Features
    • Rendering Engine
      • Migrate HTML and TXT exporters to an Askama-based template engine
        • Hard cutover: previous string-builder code path is fully removed
        • 20 HTML templates and 22 TXT templates created
        • Per-format logic split between typed Rust view models and Askama template files
        • Shared rendering primitives consolidated so export types consume identical message structures
        • New view-model / driver layer is format-agnostic
    • Interactive iOS backup decryption password input via #730 (contributed by @jmcp)
      • Using an encrypted iOS backup without -x now prompts interactively
      • -x still supported for non-TTY contexts
  • Bug Fixes
    • Disable progress bar when run headless for #738
      • Support both automatic TTY detection and manual suppression via --no-progress
    • Fix sticker attachments not incrementing the attachment index
    • Fix double-indentation on replies in TXT output
    • Fix SharePlay's embedded "Ended" line not receiving the per-line reply indent
    • Fix several balloon spacing inconsistencies:
      • Leading whitespace before ldtext in find_my/apple_pay
      • Trailing colon when ldtext is absent
      • Stray whitespace when app_name is omitted
    • Fix format_url rendering blank lines when primary/title/summary are empty strings
    • URL messages with a missing payload row are now rendered through the standard URL renderer
    • Normalize announcement wording across export types
    • Fix broken sticker conversion on Windows
    • Fix 1-indexed ffmpeg HEICS conversion assembly
    • Fix sticker offset reconstruction gaps
    • Error logs no longer clobber the progress bar
  • Enhancements
    • ffmpeg processing warning now fires for animated stickers in addition to videos
    • Per-frame ffmpeg loop replaced with a single ffmpeg invocation that consumes both image sequences and applies alphamerge across them
    • Resolve self/recipient names through a single resolver so announcements and edits treat the local user identically
    • File-not-found errors now identify the missing path and resolution mode
    • Add context to edited message parse errors
  • API Changes
    • Breaking

      • Remove Message::started_sharing_location() and Message::stopped_sharing_location() in favor of Message::shared_location_kind()
      • EditedEvent.text is now String
      • Remove Table::extract. Use Table::rows or Table::row instead.
      Migration details (click to expand)

      Multi-row iteration:

        // Before
        let rows = stmt.query_map(params, |row| Ok(Message::from_row(row)))?;
        for row in rows {
            let msg = Message::extract(row)?;
            // ...
        }
      
        // After
        for msg in Message::rows(&mut stmt, params)? {
            let msg = msg?;
            // ...
        }
      

      Single-row fetch:

        // Before
        let msg = Message::extract(stmt.query_row(params, |row| Ok(Message::from_row(row))))?;
      
        // After
        let msg = Message::row(&mut stmt, params)?;
      
    • Ergonomic

      • Add StickerDecoration enum and Attachment::get_sticker_decoration()
        • Consolidates get_sticker_source / get_sticker_source_application_name / get_sticker_effect dispatch into a single call returning a format-agnostic decoration
      • Add impl Display for Expressive<'_>
      • Derive Clone + Copy on BubbleEffect, ScreenEffect, and Expressive<'a>
      • Derive Default on URLMessage<'a>
      • Unify the exporter's MessageFormatter trait under a single RuntimeError return type
        • format_app, format_tapback, and format_message_into all return Result<_, RuntimeError>
        • RuntimeError gains a MessageError variant + From<MessageError> impl so ? composes end-to-end
        • RuntimeError now implements std::error::Error with source()
        • Every .map_err(...) wrapper site in the exporter crate eliminated
  • Security
    • HTML escaping is now applied uniformly at template render time via a new ChatEscaper
    • format_attributes now sanitizes HTML text on the no-attributes short-circuit
  • Miscellaneous
    • Reorganize exporter resources
    • Reduce allocations:
      • Attribute formatting now uses a single pre-allocated buffer with opens pushed in reverse and closes in forward order
      • Several String tag fields replaced with typed booleans
      • Redundant clones removed across the shared layer
    • Significant new test coverage
    • Remove dead and artificial tests covering code paths no longer reachable in the new architecture
    • Make unit tests run on PRs
    • Clippy cleanups
    • Bump dependencies
    • Build with latest rustc

View the full release notes at https://github.com/ReagentX/imessage-exporter/releases/tag/4.1.0.


@github-actions github-actions Bot added rust Rust use is a significant feature of the PR or issue bump-formula-pr PR was created using `brew bump-formula-pr` labels May 29, 2026
@daeho-ro daeho-ro force-pushed the bump-imessage-exporter-4.1.0 branch from c0aef17 to e89a625 Compare May 29, 2026 13:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bump-formula-pr PR was created using `brew bump-formula-pr` rust Rust use is a significant feature of the PR or issue

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant