Commit Graph

138 Commits

Author SHA1 Message Date
cyqsimon
9771c36c7b More detailed error message in case of command parse error (#684)
* 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
2022-01-01 20:48:34 +01:00
Henrik Friedrichsen
74b4e65b64 Refactor: move playable models to separate module 2021-11-08 20:44:21 +01:00
Henrik Friedrichsen
96f2d88696 Update to rspotify 0.11.2 (#640)
* Update to rspotify 0.11.x

Many breaking changes

* Minor cleanups via Clippy
2021-11-07 17:19:56 +01:00
Henrik Friedrichsen
0c69e991b8 Upgrade to librespot 0.3.0
- logarithmic volume conversion is now done by librespot
- use default normalisation threshold
2021-10-14 23:41:00 +02:00
Henrik Friedrichsen
faad362f55 Refactor: separate Spotify API from player logic
The separation is not perfect yet, but it's a start and makes the entire codebase much easier to read.
2021-08-23 22:15:54 +02:00
Henrik Friedrichsen
6b8e1d33dc Code cleanups 2021-08-15 15:05:49 +02:00
Henrik Friedrichsen
0d405cf221 Print Spotify connection message only once
To avoid the terminal output getting garbled when ncspot is reconnecting
2021-05-24 21:03:25 +02:00
Henrik Friedrichsen
b7ab1202b8 Clear worker channel when worker has died
Should prevent panic in `Spotify::send_worker()`
2021-05-24 19:57:46 +02:00
Ronak Buch
c989909b07 Explicitly set default normalisation threshold for librespot
The normalisation threshold should be in ratio space, but the default
value is specified in dB space, so using it as the default implicitly
without passing it through the db_to_ratio function causes distortion
and clipping when normalisation is enabled.
2021-05-14 03:28:11 +02:00
Henrik Friedrichsen
8fb854dea6 Cargo format 2021-05-10 22:18:03 +02:00
Henrik Friedrichsen
5fd93c33cb Add audio_cache_size to set maximum cache size 2021-05-07 23:14:26 +02:00
Henrik Friedrichsen
f6a895e160 Update to librespot 0.2.0 and Tokio v1
This also brings some much need async/.await rewrites
2021-05-07 22:51:32 +02:00
Henrik Friedrichsen
71d42d489e Remove extern crate statements
https://doc.rust-lang.org/edition-guide/rust-2018/module-system/path-clarity.html
2021-05-07 22:51:32 +02:00
Henrik Friedrichsen
98e572169b Implement track preloading
Will preload the next track close to the end of the currently playing
track. Should make playback of queued tracks a little smoother.
2021-04-11 15:54:32 +02:00
Henrik Friedrichsen
decf7c2aef Improve synchronization of playback times
Take librespot timestamps instead of approximating them in ncspot.
2021-04-11 15:17:10 +02:00
Henrik Friedrichsen
cea5228245 (Re)store currently playing track + shuffle state
Solves #448
2021-04-09 19:10:34 +02:00
Henrik Friedrichsen
0f8e4d0558 Use new pagination interface for podcast episodes 2021-04-08 16:49:19 +02:00
Henrik Friedrichsen
53db188153 Use new pagination interface for playlist tracks 2021-04-06 17:45:14 +02:00
Henrik Friedrichsen
67aa5b2bad Use new pagination interface for user playlists 2021-04-06 16:20:38 +02:00
Henrik Friedrichsen
02921752e1 Use new pagination interface for artist albums
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
2021-04-06 15:02:19 +02:00
Henrik Friedrichsen
0f573f8247 Refactor: Make Spotify cloneable 2021-04-03 22:35:08 +02:00
Henrik Friedrichsen
8483653cde Refactor: extract Spotify Worker to separate file 2021-04-03 21:38:42 +02:00
Henrik Friedrichsen
a0231362f1 implement logout command
fixes #470
2021-03-22 21:56:50 +01:00
Qluxzz
46899ace8b Replace all .filter.map chains with .filter_map 2021-03-16 20:41:13 +01:00
Henrik Friedrichsen
f2bcfcaa60 fix: more resilient playlist track deletion
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.
2021-03-05 23:34:29 +01:00
Qluxzz
3d11b2c333 Fix spelling mistake 2021-03-05 21:54:15 +01:00
algon
dfb60ee4be Improve album loading in artist view (#446)
* Load all albums in artist view

* Fetch multiple albums at a time
2021-02-25 21:24:10 +01:00
Henrik Friedrichsen
a880ffd1f6 Persist volume and shuffle/repeat state 2021-02-22 22:14:34 +01:00
Qluxzz
bca84658fb Fix not handling changed event 2021-01-20 20:49:09 +01:00
André Andersson
92335594bc Restart queue if pressing play when stopped (#399)
* Restart queue if pressing play when stopped

* Remove FinishedTrack from match

* Formatting
2021-01-19 21:47:41 +01:00
André Andersson
ed0c62a888 Add support for open.spotify.com links (#392)
* No longer necessary

* Add support for open.spotify.com links

* Reuse struct for insert command

* Formatting
2021-01-17 20:12:07 +01:00
Henrik Friedrichsen
9afad2d91c cargo fmt/clippy 2021-01-10 01:54:54 +01:00
Qluxzz
68e51f263d Replace from_str with parse 2021-01-08 09:52:27 +01:00
Qluxzz
9447b33684 Fix not setting country correctly 2021-01-08 09:52:27 +01:00
Qluxzz
9bc98f70fd Expose gapless playback config option 2021-01-08 09:40:50 +01:00
Henrik Friedrichsen
3874dc42f8 cargo clippy 2021-01-02 21:30:52 +01:00
Henrik Friedrichsen
d8417664fd show connection message instead of blank screen 2020-11-21 15:52:39 +01:00
Henrik Friedrichsen
880fbb3f6e fix: don't try to play tracks without spotify id
Can happen when a playlist is queued that contains tracks removed from the
Spotify catalogue.

fixes #321
2020-11-16 22:21:27 +01:00
Bettehem
a8861fc1aa Spotify URL support for MPRIS OpenUri function (#314)
* Added OpenUri D-BUS MPRIS support.
Removed "user:" from URIType check because Spotify doesn't always provide it.

* Added tags to .gitignore

* Changed mpris metadata to actually return the track's url instead of the Spotify URI so that it matches the functionality of the official Spotify client.

* Changed mpris:trackid and xesam:url to not use static naming so it can support podcasts.

* Changed xesam:url to default to an empty string instead of "0"

* Added possibility to start playing Shows and Episodes via MPRIS.
Added possibility to search for Podcast Episodes.

* Fixed mpris:trackid not returning the id in the correct format.
MPRIS OpenUri function now supports Spotify url links.

* return result directly instead of mut string

* handle artist URLs/URIs

Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
2020-11-10 20:18:22 +01:00
Henrik Friedrichsen
79a3d0ca8a add recommendations/similar tracks feature
fixes #186
2020-10-18 17:41:18 +02:00
Henrik Friedrichsen
013beb245b refactor: pass globally mutable config reference
Before, copies of the configuration were passed over. This change also
causes configuration reloads to affect the entire application and is
easier to maintain but introduces some RwLock overhead.
2020-10-18 13:09:45 +02:00
Henrik Friedrichsen
f3c66111a2 cargo clippy 2020-10-10 20:47:12 +02:00
Henrik Friedrichsen
98914f27e1 fix: load more tracks if album has more than 50
fixes #281
2020-10-09 20:22:15 +02:00
Moshe Sherman
fc79889665 play next (#278)
* add play next feature

* fix play_next insertion order

* fix play_next call for playable

* document play_next shortcut + reformat

Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
2020-10-04 16:58:55 +02:00
eulerfan271
9e970f5799 Added config option for bitrate (#270)
* added config option for bitrate

* updated README.md to include bitrate config options
2020-09-22 17:01:56 +02:00
Henrik Friedrichsen
6f7b64c908 cargo clippy 2020-08-23 21:00:29 +02:00
Henrik Friedrichsen
e5bc12b1ba use cfg of spotify object
TODO:
- apply this to other single config values that are passed directly, e.g. in the
  statusbar
- use a more appropriate object to hold `cfg`
2020-08-18 23:06:41 +02:00
Henrik Friedrichsen
8d8c79616c cargo fmt 2020-07-31 22:23:03 +02:00
Bettehem
413703a310 Podcast support improvements. (#229)
* Added OpenUri D-BUS MPRIS support.
Removed "user:" from URIType check because Spotify doesn't always provide it.

* Added tags to .gitignore

* Changed mpris metadata to actually return the track's url instead of the Spotify URI so that it matches the functionality of the official Spotify client.

* Changed mpris:trackid and xesam:url to not use static naming so it can support podcasts.

* Changed xesam:url to default to an empty string instead of "0"

* Added possibility to start playing Shows and Episodes via MPRIS.
Added possibility to search for Podcast Episodes.
2020-07-26 11:29:43 +02:00
Henrik Friedrichsen
9adab923d5 update to librespot 0.1.2
- make use of new player events
- remove `--locked` install note as it should not be required anymore (#179, #190, #212)
- `cargo update` dependencies
2020-07-23 01:04:18 +02:00