[GH-ISSUE #19] Shuffle/Repeat buttons are not fully functional. #8

Closed
opened 2026-02-27 19:28:15 +03:00 by kerem · 16 comments
Owner

Originally created by @mrwsl on GitHub (Jan 29, 2018).
Original GitHub issue: https://github.com/librespot-org/librespot/issues/19

Originally assigned to: @roderickvd, @kingosticks on GitHub.

Good to see you guys keep this project alive!

Basically copy/paste from plietar's repo issue #82

Originally created by @mrwsl on GitHub (Jan 29, 2018). Original GitHub issue: https://github.com/librespot-org/librespot/issues/19 Originally assigned to: @roderickvd, @kingosticks on GitHub. Good to see you guys keep this project alive! Basically copy/paste from [plietar's repo issue #82](https://github.com/plietar/librespot/issues/82)
kerem 2026-02-27 19:28:15 +03:00
Author
Owner

@ComlOnline commented on GitHub (Jan 29, 2018):

Just so you know the shuffle and repeat from @kingosticks was added in #2, I know there are still some things to fix so I'll keep this open:

See his comments here and here.

<!-- gh-comment-id:361229768 --> @ComlOnline commented on GitHub (Jan 29, 2018): Just so you know the shuffle and repeat from @kingosticks was added in #2, I know there are still some things to fix so I'll keep this open: See his comments [here](https://github.com/plietar/librespot/issues/82#issuecomment-349741285) and [here](https://github.com/librespot-org/librespot/pull/2#commitcomment-25654241).
Author
Owner

@kingosticks commented on GitHub (Jan 29, 2018):

Unfortunately it's only half done, if you disable shuffle it doesn't go back to the original track order like the official client does. I can't work out an elegant way to solve this, my only idea is to make another copy of the tracklist and restore that when shuffle is disabled

An update in regards to the above. It's become obvious this isn't a good idea as librespot may have never seen a non-shuffled version of the tracklist (e.g. a mobile client shuffled the tracklist whilst disconnected from the network). Re-fetching the tracks from the context uri is simplest. You just have to ensure you save the queued tracks before doing so as they are not part of the context and would otherwise be lost. I think the official Android client has a bug here as if you enable/disable shuffle a few times in a row you sometimes suddenly lose the queued tracks.

<!-- gh-comment-id:361237107 --> @kingosticks commented on GitHub (Jan 29, 2018): > Unfortunately it's only half done, if you disable shuffle it doesn't go back to the original track order like the official client does. I can't work out an elegant way to solve this, my only idea is to make another copy of the tracklist and restore that when shuffle is disabled An update in regards to the above. It's become obvious this isn't a good idea as librespot may have never seen a non-shuffled version of the tracklist (e.g. a mobile client shuffled the tracklist whilst disconnected from the network). Re-fetching the tracks from the context uri is simplest. You just have to ensure you save the queued tracks before doing so as they are not part of the context and would otherwise be lost. I think the official Android client has a bug here as if you enable/disable shuffle a few times in a row you sometimes suddenly lose the queued tracks.
Author
Owner

@kingosticks commented on GitHub (Mar 20, 2019):

The different repeat modes (single vs all) is still covered by this issue but the remaining shuffle part of this is superseded by https://github.com/librespot-org/librespot/issues/264

<!-- gh-comment-id:474791346 --> @kingosticks commented on GitHub (Mar 20, 2019): The different repeat modes (single vs all) is still covered by this issue but the remaining shuffle part of this is superseded by https://github.com/librespot-org/librespot/issues/264
Author
Owner

@louy2 commented on GitHub (Apr 3, 2020):

Running into this, cannot repeat a single track. Anything I can help with?

<!-- gh-comment-id:608273538 --> @louy2 commented on GitHub (Apr 3, 2020): Running into this, cannot repeat a single track. Anything I can help with?
Author
Owner

@roderickvd commented on GitHub (Aug 7, 2021):

Will be tackling this under new-api efforts.

<!-- gh-comment-id:894703719 --> @roderickvd commented on GitHub (Aug 7, 2021): Will be tackling this under `new-api` efforts.
Author
Owner

@sewnie commented on GitHub (Mar 13, 2022):

Status?

<!-- gh-comment-id:1066083389 --> @sewnie commented on GitHub (Mar 13, 2022): Status?
Author
Owner

@roderickvd commented on GitHub (Mar 13, 2022):

Same.

<!-- gh-comment-id:1066085202 --> @roderickvd commented on GitHub (Mar 13, 2022): Same.
Author
Owner

@ghost commented on GitHub (Apr 30, 2022):

Status?

<!-- gh-comment-id:1114044820 --> @ghost commented on GitHub (Apr 30, 2022): Status?
Author
Owner

@roderickvd commented on GitHub (Apr 30, 2022):

Come on.

<!-- gh-comment-id:1114048795 --> @roderickvd commented on GitHub (Apr 30, 2022): Come on.
Author
Owner

@xsolvia commented on GitHub (May 8, 2022):

would like to see this happen as well.

<!-- gh-comment-id:1120485089 --> @xsolvia commented on GitHub (May 8, 2022): would like to see this happen as well.
Author
Owner

@ghost commented on GitHub (Aug 15, 2022):

In hindsight I should likely apologize as I came into this discussion section with frustration and confusion. I have no intention of rushing your development or forcing you to tunnel vision on just the repeat function. It's actually not that big of a deal in my life, Spotify. Continue focusing on what's important and spotifyd will be everything you're seeing ahead. Best of luck to you.

<!-- gh-comment-id:1215409812 --> @ghost commented on GitHub (Aug 15, 2022): In hindsight I should likely apologize as I came into this discussion section with frustration and confusion. I have no intention of rushing your development or forcing you to tunnel vision on just the repeat function. It's actually not that big of a deal in my life, Spotify. Continue focusing on what's important and spotifyd will be everything you're seeing ahead. Best of luck to you.
Author
Owner

@roderickvd commented on GitHub (Sep 30, 2022):

Reporting back after some time: with the current spirc we have no way of indicating that we support single repeat mode, so the client doesn't offer it. Maybe it will be possible when we start publishing our device capabilities on HTTPS, which is targeted for v0.5. Otherwise it will require the dealer interface which will certainly have to wait until v0.6.

<!-- gh-comment-id:1263968137 --> @roderickvd commented on GitHub (Sep 30, 2022): Reporting back after some time: with the current `spirc` we have no way of indicating that we support single repeat mode, so the client doesn't offer it. Maybe it will be possible when we start publishing our device capabilities on HTTPS, which is targeted for v0.5. Otherwise it will require the `dealer` interface which will certainly have to wait until v0.6.
Author
Owner

@arch-btw commented on GitHub (Nov 27, 2022):

Running into this, cannot repeat a single track. Anything I can help with?

For anyone facing this issue, the repeat single track option works with librespot-java, this might be a temporary solution until this gets fixed in the Rust version 👍

<!-- gh-comment-id:1328159515 --> @arch-btw commented on GitHub (Nov 27, 2022): > Running into this, cannot repeat a single track. Anything I can help with? For anyone facing this issue, the repeat single track option works with **librespot-java**, this might be a temporary solution until this gets fixed in the Rust version 👍
Author
Owner

@sewnie commented on GitHub (Nov 27, 2022):

i would rather live with the proprietary spotify client than to have to use that

<!-- gh-comment-id:1328183299 --> @sewnie commented on GitHub (Nov 27, 2022): i would rather live with the proprietary spotify client than to have to use that
Author
Owner

@kinkard commented on GitHub (Jan 11, 2024):

@roderickvd Can you elaborate a bit about the dealer interface or link some reference about it?
The "repeat one" functionality is quite important for my use case and I want to try to dig into this topic.

<!-- gh-comment-id:1887983806 --> @kinkard commented on GitHub (Jan 11, 2024): @roderickvd Can you elaborate a bit about the `dealer` interface or link some reference about it? The "repeat one" functionality is quite important for my use case and I want to try to dig into this topic.
Author
Owner

@roderickvd commented on GitHub (Jan 13, 2024):

librespot-java has implemented it. Basically it's a complete move away from Mercury-based spirc towards a web socket interface. One could port it from librespot-java: it requires major breaking (i.e. non-incremental) changes under the hood of librespot.

<!-- gh-comment-id:1890747176 --> @roderickvd commented on GitHub (Jan 13, 2024): `librespot-java` has implemented it. Basically it's a complete move away from Mercury-based `spirc` towards a web socket interface. One could port it from `librespot-java`: it requires major breaking (i.e. non-incremental) changes under the hood of `librespot`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/librespot#8
No description provided.