diff --git a/Cargo.lock b/Cargo.lock index 1c8b732..05a053e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1683,7 +1683,7 @@ dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", - "rspotify 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rspotify 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", "strum 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2437,7 +2437,7 @@ dependencies = [ [[package]] name = "rspotify" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3766,7 +3766,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum reqwest 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3b82c9238b305f26f53443e3a4bc8528d64b8d0bee408ec949eb7bf5635ec680" "checksum reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" "checksum rodio 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5d0f961b254e66d147a7b550c78b01308934c97d807a34b417fd0f5a0a0f3a2d" -"checksum rspotify 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a924a166cfb1315c8d9c89148e438a1337feb655ce052fc6dc952af8018bad93" +"checksum rspotify 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eefd7bb58b714606b30a490f751d7926942e2874eef5e82934d60d7a4a68dca4" "checksum rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" "checksum rustc-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" diff --git a/Cargo.toml b/Cargo.toml index 7502300..355db69 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,7 +28,7 @@ librespot-core = "0.1.1" librespot-playback = "0.1.1" librespot-protocol = "0.1.1" log = "0.4.0" -rspotify = "0.8" +rspotify = { version = "0.10.0", features = ["blocking"] } serde = "1.0" serde_json = "1.0" toml = "0.5" diff --git a/src/album.rs b/src/album.rs index a55d705..be24925 100644 --- a/src/album.rs +++ b/src/album.rs @@ -2,7 +2,7 @@ use std::fmt; use std::sync::Arc; use chrono::{DateTime, Utc}; -use rspotify::spotify::model::album::{FullAlbum, SavedAlbum, SimplifiedAlbum}; +use rspotify::model::album::{FullAlbum, SavedAlbum, SimplifiedAlbum}; use crate::artist::Artist; use crate::library::Library; diff --git a/src/artist.rs b/src/artist.rs index 26c24d4..eb45754 100644 --- a/src/artist.rs +++ b/src/artist.rs @@ -1,7 +1,7 @@ use std::fmt; use std::sync::Arc; -use rspotify::spotify::model::artist::{FullArtist, SimplifiedArtist}; +use rspotify::model::artist::{FullArtist, SimplifiedArtist}; use crate::album::Album; use crate::library::Library; diff --git a/src/library.rs b/src/library.rs index a59c97b..4a75c4e 100644 --- a/src/library.rs +++ b/src/library.rs @@ -5,7 +5,7 @@ use std::path::PathBuf; use std::sync::{Arc, RwLock, RwLockReadGuard}; use std::thread; -use rspotify::spotify::model::playlist::SimplifiedPlaylist; +use rspotify::model::playlist::SimplifiedPlaylist; use serde::de::DeserializeOwned; use serde::Serialize; diff --git a/src/playlist.rs b/src/playlist.rs index 4bb08e7..0e5e0ca 100644 --- a/src/playlist.rs +++ b/src/playlist.rs @@ -1,7 +1,7 @@ use std::iter::Iterator; use std::sync::Arc; -use rspotify::spotify::model::playlist::{FullPlaylist, SimplifiedPlaylist}; +use rspotify::model::playlist::{FullPlaylist, SimplifiedPlaylist}; use crate::library::Library; use crate::queue::Queue; @@ -31,7 +31,9 @@ impl Playlist { let mut tracks_result = spotify.user_playlist_tracks(&self.id, 100, 0); while let Some(ref tracks) = tracks_result.clone() { for listtrack in &tracks.items { - collected_tracks.push((&listtrack.track).into()); + if let Some(track) = &listtrack.track { + collected_tracks.push(track.into()); + } } debug!("got {} tracks", tracks.items.len()); diff --git a/src/spotify.rs b/src/spotify.rs index 580852a..ef72578 100644 --- a/src/spotify.rs +++ b/src/spotify.rs @@ -12,17 +12,16 @@ use librespot_playback::config::Bitrate; use librespot_playback::mixer::Mixer; use librespot_playback::player::{Player, PlayerEvent as LibrespotPlayerEvent}; -use rspotify::spotify::client::ApiError; -use rspotify::spotify::client::Spotify as SpotifyAPI; -use rspotify::spotify::model::album::{FullAlbum, SavedAlbum, SimplifiedAlbum}; -use rspotify::spotify::model::artist::FullArtist; -use rspotify::spotify::model::page::{CursorBasedPage, Page}; -use rspotify::spotify::model::playlist::{FullPlaylist, PlaylistTrack, SimplifiedPlaylist}; -use rspotify::spotify::model::search::{ - SearchAlbums, SearchArtists, SearchPlaylists, SearchTracks, -}; -use rspotify::spotify::model::track::{FullTrack, SavedTrack}; -use rspotify::spotify::model::user::PrivateUser; +use rspotify::blocking::client::ApiError; +use rspotify::blocking::client::Spotify as SpotifyAPI; +use rspotify::model::album::{FullAlbum, SavedAlbum, SimplifiedAlbum}; +use rspotify::model::artist::FullArtist; +use rspotify::model::page::{CursorBasedPage, Page}; +use rspotify::model::playlist::{FullPlaylist, PlaylistTrack, SimplifiedPlaylist}; +use rspotify::model::search::SearchResult; +use rspotify::model::track::{FullTrack, SavedTrack}; +use rspotify::model::user::PrivateUser; +use rspotify::senum::SearchType; use serde_json::json; @@ -667,20 +666,15 @@ impl Spotify { self.api_with_retry(|api| api.track(track_id)) } - pub fn search_track(&self, query: &str, limit: u32, offset: u32) -> Option { - self.api_with_retry(|api| api.search_track(query, limit, offset, None)) - } - - pub fn search_album(&self, query: &str, limit: u32, offset: u32) -> Option { - self.api_with_retry(|api| api.search_album(query, limit, offset, None)) - } - - pub fn search_artist(&self, query: &str, limit: u32, offset: u32) -> Option { - self.api_with_retry(|api| api.search_artist(query, limit, offset, None)) - } - - pub fn search_playlist(&self, query: &str, limit: u32, offset: u32) -> Option { - self.api_with_retry(|api| api.search_playlist(query, limit, offset, None)) + pub fn search( + &self, + searchtype: SearchType, + query: &str, + limit: u32, + offset: u32, + ) -> Option { + self.api_with_retry(|api| api.search(query, searchtype, limit, offset, None, None)) + .take() } pub fn current_user_playlist( diff --git a/src/track.rs b/src/track.rs index 9c1c93e..e87e8a0 100644 --- a/src/track.rs +++ b/src/track.rs @@ -2,8 +2,8 @@ use std::fmt; use std::sync::Arc; use chrono::{DateTime, Utc}; -use rspotify::spotify::model::album::FullAlbum; -use rspotify::spotify::model::track::{FullTrack, SavedTrack, SimplifiedTrack}; +use rspotify::model::album::FullAlbum; +use rspotify::model::track::{FullTrack, SavedTrack, SimplifiedTrack}; use crate::album::Album; use crate::artist::Artist; diff --git a/src/ui/search.rs b/src/ui/search.rs index 46ad14e..4649e77 100644 --- a/src/ui/search.rs +++ b/src/ui/search.rs @@ -22,6 +22,8 @@ use crate::track::Track; use crate::traits::{ListItem, ViewExt}; use crate::ui::listview::{ListView, Pagination}; use crate::ui::tabview::TabView; +use rspotify::model::search::SearchResult; +use rspotify::senum::SearchType; pub struct SearchView { results_tracks: Arc>>, @@ -129,8 +131,10 @@ impl SearchView { offset: usize, append: bool, ) -> u32 { - if let Some(results) = spotify.search_track(&query, 50, offset as u32) { - let mut t = results.tracks.items.iter().map(|ft| ft.into()).collect(); + if let Some(SearchResult::Tracks(results)) = + spotify.search(SearchType::Track, &query, 50, offset as u32) + { + let mut t = results.items.iter().map(|ft| ft.into()).collect(); let mut r = tracks.write().unwrap(); if append { @@ -138,7 +142,7 @@ impl SearchView { } else { *r = t; } - return results.tracks.total; + return results.total; } 0 } @@ -166,8 +170,10 @@ impl SearchView { offset: usize, append: bool, ) -> u32 { - if let Some(results) = spotify.search_album(&query, 50, offset as u32) { - let mut a = results.albums.items.iter().map(|sa| sa.into()).collect(); + if let Some(SearchResult::Albums(results)) = + spotify.search(SearchType::Album, &query, 50, offset as u32) + { + let mut a = results.items.iter().map(|sa| sa.into()).collect(); let mut r = albums.write().unwrap(); if append { @@ -175,7 +181,7 @@ impl SearchView { } else { *r = a; } - return results.albums.total; + return results.total; } 0 } @@ -203,8 +209,10 @@ impl SearchView { offset: usize, append: bool, ) -> u32 { - if let Some(results) = spotify.search_artist(&query, 50, offset as u32) { - let mut a = results.artists.items.iter().map(|fa| fa.into()).collect(); + if let Some(SearchResult::Artists(results)) = + spotify.search(SearchType::Artist, &query, 50, offset as u32) + { + let mut a = results.items.iter().map(|fa| fa.into()).collect(); let mut r = artists.write().unwrap(); if append { @@ -212,7 +220,7 @@ impl SearchView { } else { *r = a; } - return results.artists.total; + return results.total; } 0 } @@ -240,8 +248,10 @@ impl SearchView { offset: usize, append: bool, ) -> u32 { - if let Some(results) = spotify.search_playlist(&query, 50, offset as u32) { - let mut pls = results.playlists.items.iter().map(|sp| sp.into()).collect(); + if let Some(SearchResult::Playlists(results)) = + spotify.search(SearchType::Playlist, &query, 50, offset as u32) + { + let mut pls = results.items.iter().map(|sp| sp.into()).collect(); let mut r = playlists.write().unwrap(); if append { @@ -249,7 +259,7 @@ impl SearchView { } else { *r = pls; } - return results.playlists.total; + return results.total; } 0 }