Allow playlist to be hidden
ClosedPublic

Authored by januz on Jul 1 2018, 10:56 PM.

Details

Summary

This patch adds an option to the main menu to hide/show the side playlist.
This was an often requested feature (and it also looks kind of cool).

Feature: 392781

Diff Detail

Repository
R255 Elisa
Branch
hide_playlist (branched from master)
Lint
No Linters Available
Unit
No Unit Test Coverage
Build Status
Buildable 542
Build 554: arc lint + arc unit
januz requested review of this revision.Jul 1 2018, 10:56 PM
januz created this revision.
januz edited the summary of this revision. (Show Details)Jul 1 2018, 11:00 PM
januz added reviewers: mgallien, astippich.
januz added a project: Elisa.
januz added a subscriber: ngraham.

There's one small thing left to do for this one: add a customizable shortcut. I couldn't figure out how to do it though, should I add the action in C++ to do that?

Very nice! You'll lure me away from Lollypop yet. :)

Couple of behavioral suggestions:

  • Use more specific language for the menu item (e.g. "Show Playlist" and "Hide Playlist")
  • Disable the menu item when Elisa is displaying a view without a playlist (e.g. Now Playing)
  • Allow the main window to be narrower when the Playlist is hidden (and if it's narrowed while the playlist is hidden, make it wider if the playlist is shown again)

And one formatting issue: let's do Feature: 392781 instead of BUG 392781, to help out the release team. :)

Works fine so far. I guess it is by design that the playlist is still visible when on the "Now playing" view?
I don't know if the main menu is the correct place for this. At least when add more options like this we should move all of these to the elisa configuration kcm.

There's one small thing left to do for this one: add a customizable shortcut. I couldn't figure out how to do it though, should I add the action in C++ to do that?

If you want to add a shortcut, have a look at e.g. https://phabricator.kde.org/R255:17edcbf3b1b6ca11f17d68332ba6a4353dac752e
Could also be in a following patch

januz edited the summary of this revision. (Show Details)Jul 4 2018, 12:36 AM
januz edited the summary of this revision. (Show Details)
januz added a comment.Jul 4 2018, 12:49 AM

Very nice! You'll lure me away from Lollypop yet. :)

Let's make that a milestone, "1.0 - We lured Nate away from Lollypop" :)

Works fine so far. I guess it is by design that the playlist is still visible when on the "Now playing" view?

Yup, what I understood from the original bug report is that Now Playing would become "where the playlist is". I've been using it like this for a while and it's not a bad workflow.

I don't know if the main menu is the correct place for this. At least when add more options like this we should move all of these to the elisa configuration kcm.

There's one small thing left to do for this one: add a customizable shortcut. I couldn't figure out how to do it though, should I add the action in C++ to do that?

If you want to add a shortcut, have a look at e.g. https://phabricator.kde.org/R255:17edcbf3b1b6ca11f17d68332ba6a4353dac752e
Could also be in a following patch

Awesome, I'll go over that and @ngraham suggestions over the weekend.

Since global playlist vs non-global-playlist seems to be cardinal UI design decision in music players, let me explain why I personally prefer the non-global-playlist approach:

I find that with a global playlist is only a benefit to me when I want to queue up specific several songs or albums in a specific order, but most of the time, that's not that I want to do. Instead, what I typically want is to navigate to a particular "view" (e.g. all artists albums within a certain genre; all albums by a specific artist; one particular album), then start playing a song within that view, and then have the music player move sequentially onto the next song and keep playing everything else visible. Once it reaches the end, it should loop around back to the beginning if the "Loop" feature is turned on. For music players with no global playlist, I find that this workflow almost always works. When there's a global playlist, I usually find that after the current song or album, the music player unexpectedly starts playing music by some other artist because I forgot to first clear the global playlist before playing the new thing. Even if I do remember to first clear the global playlist, the global playlist approach requires me to manually add the additional content that I want to play; the music player isn't smart enough to just continue playing what's visible until I tell it to stop or do something else.

Also, using the term "playlist" to mean "global play queue" overlaps the use of that term to mean "a user-defined list of music to play that was previously saved and can later be called up again."

Since global playlist vs non-global-playlist seems to be cardinal UI design decision in music players, let me explain why I personally prefer the non-global-playlist approach:

I find that with a global playlist is only a benefit to me when I want to queue up specific several songs or albums in a specific order, but most of the time, that's not that I want to do. Instead, what I typically want is to navigate to a particular "view" (e.g. all artists albums within a certain genre; all albums by a specific artist; one particular album), then start playing a song within that view, and then have the music player move sequentially onto the next song and keep playing everything else visible. Once it reaches the end, it should loop around back to the beginning if the "Loop" feature is turned on. For music players with no global playlist, I find that this workflow almost always works. When there's a global playlist, I usually find that after the current song or album, the music player unexpectedly starts playing music by some other artist because I forgot to first clear the global playlist before playing the new thing. Even if I do remember to first clear the global playlist, the global playlist approach requires me to manually add the additional content that I want to play; the music player isn't smart enough to just continue playing what's visible until I tell it to stop or do something else.

Also, using the term "playlist" to mean "global play queue" overlaps the use of that term to mean "a user-defined list of music to play that was previously saved and can later be called up again."

Even if personally I prefer the current workflow (inspired by the design work by Andrew Lake), I believe we can also easily support other workflows.
In order to have something matching your description, we need to have a shared "is playing" in all views. Without that, I think one can easily gets confused.
We also need to be very careful with the interface to not try to merge too much of those workflows in one UI. I think it would be probably better to have a global setting that would configure the whole application with either the current workflow or one with no explicit global queue. We really need to optimize them without trying to merge them into a bad compromise.

Agreed. Whether you want the global playlist visible is probably a pretty good indication of your preferred style. Perhaps when the global playlist is hidden we could also hide the Enqueue button and make the Replace and Play button just say "Play."

Agreed. Whether you want the global playlist visible is probably a pretty good indication of your preferred style. Perhaps when the global playlist is hidden we could also hide the Enqueue button and make the Replace and Play button just say "Play."

In the end, my point of view is really to separate what is different and share the other parts.
I would also like to have a collection manager at one point. That would share most of the code with the player but have an optimized specific interface.

januz added a comment.Jul 4 2018, 3:06 PM

I don't quite understand what you guys mean by a different workflow.

I downloaded Lollypop to try it out, but the workflow is almost the same as Elisa for me. There's a global playlist (in a popup), if you click the play button the playlist is cleared and replaced, and you can click the + button to enqueue.

(offtopic: I'm really digging those giant cover images)

Yes, unfortunately Lollypop recently added a global playlist and I've struggled to adapt to it. :/ I'm addicted to its auto-fetching lyrics display though.

januz updated this revision to Diff 37488.Jul 9 2018, 11:17 PM
januz edited the summary of this revision. (Show Details)
  • Make menu text contextual (show/hide)
  • Let window be smaller when playlist is disabled (up to 700px)
  • Disable menu action in Now Playing view
  • Add customizable shortcut for the action (wohoo, I figured it out! It's F9 by default)

Nice, that resolves all my nitpicks!

I don't quite understand what you guys mean by a different workflow.

I downloaded Lollypop to try it out, but the workflow is almost the same as Elisa for me. There's a global playlist (in a popup), if you click the play button the playlist is cleared and replaced, and you can click the + button to enqueue.

(offtopic: I'm really digging those giant cover images)

I do not know Lolypop very well. I meant players in general where you do not see an explicit global playlist but where you just play the music currently shown.
Some people kept asking for an iTunes like behavior. I also do not know it but I understood that it was optimized to work well without a global playlist.

Thanks for your work.

Can you fix one remaining issue and we should be good to go ?

src/qml/ElisaMainWindow.qml
60–63

This change is breaking the back navigation. Can you put it back ?

januz added a comment.Jul 11 2018, 3:46 PM

I don't quite understand what you guys mean by a different workflow.

I downloaded Lollypop to try it out, but the workflow is almost the same as Elisa for me. There's a global playlist (in a popup), if you click the play button the playlist is cleared and replaced, and you can click the + button to enqueue.

(offtopic: I'm really digging those giant cover images)

I do not know Lolypop very well. I meant players in general where you do not see an explicit global playlist but where you just play the music currently shown.
Some people kept asking for an iTunes like behavior. I also do not know it but I understood that it was optimized to work well without a global playlist.

I used to use iTunes when I ran os X several years ago. It has multiple playlists that get saved in the program, you pick the one you want to listen to from the list of playlists. You can play stuff straight from the library if it's a single album or song though, but if you want multiple songs/albums you have to make a new playlist.
The closest thing in Linux would be Audacious I think, it uses tabs for the different playlists.

mgallien requested changes to this revision.Jul 11 2018, 3:54 PM
This revision now requires changes to proceed.Jul 11 2018, 3:54 PM
januz updated this revision to Diff 37588.Jul 11 2018, 5:41 PM
januz marked an inline comment as done.

Bring back goBack action

januz added inline comments.Jul 11 2018, 5:41 PM
src/qml/ElisaMainWindow.qml
60–63

lol why did I delete that? Thanks for catching it

mgallien accepted this revision.Jul 11 2018, 6:58 PM

Thanks

This revision is now accepted and ready to land.Jul 11 2018, 6:58 PM
This revision was automatically updated to reflect the committed changes.