Skip to content

Stash v0.3.9

Choose a tag to compare

@github-actions github-actions released this 19 Apr 16:01
· 1798 commits to master since this release

feat(nowplaying): 3-option wrong-match dialog + reachable Failed Matches

Two tightly related UX fixes to the flag flow shipped in 0.3.6 / 0.3.8.

Now Playing flag icon now opens a dialog with three explicit outcomes
instead of a silent database write:

  • Find a better match — existing behavior (sets match_flagged, surfaces
    in Failed Matches for replacement selection).
  • Delete from library — deletes file + track row, future sync may
    re-queue.
  • Delete and block forever — deletes file + keeps tombstone row with
    is_blacklisted = 1 so future syncs skip the identity across every
    source (Spotify URI, YouTube ID, canonical match).

Player.skipNext() fires before the delete so ExoPlayer doesn't error
on a file that disappeared under it.

Sync tab's Failed Matches entry-point card was gated on unmatchedCount
only — a track flagged via Now Playing with zero concurrent unmatched
tracks had no way to reach the Failed Matches screen. Wires in
flaggedCount alongside unmatchedCount:

  • SyncViewModel observes getFlaggedCount() into SyncUiState.flaggedCount.
  • SyncScreen renders the review card when either count > 0. Card copy
    adapts: "N couldn't be matched" / "N flagged as wrong match" /
    "N need review · M unmatched · K flagged."
  • FailedMatchesHeader title + subtitle + count line switch between
    "Unmatched Songs" / "Flagged Songs" / "Songs to Review" based on
    which lists are populated.

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com


Install

Download the .apk below and open it on your Android device. If you've got a previous Stash release installed, this upgrades in place — your library, sync history, and settings are preserved.

Requires: Android 8.0 (API 26) or newer.

See the README for first-time setup.

Full Changelog: v0.3.8...v0.3.9