v2026.05.19.0 — MediaSession lifecycle, Lidarr hardening, Lucide migration #52

Merged
bvandeusen merged 262 commits from dev into main 2026-05-18 21:42:48 -04:00
bvandeusen commented 2026-05-18 21:42:34 -04:00 (Migrated from git.fabledsword.com)

26 commits since v2026.05.18.0. Mobile client 2026.5.19+10. CI green on dev.

Headline: the Flutter media/playback experience now behaves like a real media app, and the whole app is on the Lucide icon set.

MediaSession / playback (Flutter):

  • Fixed the mini-player / watch ~30s stale-track race (logical-index base; the audio_service stream the watch mirrors).
  • Audio focus / interruptions / becoming-noisy via audio_session (pause for calls, duck for nav, pause on earbud unplug).
  • MediaSession terminal-state teardown: watch tile / notification close when idle 5 min or dismissed-while-paused.
  • Resume-last-session on relaunch, plus resume on a media-button press when the session was fully torn down.
  • Periodic PlaybackState refresh so the lock-screen / Wear / Auto scrubber advances smoothly (+ notification progress bar).
  • Notification favorite via MediaControl.custom + customAction (NOT the broken setRating path — audio_service #376).
  • AudioServiceConfig: art downscale + preload for external surfaces.
  • Playback errors surfaced via a debounced/coalesced SnackBar instead of a silent skip.

Lidarr (backend):

  • Durable approve: a Lidarr-down approve no longer 503s/stays-pending — the reconciler idempotently retries the add until it sticks (migration 0031).
  • Idempotent Create() — a non-terminal request for the same MBID returns the existing row.

Design system:

  • Full Lucide migration: 30 files swept Material Icons.*LucideIcons.* (signed-off map); LikeButton + notification heart re-derived from the verbatim Lucide heart path (outline vs filled).

Deferred / tracked (not in this release): #399 (flutter-ci libsqlite3 → re-enable skipped drift tests; needs operator runner-image rebuild).

⚠️ Operator note: per the explicit "full send" decision, this batch shipped CI-green but with zero on-device verification. After deploying the release APK, smoke-check: icons render correctly app-wide; mini-player/playlist-marker update instantly; call/earbud interruptions; watch tile teardown + media-button resume; the notification favorite. Hotfix-release anything that looks wrong.

26 commits since v2026.05.18.0. Mobile client `2026.5.19+10`. CI green on dev. **Headline: the Flutter media/playback experience now behaves like a real media app, and the whole app is on the Lucide icon set.** MediaSession / playback (Flutter): - Fixed the mini-player / watch ~30s stale-track race (logical-index base; the audio_service stream the watch mirrors). - Audio focus / interruptions / becoming-noisy via `audio_session` (pause for calls, duck for nav, pause on earbud unplug). - MediaSession terminal-state teardown: watch tile / notification close when idle 5 min or dismissed-while-paused. - Resume-last-session on relaunch, plus resume on a media-button press when the session was fully torn down. - Periodic PlaybackState refresh so the lock-screen / Wear / Auto scrubber advances smoothly (+ notification progress bar). - Notification favorite via `MediaControl.custom` + `customAction` (NOT the broken `setRating` path — audio_service #376). - AudioServiceConfig: art downscale + preload for external surfaces. - Playback errors surfaced via a debounced/coalesced SnackBar instead of a silent skip. Lidarr (backend): - Durable approve: a Lidarr-down approve no longer 503s/stays-pending — the reconciler idempotently retries the add until it sticks (migration `0031`). - Idempotent `Create()` — a non-terminal request for the same MBID returns the existing row. Design system: - Full Lucide migration: 30 files swept Material `Icons.*` → `LucideIcons.*` (signed-off map); `LikeButton` + notification heart re-derived from the verbatim Lucide heart path (outline vs filled). Deferred / tracked (not in this release): #399 (flutter-ci libsqlite3 → re-enable skipped drift tests; needs operator runner-image rebuild). ⚠️ Operator note: per the explicit "full send" decision, this batch shipped CI-green but with **zero on-device verification**. After deploying the release APK, smoke-check: icons render correctly app-wide; mini-player/playlist-marker update instantly; call/earbud interruptions; watch tile teardown + media-button resume; the notification favorite. Hotfix-release anything that looks wrong.
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bvandeusen/minstrel#52