plietar / librespot

Open Source Spotify client library
MIT License
1.14k stars 185 forks source link

pause after last track has finished #239

Open herrernst opened 7 years ago

herrernst commented 7 years ago

Currently, librespot plays endlessly: After the last track in a playlist/album it continues playing the first one.

This changes the behaviour to match the official Spotify client: The first track is loaded again, but the player is paused.

See #237

markubiak commented 7 years ago

+1 would really like to see this. @herrernst any way you could include this PR in your raspberry pi builds?

awiouy commented 7 years ago

What about adding this as a runtime option?

markubiak commented 7 years ago

I don't think it should be included as a runtime option. This is a good stopgap measure until someone gets the repeat button working.

herrernst commented 7 years ago

I also think this shouldn't be an extra option, but the repeat mode should be toggled/controlled with the Spotify app as raised in #237

markubiak commented 7 years ago

I would agree that that is the best possible option. Unfortunately, I do not have any experience with rust and it doesn't seem to share a lot of similarities with languages I am familiar with. If you have the time and energy to implement that, it would be fantastic. It does seem that the repeat status is received in protocol/src/spirc.rs, and the original file (src/spirc.rs) could simply have the logic self.load_track(!was_last_track || is_repeating);

kingosticks commented 7 years ago

So I had a go at integrating this with the connect side of things, my first stab at rust: https://github.com/plietar/librespot/compare/master...kingosticks:master

However, it's not quite there yet as it's missing the ability to repeat just one song which is available on the native client (you toggle repeat, repeat one, and off through the same control on the Android app). The repeat state is just a boolean so maybe there's a different bit of state to control repeat one (single?). Any ideas welcome.

I also wanted to do shuffle but doing the actual track shuffle is a bit more work.