Commit Graph

76 Commits

Author SHA1 Message Date
Thomas Frans
7940365344 refactor(library): various Rust style optimizations
Lots of small fixes to the APIs and functions in the `library` module,
mostly following best practices outlined in the Rust library guidelines.
Changes outside the `library` module were mostly required changes after
changing function signatures.
2024-01-29 21:58:01 +01:00
eulerfan271
a826115907 fix(mpris): can_go_previous should always be true (#1346)
* make can_go_previous always true

* can_go_previous whenever queue is non-empty

* docs: Update CHANGELOG

---------

Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
2023-12-09 11:51:17 +01:00
Thomas Frans
7a9c8f3a5e fix: allow any value to set MPRIS volume
This fixes a small inconsistency between the MPRIS implementation and
the specification. The specification allows any number when setting the
volume, which have to be clamped to the effectively allowed range in the
application.
https://specifications.freedesktop.org/mpris-spec/2.2/Player_Interface.html#Property:Volume
2023-12-01 16:17:00 +01:00
Thomas Frans
8d00ca74fc fix: MPRIS loop tokio::select!() panic on exit
This fixes a bug that would cause a panic when quiting the process
normally. `tokio::select!()` was used to await a single branch, which is
useless as it can be replaced by a normal await.
2023-10-14 12:42:24 +02:00
Thomas Frans
209d8e260b refactor: remove lazy_static crate
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>
2023-10-07 17:33:48 +02:00
Thomas Frans
b27b067a47 fix: prevent MPRIS D-Bus duplicate name
Append `instance<pid>` to the MPRIS bus name to prevent two instances
from fighting over the same bus name.
2023-10-03 17:29:37 +02:00
Thomas Frans
fe8f8e78ee style(clippy): enforce clippy use_self lint
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.
2023-09-27 22:06:54 +02:00
Thomas Frans
ae090b6073 refactor: move async runtime to application module
To have a clear distinction between code dealing with OS process
characteristics and code of ncspot itself, it makes sense to move the
async runtime together with ncspot as it doesn't have anything to do
with the OS process.
2023-06-02 23:20:24 +02:00
Henrik Friedrichsen
2771c319d6 Fix: gracefully handle invalid DBus setups
Some systems may have an ncspot binary with enabled MPRIS/DBus support, even
though DBus is not actually running on the system or the session is broken.

ncspot should not panic in such a situation, but handle gracefully instead.

Should help with #1139
2023-05-02 22:54:47 +02:00
Henrik Friedrichsen
d19d897e75 Fix: Restore previous Previous behavior (#1111)
* Fix: Restore previous `Previous` behavior

Fixes #1110
2023-04-04 14:54:32 +02:00
Henrik Friedrichsen
b0db0da3ef Rewrite MPRIS implementation using zbus (#1107)
* Rewrite MPRIS implementation using zbus

The initial DBus implementation was getting harder to maintain and `zbus` offers
some nice convenience features that should make our MPRIS implementation
cleaner.

For now this only implements the `org.mpris.MediaPlayer2` interface which does
not do much.

Should help with #1103

* Implement MPRIS properties

- `PlaybackStatus`
- `PlaybackRate`
- `Volume` (get/set)

* Implement remaining player properties/functions

* Emit signal for changed properties on track change
2023-04-01 21:53:37 +02:00
Henrik Friedrichsen
8222f1b2e4 Use variables directly inside format strings
Most systems should have an up to date Rust compiler by now, so we should be
fine.
2023-02-06 20:15:43 +01:00
Henrik Friedrichsen
93816af654 Linter fixes 2022-12-28 14:37:08 +01:00
Henrik Friedrichsen
0bbb4932e5 Clean up clippy warnings 2022-04-27 22:41:04 +02:00
Henrik Friedrichsen
68b3b9b510 Fix warnings 2022-01-09 21:39:14 +01:00
Bettehem
3808adced6 Fixed MPRIS OpenUri function not respecting ncspot's shuffle setting. 2021-12-01 21:17:39 +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
George Hafiz
49f2d40b44 Add userRating entity to mpris metadata, with 0 and 1 corresponding to unsaved/not-liked and saved/liked in Spotify, respectively. 2021-10-15 16:26:37 +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
19d87f6b8f Only fetch the full track if necessary
Previously the full track data would be fetched every time although the `Track`
object could already be based on a `FullTrack` object. This should reduce the
query count somewhat.
2021-08-15 14:52:16 +02:00
Henrik Friedrichsen
ad3383657d Fix: Show album art when playing 'similar tracks'
`SimplifiedTrack` objects don't contain a `cover_url`.
So fetch the whole track details in MPRIS handler to make sure the `cover_url`
is set.

Fixes #354
2021-07-26 21:37:53 +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
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
0f8e4d0558 Use new pagination interface for podcast episodes 2021-04-08 16:49: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
r4v3n6101
610a6190b2 LoopStatus is now editable from MPRIS 2021-02-22 22:14:15 +01:00
André Andersson
5b40fc6ddc Don't handle FinishedTrack as Stopped (#403)
* Don't handle FinishedTrack as Stopped

* consider `FinishedTrack` as still playing

Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
2021-01-20 20:54:45 +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
Henrik Friedrichsen
def01494db fix: convert duration to i64 to avoid overflow
This can happen with longer playables, e.g. podcast episodes.
2021-01-10 01:52:56 +01:00
Henrik Friedrichsen
3874dc42f8 cargo clippy 2021-01-02 21:30:52 +01:00
Henrik Friedrichsen
5671f1e5a4 fix: do not announce unplayable tracks via mpris
fixes #349
2020-12-19 00:28:39 +01:00
Henrik Friedrichsen
09febf7187 cargo update + format + clippy 2020-11-21 15:42:17 +01:00
Benjamin Brownlee
d728cd2bb4 fix mpris get volume; added mpris set volume (#325) 2020-11-21 15:34:22 +01:00
r4v3n6101
5e1c31eefb Change to correct trackid 2020-11-17 20:43:02 +01:00
Bettehem
e0cfc40639 Spotify URL handling improvements (#320)
* 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.
2020-11-15 19:17:15 +01:00
Bettehem
9baed7ae98 Added possibility to turn on/off shuffle using MPRIS (#318)
* Added possibility to turn shuffle on/off via MPRIS

* Simplified code to use unwrap_or instead of a match.
Changed the default value to be retrieved from spotify.

* only set shuffle setting if parameter was passed

* fix: fetch shuffle state with every MPRIS query

And not just once during DBus/MPRIS setup. Also, redraw UI when shuffle
state has changed.

Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
2020-11-14 21:50:13 +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
5fb4eb7af2 fix: update playlist changes in local store
Move playlist change logic out of the library while we're at it and notify
the library of changes instead.

fixes #302
2020-10-25 00:09:23 +02:00
dependabot-preview[bot]
e698d51e59 Bump dbus from 0.8.4 to 0.9.0 (#296)
* Bump dbus from 0.8.4 to 0.9.0

Bumps [dbus](https://github.com/diwic/dbus-rs) from 0.8.4 to 0.9.0.
- [Release notes](https://github.com/diwic/dbus-rs/releases)
- [Commits](https://github.com/diwic/dbus-rs/compare/dbus-v0.8.4...dbus-v0.9.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* migrate to dbus/dbus-tree 0.9.0

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
2020-10-24 00:03:19 +02:00
Henrik Friedrichsen
79a3d0ca8a add recommendations/similar tracks feature
fixes #186
2020-10-18 17:41:18 +02:00
Henrik Friedrichsen
6f7b64c908 cargo clippy 2020-08-23 21:00:29 +02:00
r4v3n6101
dce6b45472 Seek & SetPosition implementation 2020-08-20 18:12:34 +02:00
r4v3n6101
97d3468392 Fix trackid replacing string with d-bus path 2020-08-20 18:12:34 +02:00
Henrik Friedrichsen
ea1856b312 fix: fetch playpack progress when position is queried
fixes #223 #236
2020-08-18 22:18:09 +02:00
Henrik Friedrichsen
bc8f117e86 update to latest dbus-rs library 2020-08-18 22:16:58 +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