Feature description:
Add an “Available” or “Playable” rule to smart playlists filters that allows the user to create a playlist that has only playable songs.
From there (stretch but maybe in consequence), a smart playlist on the home screen should only show available or playable music, respecting source filter rules (“Hide non playable media” etc.). To reduce impact, each view should have an option to “respect source filters”.
Implementing the first should solve the 2nd issue immediately (users can still maintain existing behaviour by not adding the rule).
Problem solved:
Short part: while offline and online, I can pick a single random track in a playlist and it will always be playable, every time.
Short part 2: If I pick a track on a custom smart playlist on the home view while “hide non playable media” is on, I expect non playable media to be hidden.
I would like to make a playlist for “Top 50 EDM tracks” that is pulled from server and local. While I am online all 50 songs are visible and playable. When I am offline, it should only generate a playlist of the top 50 tracks that I can play while offline (cached or local).
The current “offline status” rule does not achieve this as “is not cached” does not mean it cannot be played as some tracks can be streamed. If I do “is cached”, songs that can only be streamed are not added.
Of course when source filters are applied, those songs are greyed out, which partially already solves that. But that leads to another issue.
When I am on the home screen and want to play something from my “Top 50” playlist, I know I can play them when I am online. But when I am offline, I turn on the source filter and it’s still there.
Example:
I"Most Played Tracks" view next to a “Most Played EDM Tracks” custom playlist views with both having some offline unplayable media included. When I turn on “Hide non playable media”, a bunch of tracks disappear from the first list, but the EDM list does not change.
From a glance, I would assume some of those tracks are playable, because it’s there. It’s a usability issue as there’s no reporting whether the track is playable or not, despite an option that is accessible that applies to pre-made views but not custom ones.
However, if using source filters as a solution, existing functionality will be broken as some people may use certain playlists for non-media purposes (e.g. viewing stats visually on what top 50 songs you have played, since the home view looks better than playlist view). Which is why I propose that second option as a cheaper implementation.
Brought benefits:
For building custom playlist views on the home screen, it allows users to ensure that their home screen contains meaningful tracks that can be interacted with. When I press on a track, it plays. When I press a track that cannot be played, it shouldn’t have been an interaction anyways.
Other application solutions:
This implementation idea is already implemented in the pre-made list views (Random Tracks, Most Played, Last Played Tracks, etc.) where if the user toggles “hide non-playable media” or “hide media not available online”. In this case, the user has more fine tune control as to maintain existing behaviour (unplayable media visible) or follow pre-made list behaviour (media visible is gone).
Additional description and context:
The grand plan though is maybe to eventually to lay down infrastructure where most elements on the home screen are actually playlists (or smart) that lets users customize the home screen more finely because you’ve done amazing work on the customizability and the smart playlists system that I think the possibility is there, just that the inconsistent behaviour between the two views tells me it’s not the same idea in the code.
Most designers already make their own playlists anyways to fulfil certain criteria for presenting tracks.
Screenshots / Mockup:
- No filters, top is pre-made / in-built. All 3 tracks are the same in both views, all are not playable.
- With “Hide Non Playable Media” turned on. The top are all playable, the bottom are not playable.
- Smart Playlist config


