Playlist Mode Party Mode
From SqueezeboxWiki
Playlist and Party Mode have been removed from Squeezebox Server version 7.4 because of conflicts with the new press-to-play behavior. This is an unfortunate regression but this feature never emerged from beta status and we're hoping to do a much better baked solution in future releases, hopefully as early as 7.5
In a Nutshell...Behavior of Playlist Mode:
- Play button acts as an "add next" button
- Ignore SC server setting to play remaining tracks in an album
Behavior of Party Mode:
- All features of Playlist Mode, plus:
- Play button for non-tracks (artists/albums/years/genres) drills into the track listing for that item
- Remove "Play All" menu item from track listing menus
Contents |
Background
Party Mode is a feature that has generated BOATLOADS of discussion. There are wide-ranging and diverse opinions on how this should function. The ideas range from the simple to the wildly complicated, and are often in conflict with one another.
Dean and I had a long discussion on this, and we made a spec for the way forward. The first part is to create a new "mode" called Playlist Mode that will by dynamically invoked whenever anyone hits add on a track. Playlist Mode fixes the core complaint, destruction of playlists when the play button is pressed. Party mode, a configurable advanced setting, starts with Playlist mode and adds some extra features, for example disabling the ability to add non-tracks (artists/albums/genres/years/etc) to a playlist with a single click.
High-level (user perspective) and low-level (code implementation) discussion of the two modes are discussed below.
High-Level Spec (for the end user)
Playlist Mode
Behavior of Playlist Mode:
- Play button acts as an "add next" button
- Ignore SC server setting to play remaining tracks in an album
Invoking Playlist Mode
Playlist mode is entered whenever the user hits the ADD (+) key on a playable item. It can also be invoked by going into Settings->Advanced->Playlist Mode and toggling Playlist Mode to on.
djb: I propose that we don't add this as a setting unless the user has turned it on with the ADD button. i.e. it's always a Turn Off Playlist Mode setting.
bk: on this point I disagree. I want to be able to select playlist mode as being a choice item: disabled/on/off/party. As this is the only way to select party mode, I don't see it being an issue having the setting always there. Also, there is a difference between playlist being "off" (still will turn on dynamically when add is hit on a playable item), and "disabled" (never turns on, aka legacy behavior).
Controller UI support
It's critical that the user gets feedback to let them know that they are in playlist mode.
This indication is in the Iconbar. Since there's no remaining real estate on the iconbar, it occupies the space where the repeat icon normally resides. When playlist mode is not on, the repeat icon (if any) comes back.
Also, there are showBriefly messages when entering/exiting playlist or party mode.
Finally, the normal pop-up/show-briefly messages will continue to display the current effect of PLAY or ADD presses on the playlist.
Other UIs
Playlist Mode is supported in the PlayerUI (IR remote, softsqueeze), but not the WebUI (web browser).
Getting out of Playlist Mode
- Pressing add-hold when in playlist mode (add-hold will not execute the add-next command)
- Clearing or saving a playlist
- Through Settings->Advanced->Playlist Mode and toggling mode to off (or disabling the feature entirely)
- Turning off the player
User Settings
User settings allow for four settings
- playlist mode disabled (will never enable)
- playlist mode off (will dynamically enable when hitting add on any playable item)
- playlist mode on
- party mode on
Party Mode
Behavior of Party Mode:
- All features of Playlist Mode, plus:
- Play button for non-tracks (artists/albums/years/genres) drills into the track listing for that item
- Remove "Play All" menu item from track listing menus
Invoking Party Mode
Party mode is executed when Settings->Advanced->Party Mode is set to enabled.
Controller UI support
An icon appears in the iconbar (Martini, anyone?) that goes in the same spot the Playlist Mode icon sits
ShowBriefly appears when entering party mode
Other UIs
Party Mode is supported in the PlayerUI (IR remote, softsqueeze), but not the WebUI (web browser)
Getting out of Party Mode
The only way to exit party mode is
- controller UI: Settings->Advanced->Playlist Mode
- player UI: Settings->Playlist Mode
and set it to something other than party mode
User Settings
First version of Party mode will only have On/Off as a setting, and enabled through the same setting as playlist mode.
User settings allow for four settings
- playlist mode disabled (will never enable)
- playlist mode off (will dynamically enable when hitting add on any playable item)
- playlist mode on
- party mode on
The intent is to make Party Mode open to expansion though, so it could be that settings could contain other options, e.g., password protecting the setting, disable other keys (pause/ffwd/volume), disabling adding anything but local tunes, the list goes on (and on).
Low-Level Spec (for the developer)
Playlist Mode
Playlist mode is managed by a client (per player) preference, playlistmode. (Slim::Player::Client)
four possible settings for playlist mode, stored as a string:
- disabled
- off
- on
- party
The current state can be retrieved and set through Slim::Player::Playlist::playlistMode().
djb: we already track the state of a loaded playlist (and whether it's been modified, should these internal variables to be merged with this?
bk: IMO, no.
Invoking Playlist Mode
Slim::Player::Playlist::playlistMode($client, 'on');
Controller UI support
Needs a graphical asset for Iconbar to show if playlistmode is currently active (Jive side, jive.slim.Player, jive.Iconbar). There is currently a placeholder icon for this.
Send current playlistmode preference in playerstatus update so Iconbar can be updated accordingly (Slim::Control::Queries)
Player UI support
Players with the Classic UI will not show an icon indicating that Playlist Mode is turned on, but will react to ADD/PLAY as indicated above.
ShowBrieflies will appear on the playerUI when playlist/party mode turns on/off and is disabled.
Getting out of Playlist Mode
Slim::Player::Playlist::playlistMode($client, 'off');
User Settings
- playerUI handled in Slim::Buttons::Settings
- jiveUI handled on SC side at Slim::Control::Jive
- pref is set using Slim::Player::Playlist::playlistMode
Party Mode
Invoking Party Mode
Slim::Control::Jive::buildCaches is an issue because Party Mode needs to redefine some of the button handlers defined in artistsQuery() and albumsQuery(). Because buildCaches is run at SC startup, by necessity it is not a function that can use $client.
Party mode is a client pref so the buildCaches subroutine now stores a second set of query results for "partymode on", and have jive formats the artists/albums cli command to tell SC which cache to pull from.
Controller UI support
Needs a graphical asset (PARTY HAT!) for Iconbar to show if partymode is currently active (Jive side, jive.slim.Player, jive.Iconbar). There is a placeholder icon there for the interim.
Send current partymode preference in playerstatus update so Iconbar can be updated accordingly (Slim::Control::Queries)
SC stores a second set of cached queries for albumsQuery and artistsQuery with correct button mapping for play in party mode.
Getting out of Party Mode
Slim::Player::Playlist::playlistMode($client, '<disabled|off|on>');
the only way to get out of (or into) party mode is through settings.
User Settings
for controllerUI, Slim::Control::Jive::playlistModeSettings
for playerUI, Slim::Buttons::Settings
Notes and Unresolved Issues
- Should the default be 'disabled' or 'off'? (note: svn change 23928 sets the default to 'disabled')
- Behavior with XML browse items (Pandora, Rhapsody, etc.)? This is also not necessarily one answer: Playlists can have intermixed local and Rhapsody tracks, but e.g. Pandora and Slacker force the current playlist to be "one item". Perhaps Rhapsody should be allowed but Pandora and Slacker should not...
- How to handle adding Radio streams to the playlist?
- What to do when shuffle is on?
- Look into PlayerUI function of showing the playlist title and it's current "state" (e.g., changed, needs saving)
- Play button more or less maps to what is typically add-hold button behavior. This means that if the player isn't currently playing and you hit the play button on an item when in playlist mode, it adds that item to next in the list but does not begin immediate playback. That seems not correct.
- Is dynamic invocation of playlist mode too confusing to customers?
- Is it too confusing having two modes?
- Should the random mix items be dynamically removed when in these modes?
- Should you be able to turn off the player when in party mode?
- Should repeat playlist be enabled when entering either of these modes?
- Should this have been done as a SC plugin?