# Changelog ## [1.5.1](https://github.com/lazykern/mprisence/compare/v1.5.0...v1.5.1) * Template * Add `icontains` for case-insensitive substring matching in Handlebars templates alongside the existing `contains` and regex helpers ## [1.5.0](https://github.com/lazykern/mprisence/compare/v1.4.5...v1.5.0) * Template * Add `contains`, plus `regex_is_match` and `regex_captures` from [`handlebars_misc_helpers`](https://github.com/davidB/handlebars_misc_helpers), for substring and regex-based matching in presence templates * Dependencies * Update core Rust dependencies: `clap` `4.5` -> `4.6.0`, `env_logger` `0.11.8` -> `0.11.10`, `smol_str` `0.3.4` -> `0.3.6`, `tokio` `1.48.0` -> `1.50.0`, `futures` `0.3` -> `0.3.32`, and `interprocess` `2.2.3` -> `2.4.0` * Upgrade `toml` `0.9.12` -> `1.1.0`, `reqwest` `0.12.24` -> `0.13.2`, and `lofty` `0.22.3` -> `0.23.3` ## [1.4.5](https://github.com/lazykern/mprisence/compare/v1.4.4...v1.4.5) * Config * Add Gelly support (`bus name: io.m51.Gelly`) * Enable `allow_streaming = true` for hosted music server players (Feishin, Supersonic, Gelly) ## [1.4.4](https://github.com/lazykern/mprisence/compare/v1.4.3...v1.4.4) * Cover Art * Treat authenticated/self-hosted API image URLs (Subsonic/OpenSubsonic/Navidrome/Jellyfin patterns) as non-direct and re-host them through configured providers instead of caching them as `direct` * Invalidate cached `direct` entries that are no longer eligible under the stricter URL policy and fall back to provider-based hosting ## [1.4.3](https://github.com/lazykern/mprisence/compare/v1.4.2...v1.4.3) * Fix * Handle `playerctld`'s `NoActivePlayer` D-Bus error without leaving stale Discord presence behind ([#76](https://github.com/lazykern/mprisence/issues/76)) * Deduplicate proxy and real MPRIS bus names by player identity so the same player is only tracked once ([#77](https://github.com/lazykern/mprisence/issues/77)) ## [1.4.2](https://github.com/lazykern/mprisence/compare/v1.4.1...v1.4.2) * Config * Add Ampcast and MPC-QT player entries to the default config * README * Add `mprisence-bin` AUR install option ## [1.4.1](https://github.com/lazykern/mprisence/compare/v1.4.0...v1.4.1) * Config * Add [Haruna player](https://haruna.kde.org/) * Set `ignore = false` explicitly for bundled supported players so `[player.default].ignore = true` does not unintentionally ignore them ## [1.4.0](https://github.com/lazykern/mprisence/compare/v1.3.3...v1.4.0) * Config * Add `status_display_type` for controlling status text source (`name`, `state`, `details`) globally and per-player #70 * Rename `template.detail` to `template.details` * Keep backward compatibility for deprecated `template.detail` and preserve legacy override precedence * Simplify default `template.large_text` and `template.small_text` * Add Quester player entry to default config #69 #71 * Rich Presence * Apply `status_display_type` to Discord activity payload ## [1.3.3](https://github.com/lazykern/mprisence/compare/v1.3.2...v1.3.3) * Cover Art * Allow metadata-only providers (MusicBrainz) to run when `mpris:artUrl` and local tagged cover data are unavailable (addresses [#68](https://github.com/lazykern/mprisence/issues/68)) * Player * Add `cmus-remote` metadata enrichment to improve local file URL/tag resolution for metadata and cover lookup * Rich Presence * Clear Discord activity before closing IPC connection to reduce stale presence lingering (helps with [#67](https://github.com/lazykern/mprisence/issues/67)) * Trigger an immediate first-cycle presence update when a newly discovered player is initialized ## [1.3.2](https://github.com/lazykern/mprisence/compare/v1.3.1...v1.3.2) * Config * Add MusicBee player entry to default config * Assets * Update Euphonica player icon ## [1.3.1](https://github.com/lazykern/mprisence/compare/v1.3.0...v1.3.1) * Fix * Preserve full reverse-DNS player bus names (e.g. `io.github.htkhiem.euphonica`) while stripping MPRIS prefixes ## [1.3.0](https://github.com/lazykern/mprisence/compare/v1.2.14...v1.3.0) * Player Matching * Player identities and bus names now support regex patterns (prefix with `re:` or wrap in `/.../`) for both player config and allowed lists * Matching also checks the player bus name, allowing configs to apply even when the displayed identity differs * New `allowed_players` configuration lets you limit discovery to specific players using exact, wildcard, or regex patterns * Addresses [#62](https://github.com/lazykern/mprisence/issues/62) and [#63](https://github.com/lazykern/mprisence/issues/63) ## [1.2.14](https://github.com/lazykern/mprisence/compare/v1.2.13...v1.2.14) * Config * Added Qmmp player to default config ## [1.2.13](https://github.com/lazykern/mprisence/compare/v1.2.12...v1.2.13) * Cover Art * Support catbox and litterbox uploader * Switch to catbox as default image hosting service instead of imgbb * Improve musicbrainz track search strategy ## [1.2.12](https://github.com/lazykern/mprisence/compare/v1.2.11...v1.2.12) * Fix * `allow_streaming = false` now enforces itself by clearing Discord activity for HTTP/HTTPS sources * Config * Ignore `firefox` by default (another identity of `mozilla_firefox`) ## [1.2.11](https://github.com/lazykern/mprisence/compare/v1.2.10...v1.2.11) * CLI * `mprisence players list` now shows whether each detected player is currently ignored ## [1.2.10](https://github.com/lazykern/mprisence/compare/v1.2.9...v1.2.10) * Config * Added a wait loop so hot reload pauses until the config file is written again, preventing reload failures when editors swap files * Added Quod Libet and Euphonica player entries to the default configuration ## [1.2.9](https://github.com/lazykern/mprisence/compare/v1.2.8...v1.2.9) * Config * Added wildcard player config support * Example: ``` [player."*youtube_music*"] show_icon = true allow_streaming = true ``` All notable changes to mprisence will be documented in this file. ## [1.2.8](https://github.com/lazykern/mprisence/compare/v1.2.7...v1.2.8) * Config * Added Gapless and Harmony Music to default config ## [1.2.7](https://github.com/lazykern/mprisence/compare/v1.2.6...v1.2.7) * Template * No escape for handlebars ## [1.2.6](https://github.com/lazykern/mprisence/compare/v1.2.5...v1.2.6) * Config * Added kew to default config ## [1.2.5](https://github.com/lazykern/mprisence/compare/v1.2.4...v1.2.5) * Cover Art * Fixed album cover path that is derived from artUrl (`file://`) not getting decoded #51 ## [1.2.4](https://github.com/lazykern/mprisence/compare/v1.2.3...v1.2.4) * Config * Added Supersonic and Feishin to default config ## [1.2.3](https://github.com/lazykern/mprisence/compare/v1.2.2...v1.2.3) * Dependencies * Upgraded `notify` from 8.0.0 to 8.1.0 * Upgraded `toml` from 0.8.20 to 0.9 * Upgraded `blake3` from 1.8.1 to 1.8.2 ## [1.2.2](https://github.com/lazykern/mprisence/compare/v1.2.1...v1.2.2) * Config * Added fooyin music player to default config ## [1.2.1](https://github.com/lazykern/mprisence/compare/v1.2.0...v1.2.1) * Cover Art * Use album artists for MusicBrainz release group search ## [1.2.0](https://github.com/lazykern/mprisence/compare/v1.1.2...v1.2.0) * Config * Added `cover.provider.musicbrainz.min_score` to set the minimum score for MusicBrainz cover art * Added `cover.local_search_depth` to set the depth of local cover art search * Cover Art * Increased MusicBrainz query duration range from 3 seconds to 5 seconds * Added album name to MusicBrainz track search query * Escape Lucene special characters in MusicBrainz search queries ## [1.1.2](https://github.com/lazykern/mprisence/compare/v1.1.1...v1.1.2) * Fix [#41](https://github.com/lazykern/mprisence/issues/41) * Check discord status with a IPC socket connection attempt instead of `SingletonLock` ## [1.1.1](https://github.com/lazykern/mprisence/compare/v1.1.0...v1.1.1) * Fixed issue when hot reloading config only updates when the config file is changed for the first time ## [1.1.0](https://github.com/lazykern/mprisence/compare/v1.0.6...v1.1.0) * Use MusicBrainz ID from tags to fetch cover art if available * Increased base MusicBrainz query score from 90% to 95% ## [1.0.6](https://github.com/lazykern/mprisence/compare/v1.0.5...v1.0.6) * Prevent program crash when updating presence fails * Set D-Bus timeout before fetching players to 5 seconds ## [1.0.5](https://github.com/lazykern/mprisence/compare/v1.0.4...v1.0.5) * Create `PlayerFinder` within the update loop instead of storing it in app state. ## [1.0.4](https://github.com/lazykern/mprisence/compare/v1.0.3...v1.0.4) * Fix potential panic when fetching player status due to D-Bus errors * Refine position jump detection logic to reduce false positives caused by D-Bus latency * Set D-Bus timeout explicitly when iterating players to 5 seconds ## [1.0.3](https://github.com/lazykern/mprisence/compare/v1.0.2...v1.0.3) * Show player icon as large image if cover art is not available ## [1.0.2](https://github.com/lazykern/mprisence/compare/v1.0.1...v1.0.2) * Show normalized player identity in CLI ## [1.0.1](https://github.com/lazykern/mprisence/compare/v1.0.0...v1.0.1) * Fixed issue with stale player configuration state after config reload ## [1.0.0](https://github.com/lazykern/mprisence/compare/v0.5.2...v1.0.0) > Major release with comprehensive improvements to configuration, cover art handling, templating, and Discord integration ### Upgrade Steps * **Configuration File Updates Required:** 1. Update template variables usage: - Replace `artists` with `artist_display` for formatted output - Use new `track_display` instead of manual `track_number`/`track_total` - New audio info variables: `bitrate_display`, `sample_rate_display` ### Breaking Changes * Template system updated to Handlebars 6.x - verify your custom templates * Status icon handling changed in templates - now accessed via separate `status_icon` variable * Configuration structure changes require updates to existing config files ### New Features * **Configuration** - Live config reloading while running - New `[activity_type]` section with: - Configurable default activity type (listening/watching/playing/competing) - Content type detection from media URLs * **Cover Art** - Disk caching with configurable TTL (24 hours default) - Enhanced ImgBB provider with expiration control * **Template** - New template variables: - Audio details: `bitrate_display`, `sample_rate_display` - Extended metadata: `composer`, `lyricist`, `genre_display` - Formatted values: `track_display`, `duration_display` - Separated `status_icon` variable - Full template variable reference available in [`src/metadata.rs`](./src/metadata.rs) - Template rendering implementation details in [`src/template.rs`](./src/template.rs) * **CLI** - New subcommands structure: - `mprisence players list [--detailed]` - `mprisence config` - `mprisence version` ### Other Changes * Enhanced Discord connection reliability with auto-reconnection * Improved support for all Discord activity types * Better player name normalization ## [0.5.2](https://github.com/lazykern/mprisence/compare/v0.5.1...v0.5.2) For changes before v1.0.0, please refer to the [releases page](https://github.com/lazykern/mprisence/releases).