<?sphp $this->text('pagetitle') ?>
 
Home of the Squeezebox™ & Transporter® network music players.

Playlist Mode Party Mode

From SqueezeboxWiki

Revision as of 08:31, 23 June 2010 by Soulkeeper (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
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.

PlaylistMode.png

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

PartyMode.png

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?