bluez_media_native 0.3.1
bluez_media_native: ^0.3.1 copied to clipboard
Native Dart bindings for BlueZ media control, browsing, registration, and transports.
Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased] #
0.3.1 - 2026-09-24 #
Fixed #
- Allow Linux cross-compilation by deferring architecture and toolchain selection to the consuming build environment.
0.3.0 - 2026-09-13 #
Added #
- Explicit native or MPRIS cover-art mode selection with no runtime detection or cross-mode fallback.
- Session reuse cover art APIs (
getCoverArtFromExistingSession) to reuse existing OBEX sessions (e.g.mpris-proxy) without managing session lifetimes. - MediaItem cover art acquisition across native C ABI and Dart APIs (
BluezMediaItem.getCoverArt()). - Animated GIF artwork support through unchanged MPRIS image bytes and Flutter's built-in decoder.
- Relocated compiled consumer integration tests verifying native asset resolution.
- Additional CI test suites for private D-Bus daemon resynchronization and isolate shutdown.
Fixed #
- OBEX Cover Art Service:
- Maintained one OBEX BIP cover-art session per device while media clients are active, including recovery after
obexdrestarts. - Accepted completed downloads without a total-size header and preserved their final OBEX errors.
- Reused a matching BIP session when available and created an owned session only when needed, including recovery after stale sessions.
- Requested
Image1.GetThumbnailfirst for broad phone compatibility and retained native-image retrieval as a fallback. - Reported empty MPRIS proxy files as not ready instead of invalid artwork.
- Maintained one OBEX BIP cover-art session per device while media clients are active, including recovery after
- Native Library Resolution:
- Made the bundled native library reliably discoverable by compiled consumer applications.
- State & Concurrency:
- Prevented delayed asynchronous property refreshes from overwriting newer proxy states.
- Replayed concurrent updates after D-Bus daemon resynchronization.
- Retried property invalidations superseded by fast-arriving D-Bus property events.
- Discarded late updates and rejected calls on disposed media proxies (
BluezMediaPlayer,BluezMediaControl,BluezMediaFolder,BluezMediaItem,BluezMediaTransport). - Kept proxy objects and Flutter example UI synchronized across refreshes, object lifecycle events, widget disposal, and overlapping requests.
- Resource Management & Native Lifecycles:
- Automatically reclaimed native client instances and handles on Dart isolate shutdown.
- Contained exceptions and handle validation inside descriptor C ABI entry points.
- Ensured native client teardown completes cleanly during asynchronous
close()operations. - Retained transport file descriptors and transport owners until explicit cleanup by Dart code.
- Cleaned up timed-out cover-art downloads and temporary directories on client exit.
- Revalidated stale OBEX sessions and rejected incomplete fast-finished transfers.
- D-Bus & BlueZ Integration:
- Preserved original D-Bus error details when client creation fails.
- Maintained D-Bus event loop responsiveness during remote operation calls.
- Invalidated cached media states and resynchronized automatically when BlueZ service ownership changes.
- Subscribed to property change signals prior to ObjectManager discovery to prevent missing early updates.
- Serialized synchronous and raw asynchronous player registrations.
- Supplied required MPRIS properties during local player registration and stopped advertising unimplemented local playback capabilities.
- Build & Packaging:
- Fixed bundled library resolution via native asset ID mapping.
- Optimized CMake target rules to compile native implementation objects only once.
- Validated native build targets and tracked vendored input files in build hooks.
Refactored #
- Streamlined cover art loading and retry logic in the Flutter demo application.
- Defaulted the Flutter example to native OBEX, removed premature MPRIS reads during refresh, and reported cover-art transfer duration.
- Kept unchecked native decoding routines out of production builds.
- Protected decoded media property snapshots against inadvertent caller mutation.
0.2.0 - 2026-08-20 #
Added #
- Experimental BlueZ OBEX BIP cover art retrieval service (
CoverArtService). - Exposed
ObexPortproperty (uint16) onMediaPlayer1interface and FFI bindings. - Automatic native-format cover art download support.
- New C ABI functions for cover art acquisition and native buffer memory management.
- Unit and lifetime tests for handle safety and cover art property decoding.
Changed #
- Refactored native object manager and client lifetime management.
- Updated Dart
BluezMediaPlayerto includegetCoverArt()andobexPortmetadata access.
0.1.3 - 2026-08-13 #
0.1.2 - 2026-06-12 #
Added #
- Integrated
MediaTransport1proxies with automatic device-based media object grouping. - Implemented
RepeatandShuffleproperties forMediaPlayer1. - Introduced
BluezMediaStatusCodeenum for native error reporting. - Asynchronous D-Bus
ObjectManagerevent loop handling.
Changed #
- Documented native status codes, full API surface, and troubleshooting steps in
README.md.
0.1.1 - 2026-06-04 #
Added #
- Implementation of
MediaTransport1streaming and volume control APIs. - Media endpoint and transport registration setup.
- Example CLI scripts for transport status inspection and volume adjustment.
0.1.0 - 2026-06-03 #
Added #
- Core
BluezMediaClientlifecycle management and connection initialization. - Support for registering local
MediaPlayer1instances viaorg.bluez.Media1. - Remote
org.bluez.MediaPlayer1playback controls (Play,Pause,Stop,Next,Previous,Seek). - Remote
org.bluez.MediaControl1command interface and properties. - AVRCP browsing support for
org.bluez.MediaFolder1andorg.bluez.MediaItem1.