From a0455b5e00fbcb146bffb6695759ad6cafb0d8ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Sun, 22 May 2022 16:28:59 +0300 Subject: [PATCH] spotifyaudiosrc: Update to librespot 0.4 --- audio/spotify/Cargo.toml | 2 +- audio/spotify/src/spotifyaudiosrc/imp.rs | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/audio/spotify/Cargo.toml b/audio/spotify/Cargo.toml index 5577696d..5e6b9c4b 100644 --- a/audio/spotify/Cargo.toml +++ b/audio/spotify/Cargo.toml @@ -12,7 +12,7 @@ rust-version = "1.57" gst = { package = "gstreamer", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } gst-base = { package = "gstreamer-base", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } once_cell = "1.0" -librespot = { version = "0.3", default-features = false } +librespot = { version = "0.4", default-features = false } tokio = "1.0" futures = "0.3" anyhow = "1.0" diff --git a/audio/spotify/src/spotifyaudiosrc/imp.rs b/audio/spotify/src/spotifyaudiosrc/imp.rs index caadd381..402af8ad 100644 --- a/audio/spotify/src/spotifyaudiosrc/imp.rs +++ b/audio/spotify/src/spotifyaudiosrc/imp.rs @@ -26,6 +26,7 @@ use librespot::playback::{ config::PlayerConfig, convert::Converter, decoder::AudioPacket, + mixer::NoOpVolume, player::{Player, PlayerEvent}, }; @@ -326,7 +327,7 @@ impl SpotifyAudioSrc { None }; - let cache = Cache::new(credentials_cache, files_cache, max_size)?; + let cache = Cache::new(credentials_cache, None, files_cache, max_size)?; let credentials = match cache.credentials() { Some(cached_cred) => { @@ -358,7 +359,8 @@ impl SpotifyAudioSrc { let state = self.state.clone(); - let session = Session::connect(SessionConfig::default(), credentials, Some(cache)).await?; + let (session, _credentials) = + Session::connect(SessionConfig::default(), credentials, Some(cache), false).await?; let player_config = PlayerConfig { passthrough: true, @@ -370,7 +372,7 @@ impl SpotifyAudioSrc { let sender_clone = sender.clone(); let (mut player, mut player_event_channel) = - Player::new(player_config, session, None, || { + Player::new(player_config, session, Box::new(NoOpVolume), || { Box::new(BufferSink { sender }) }); @@ -413,9 +415,12 @@ struct BufferSink { } impl Sink for BufferSink { - fn write(&mut self, packet: &AudioPacket, _converter: &mut Converter) -> SinkResult<()> { - let ogg = packet.oggdata().unwrap(); - let buffer = gst::Buffer::from_slice(Vec::from(ogg)); + fn write(&mut self, packet: AudioPacket, _converter: &mut Converter) -> SinkResult<()> { + let oggdata = match packet { + AudioPacket::OggData(data) => data, + AudioPacket::Samples(_) => unimplemented!(), + }; + let buffer = gst::Buffer::from_slice(oggdata); // ignore if sending fails as that means the source element is being shutdown let _ = self.sender.send(Message::Buffer(buffer));