Compare commits
10 Commits
79d45b96f3
...
c492094f42
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c492094f42 | ||
|
|
1b8e377e60 | ||
|
|
e70a934c1a | ||
|
|
b786f5a6bc | ||
|
|
f95201d5aa | ||
|
|
46ac2ab561 | ||
|
|
2c3e9c0eed | ||
|
|
6d703deac3 | ||
|
|
56520c2d8d | ||
|
|
f7c8262a3c |
2
.github/workflows/cd.yml
vendored
2
.github/workflows/cd.yml
vendored
@@ -40,7 +40,7 @@ jobs:
|
|||||||
target: x86_64-pc-windows-msvc
|
target: x86_64-pc-windows-msvc
|
||||||
features: '--no-default-features --features rodio_backend,pancurses_backend,share_clipboard,notify'
|
features: '--no-default-features --features rodio_backend,pancurses_backend,share_clipboard,notify'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
name: Checkout src
|
name: Checkout src
|
||||||
- name: Install rustup
|
- name: Install rustup
|
||||||
if: runner.os != 'Windows'
|
if: runner.os != 'Windows'
|
||||||
|
|||||||
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
@@ -34,7 +34,7 @@ jobs:
|
|||||||
target: x86_64-pc-windows-msvc
|
target: x86_64-pc-windows-msvc
|
||||||
features: '--no-default-features --features rodio_backend,pancurses_backend,share_clipboard,notify'
|
features: '--no-default-features --features rodio_backend,pancurses_backend,share_clipboard,notify'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- uses: actions/cache@v4
|
- uses: actions/cache@v4
|
||||||
name: Cache build data
|
name: Cache build data
|
||||||
with:
|
with:
|
||||||
@@ -73,7 +73,7 @@ jobs:
|
|||||||
name: Running `cargo fmt`
|
name: Running `cargo fmt`
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Install rustup
|
- name: Install rustup
|
||||||
run: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
run: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||||
- name: Install clippy + rustfmt
|
- name: Install clippy + rustfmt
|
||||||
@@ -87,7 +87,7 @@ jobs:
|
|||||||
name: Running `cargo clippy`
|
name: Running `cargo clippy`
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- uses: actions/cache@v4
|
- uses: actions/cache@v4
|
||||||
name: Cache build data
|
name: Cache build data
|
||||||
with:
|
with:
|
||||||
|
|||||||
2
.github/workflows/update-rust-toolchain.yml
vendored
2
.github/workflows/update-rust-toolchain.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
- name: update rust toolchain
|
- name: update rust toolchain
|
||||||
uses: a-kenji/update-rust-toolchain@v1.1
|
uses: a-kenji/update-rust-toolchain@v1.1
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -5,13 +5,14 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## Unreleased
|
## [1.3.2]
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Playlist retrieval crashing when list contains podcast episodes
|
- Playlist retrieval crashing when list contains podcast episodes
|
||||||
- Crash when shifting a song by an amount greater than the queue's length
|
- Crash when shifting a song by an amount greater than the queue's length
|
||||||
- Crash when displaying songs that do not have an (available) artist
|
- Crash when displaying songs that do not have an (available) artist
|
||||||
|
- Playback broken due to Spotify API change
|
||||||
|
|
||||||
## [1.3.1]
|
## [1.3.1]
|
||||||
|
|
||||||
@@ -260,6 +261,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Albums with more than 50 songs not showing all the songs when viewed in the library
|
- Albums with more than 50 songs not showing all the songs when viewed in the library
|
||||||
- Bug that could cause items to not load until the screen is filled on bigger screens
|
- Bug that could cause items to not load until the screen is filled on bigger screens
|
||||||
|
|
||||||
|
[1.3.2]: https://github.com/hrkfdn/ncspot/compare/v1.3.1...v1.3.2
|
||||||
[1.3.1]: https://github.com/hrkfdn/ncspot/compare/v1.3.0...v1.3.1
|
[1.3.1]: https://github.com/hrkfdn/ncspot/compare/v1.3.0...v1.3.1
|
||||||
[1.3.0]: https://github.com/hrkfdn/ncspot/compare/v1.2.2...v1.3.0
|
[1.3.0]: https://github.com/hrkfdn/ncspot/compare/v1.2.2...v1.3.0
|
||||||
[1.2.2]: https://github.com/hrkfdn/ncspot/compare/v1.2.1...v1.2.2
|
[1.2.2]: https://github.com/hrkfdn/ncspot/compare/v1.2.1...v1.2.2
|
||||||
|
|||||||
1217
Cargo.lock
generated
1217
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
18
Cargo.toml
18
Cargo.toml
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ncspot"
|
name = "ncspot"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
version = "1.3.1"
|
version = "1.3.2"
|
||||||
description = "ncurses Spotify client written in Rust using librespot, inspired by ncmpc and the likes."
|
description = "ncurses Spotify client written in Rust using librespot, inspired by ncmpc and the likes."
|
||||||
exclude = ["images/**"]
|
exclude = ["images/**"]
|
||||||
keywords = ["spotify", "ncurses", "librespot", "terminal"]
|
keywords = ["spotify", "ncurses", "librespot", "terminal"]
|
||||||
@@ -44,19 +44,19 @@ codegen-units = 16
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
chrono = "0.4"
|
chrono = "0.4"
|
||||||
clap = "4.5.48"
|
clap = "4.5.53"
|
||||||
arboard = {version = "3.6", optional = true}
|
arboard = {version = "3.6", optional = true}
|
||||||
crossbeam-channel = "0.5"
|
crossbeam-channel = "0.5"
|
||||||
zbus = {version = "5.11.0", default-features = false, features = ["tokio"], optional = true}
|
zbus = {version = "5.11.0", default-features = false, features = ["tokio"], optional = true}
|
||||||
fern = "0.7"
|
fern = "0.7"
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
ioctl-rs = {version = "0.2", optional = true}
|
ioctl-rs = {version = "0.2", optional = true}
|
||||||
libc = "0.2.176"
|
libc = "0.2.178"
|
||||||
librespot-core = "0.7.1"
|
librespot-core = "0.8.0"
|
||||||
librespot-oauth = "0.7.1"
|
librespot-oauth = "0.8.0"
|
||||||
librespot-playback = {version = "0.7.1", default-features = false, features = ["native-tls"]}
|
librespot-playback = {version = "0.8.0", default-features = false, features = ["native-tls"]}
|
||||||
librespot-protocol = "0.7.1"
|
librespot-protocol = "0.8.0"
|
||||||
log = "0.4.28"
|
log = "0.4.29"
|
||||||
pancurses = {version = "0.17.0", optional = true}
|
pancurses = {version = "0.17.0", optional = true}
|
||||||
parse_duration = "2.1.1"
|
parse_duration = "2.1.1"
|
||||||
platform-dirs = "0.3.0"
|
platform-dirs = "0.3.0"
|
||||||
@@ -72,7 +72,7 @@ tokio = {version = "1", features = ["rt-multi-thread", "sync", "time", "net"]}
|
|||||||
tokio-util = {version = "0.7.16", features = ["codec"]}
|
tokio-util = {version = "0.7.16", features = ["codec"]}
|
||||||
tokio-stream = {version = "0.1.17", features = ["sync"]}
|
tokio-stream = {version = "0.1.17", features = ["sync"]}
|
||||||
toml = "0.9"
|
toml = "0.9"
|
||||||
unicode-width = "0.2.1"
|
unicode-width = "0.2.2"
|
||||||
url = "2.5"
|
url = "2.5"
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 70 KiB |
@@ -1,3 +1,3 @@
|
|||||||
[toolchain]
|
[toolchain]
|
||||||
channel = "1.90.0"
|
channel = "1.91.1"
|
||||||
components = ["rustfmt", "clippy", "rust-analyzer"]
|
components = ["rustfmt", "clippy", "rust-analyzer"]
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ use crate::model::playable::Playable;
|
|||||||
use crate::queue::QueueEvent;
|
use crate::queue::QueueEvent;
|
||||||
use crate::spotify::PlayerEvent;
|
use crate::spotify::PlayerEvent;
|
||||||
use futures::Future;
|
use futures::Future;
|
||||||
|
use librespot_core::SpotifyUri;
|
||||||
use librespot_core::session::Session;
|
use librespot_core::session::Session;
|
||||||
use librespot_core::spotify_id::SpotifyId;
|
|
||||||
use librespot_core::token::Token;
|
use librespot_core::token::Token;
|
||||||
use librespot_playback::mixer::Mixer;
|
use librespot_playback::mixer::Mixer;
|
||||||
use librespot_playback::player::{Player, PlayerEvent as LibrespotPlayerEvent};
|
use librespot_playback::player::{Player, PlayerEvent as LibrespotPlayerEvent};
|
||||||
@@ -98,14 +98,14 @@ impl Worker {
|
|||||||
tokio::select! {
|
tokio::select! {
|
||||||
cmd = self.commands.next() => match cmd {
|
cmd = self.commands.next() => match cmd {
|
||||||
Some(WorkerCommand::Load(playable, start_playing, position_ms)) => {
|
Some(WorkerCommand::Load(playable, start_playing, position_ms)) => {
|
||||||
match SpotifyId::from_uri(&playable.uri()) {
|
match SpotifyUri::from_uri(&playable.uri()) {
|
||||||
Ok(id) => {
|
Ok(uri) => {
|
||||||
info!("player loading track: {id:?}");
|
info!("player loading track: {uri:?}");
|
||||||
if !id.is_playable() {
|
if !uri.is_playable() {
|
||||||
warn!("track is not playable");
|
warn!("track is not playable");
|
||||||
self.events.send(Event::Player(PlayerEvent::FinishedTrack));
|
self.events.send(Event::Player(PlayerEvent::FinishedTrack));
|
||||||
} else {
|
} else {
|
||||||
self.player.load(id, start_playing, position_ms);
|
self.player.load(uri, start_playing, position_ms);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
@@ -133,9 +133,9 @@ impl Worker {
|
|||||||
self.token_task = Box::pin(Self::get_token(self.session.clone(), sender));
|
self.token_task = Box::pin(Self::get_token(self.session.clone(), sender));
|
||||||
}
|
}
|
||||||
Some(WorkerCommand::Preload(playable)) => {
|
Some(WorkerCommand::Preload(playable)) => {
|
||||||
if let Ok(id) = SpotifyId::from_uri(&playable.uri()) {
|
if let Ok(uri) = SpotifyUri::from_uri(&playable.uri()) {
|
||||||
debug!("Preloading {id:?}");
|
debug!("Preloading {uri:?}");
|
||||||
self.player.preload(id);
|
self.player.preload(uri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(WorkerCommand::Shutdown) => {
|
Some(WorkerCommand::Shutdown) => {
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ repository.workspace = true
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap_mangen = "0.2.29"
|
clap_mangen = "0.2.29"
|
||||||
clap_complete = "4.5.58"
|
clap_complete = "4.5.61"
|
||||||
clap = "4.5.48"
|
clap = "4.5.53"
|
||||||
|
|
||||||
[dependencies.ncspot]
|
[dependencies.ncspot]
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|||||||
Reference in New Issue
Block a user