* Refactored `command::parse`
* Removed unnecessary duplication in error msg
* Renamed `NotEnoughArgs` -> `InsufficientArgs`
* Inaccurate var name
* Ditch wordy error prefix
* Use `split_whitespace` instead of regex
* Cleanup unused regex import
* `insert` cmd fails fast
* Refactor: use `and_then` instead of `unwrap`
* Updated `Command::to_string`
* Added `Command::basename`
* Better err msg when running cmd in unsupported view, fully closes#597
* Sort `match` branches by their order in the enum
With the migration to rspotify 0.11.x playlists were changed to be a list of `Playable`
instead of `Track` items, so that playlists can contain podcast episodes.
This needs to be considered when collecting all tracks for playback in `ListView`.
Should help with #667
* Add command to show recommendations.
This adds a command `similar selected|current` which enables searching for
track recommendations for playlists, albums as well as single tracks.
* Make sure to only send 5 seed items in total.
* Add docs for recommendation bindings to the README
Brings along some other changes:
- Split artist albums/singles into separate panel
- Paginate artist albums/singles
- Play top tracks by artist instead of all tracks by artist
Fixes#477
Introduction of the sort command with #328 broke the deletion of playlist items,
because sorted track indices got out of sync with their actual index within the
playlist at the Spotify backend.
The new approach is not perfect, as it doesn't update the list index of items
after deletion, but by supplying the playlist snapshot id the backend is able to
apply the requested changes.
This should still be improved in the future, though.
* Fixed regex for handling links via ctrl+v shortcut.
Fixed the whole url getting passed to get data on each link type instead of only the id.
Fixed MPRIS OpenUri function not handling an user&id in the link correctly.
* feat: add insert command to paste spotify links
- use Ctrl-v to paste from clipboard or use :insert without an argument
* fix: handle paste on disabled clipboard feature
* fix: handle wrong URIs
Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
* implement search for shows/podcasts
* create Playable supertype for queue to contain tracks and episodes
* wip: implement playback of episodes
* load spotify id from uri instead of raw id to fix podcast playback
* show duration for podcast episodes
* implement generic status bar for playables (tracks and episodes)
omit saved indicator for now as the library does not yet support podcasts
* instead of only the last 50 fetch all episodes of a show
* refactor: extract Playable code to separate file
* implement playback/queuing of shows + sharing url
* implement podcast library
* migrate mpris code to Playable supertype
* wip: add methods and api usage to delete track from playlist
* enh: add ability to remove track from playlist with immediate visual feedback
* minor cosmetic changes
Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
This patch adds a 'MoveAmount' enum that permits movements by integer
values or to abstract extremes which loosely translate to "top" for up
direction, "bottom" for down direction, etc. The goal behind the effort
is to add support for buttons like "Home" and "End".
The new enum has a 'Default' impl that yields a value of integer
movement by 1 field. This replaces the previous 'Option' wrap, that
in fact served the same purpose, with the value of '1' scattered
around different places in code.
Along with the enum, new commands have been defined to make use of it:
- "move top"
- "move bottom"
- "move leftmost"
- "move rightmost"
Starting a playlist, album or artist with shuffle enabled always
starts on the first track in it and then plays the rest of the
queue shuffled.
This changes it so unless a track is picked directly, playback
will start on a random track of the selection.