Skip to content

Stash v0.3.8

Choose a tag to compare

@github-actions github-actions released this 19 Apr 12:24
· 1573 commits to master since this release

feat(library): protected Liked Songs + in-app playlists + blocklist

Rewrites the delete cascade so Liked Songs (Spotify or YouTube) and
in-app custom playlists are untouchable by deletions originating from
other playlists. Adds a "never download again" blocklist with a
Settings viewer for unblocking.

Protected cascade:

  • New MusicRepository.removeTrackFromPlaylistAndMaybeDelete applies a
    three-step algorithm: unlink the track from the source playlist,
    skip the cascade if any protected playlist (LIKED_SONGS or CUSTOM +
    source=BOTH) still claims it, skip the cascade if any other
    non-protected playlist still claims it, otherwise delete file +
    album art + track row.
  • Blacklist is explicitly bypassed on protected tracks so users can't
    accidentally block something they curated. Protected tracks count
    as "kept" in the summary so the UI can explain what happened.
  • Home playlist-delete and PlaylistDetail single-track-delete dialogs
    both route through the new method. Home dialog previews the split
    before confirmation: "N will be deleted, M stay because they're in
    Liked Songs or a custom playlist."

Blacklist:

  • is_blacklisted column on tracks (migration v9 → v10). Blocked rows
    stay as tombstones (is_downloaded=0, file_path=null) so every
    future sync's identity match picks them up and skips re-download.
  • DiffWorker's findExistingTrack hit for a blacklisted row short-
    circuits: no playlist_tracks insert, no download queue entry.
  • Settings → Blocked Songs viewer lists blocked tracks with per-row
    Unblock. Reactive count badge on the Settings row.

Delete dialogs:

  • Home playlist-delete: "Also block these songs from future syncs"
    checkbox + protected-count preview.
  • PlaylistDetail single-track delete: same dialog + checkbox pattern.
  • Snackbar summary after the cascade so users know what happened.

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.7...v0.3.8