* connect: add shuffle_vec.rs
* connect: shuffle in place
* add shuffle with seed option
* reduce complexity to add new metadata fields
* add context index to metadata
* use seed for shuffle
When losing the connection and restarting the dealer, the seed is now stored in the context metadata. So on transfer we can pickup the seed again and shuffle the context as it was previously
* add log for shuffle seed
* connect: use small_rng, derive Default
* Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* connect: simplify `handle_command` for SpircCommand
* connect: simplify `handle_player_event`
* connect: `handle_player_event` update log entries
* connect: set `playback_speed` according to player state
* connect: reduce/group state updates by delaying them slightly
* connect: load entire context at once
* connect: use is_playing from connect_state
* connect: move `ResolveContext` in own file
* connect: handle metadata correct
* connect: resolve context rework
- resolved contexts independently, by that we don't block our main loop
- move resolve logic into own file
- polish handling for play and transfer
* connect: rework aftermath
* general logging and comment fixups
* connect: fix incorrect stopping
* connect: always handle player seek event
* connect: adjust behavior
- rename `handle_context` to `handle_next_context`
- disconnect should only pause the playback
- find_next should not exceed queue length
* fix typo and `find_next`
* connect: fixes for context and transfer
- fix context_metadata and restriction incorrect reset
- do some state updates earlier
- add more logging
* revert removal of state setup
* `clear_next_tracks` should never clear queued items
just mimics official client behavior
* connect: make `playing_track` optional and handle it correctly
* connect: adjust finish of context resolving
* connect: set track position when shuffling
* example: adjust to model change
* connect: remove duplicate track
* connect: provide all recently played tracks to autoplay request
- removes previously added workaround
* connect: apply review suggestions
- use drain instead of for with pop
- use for instead of loop
- use or_else instead of match
- use Self::Error instead of the value
- free memory for metadata and restrictions
* connect: impl trait for player context
* connect: fix incorrect playing and paused
* connect: apply options as official clients
* protocol: move trait impls into impl_trait mod