* chore(deps): `cargo update`
* chore: update to Rust edition 2024 and apply fixes
Update the Rust edition and apply changes required in the new edition.
Also update the Cargo manifests to reflect the edition change, and
ensure changes automatically apply to workspace members in the future.
* chore: format all code with `rustfmt`
The new Rust edition comes with some new formatting defaults, which need
to be applied since the edition was increased.
* style: change suggested matches back to `if let`
There has been a breaking change in Rust edition 2024 that changed the
behavior of `if let` statements slightly. The new behavior is more in
line with what users would expect, but could lead to problems in
existing code. The automatic edition update therefore changed such `if
let` statements to match statements instead. That lead to deeply nested
code which was hard to reason about.
This changes most of them back to regular `if let` chains, as the new
behavior shouldn't cause problems for these cases.
---------
Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
The `lazy_static` crate was superseded by the `once_cell` crate which
has been included in Rust's standard library since version `1.70`.
Remove the `lazy_static` dependency and refactor all use cases to use
`std::sync::OnceLock` instead.
Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
Clippy's `use_self` line ensures that `Self` is used instead of the real
name whenever possible. This makes searching easier and cleans up the
code a bit.
* Add command for adding song to playlist
* edits for code style
* Return playlist dialog via `CommandResult::Modal`
---------
Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
* commands: Adding "disconnect" command to force socket shutdown
* Rename to `reconnect`
* Add documentation to README
Related to: #628#1033
---------
Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
* 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
* auto generate table of contents
* cspell check
* Added `single` alias to repeat mode `track`
* Updated command documentation
* Reformat command table
Removed the "alias" column since it takes up too much space.
* 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
* feat: create new empty playlist via command
- type :newplaylist <name> to create a new playlist
fixes#242
* use full argument string for playlist name
Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
* Increase/Decrease volume by 5
* Fixed static value
* use fallback value in case parsing fails
fixes#282
Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
* 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>
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"