/
/
# What does this implement/fix? Follow-up to #5880. Skipping/seeking a live audio source behaved differently depending on which API a client used: the player commands (`players/cmd/next` etc.) forwarded next/previous/seek to the owning plugin, while the queue commands (`player_queues/next` etc.) only did so for sources that own the whole queue (Spotify Connect) and otherwise walked the MA queue index. So pressing next on e.g. a Yandex Ynison session worked from one API and did nothing useful from the other. The queue controller now delegates next/previous/seek based on the source's own capability flags, so both APIs behave the same, and the duplicated player-layer proxy is removed. - `player_queues` next/previous/seek now forward to the owning plugin for any live source that supports them (not only queue-owning sessions); shuffle/repeat delegation is unchanged - removed the duplicated AudioSource proxy blocks from the player commands — they always hand off to the queue controller - extracted the duplicated source-resolution logic from both controllers into a shared helper - AriaCast: a remote's next/previous is now relayed directly to the casting sender (excluding the client that sent it) instead of going through the queue controller, which would bounce the command back into the plugin after this change; reply/ack payloads are no longer parsed as commands - updated the `on_source_control` provider contract docs to match the new dispatch split - added tests for the transport delegation matrix and the AriaCast relay **Related issue (if applicable):** - related issue N/A ## Types of changes <!-- Tick exactly one box. CI (.github/workflows/pr-labels.yaml) derives the label from the ticked box and applies it automatically; the release-notes generator uses that same label to slot this change into the next release notes. --> - [ ] Bugfix (non-breaking change which fixes an issue) — `bugfix` - [ ] New feature (non-breaking change which adds functionality) — `new-feature` - [ ] Enhancement to an existing feature — `enhancement` - [ ] New music/player/metadata/plugin provider — `new-provider` - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) — `breaking-change` - [ ] Refactor (no behaviour change) — `refactor` - [ ] Documentation only — `documentation` - [x] Maintenance / chore — `maintenance` - [ ] CI / workflow change — `ci` - [ ] Dependencies bump — `dependencies` ## Checklist - [x] The code change is tested and works locally. - [x] `pre-commit run --all-files` passes. - [x] `pytest` passes, and tests have been added/updated under `tests/` where applicable. - [ ] For changes to shared models, the companion PR in `music-assistant/models` is linked. - [ ] For changes affecting the UI, the companion PR in `music-assistant/frontend` is linked. - [x] I have read and complied with the project's [AI Policy](https://github.com/music-assistant/.github/blob/main/AI_POLICY.md) for any AI-assisted contributions. - [ ] I have [raised a PR against the documentation repository](https://github.com/music-assistant/music-assistant.io/blob/main/CONTRIBUTING.md) targeting the main or beta branch as appropriate.