From 4002953f194cd7a5588daf299708db1ee6c57432 Mon Sep 17 00:00:00 2001 From: awiouy Date: Tue, 20 Jun 2017 19:37:36 +0200 Subject: [PATCH] librespot: depends on libvorbis built with -fPIC, use proposed upstream commit to disable audio cache --- packages/addons/service/librespot/package.mk | 2 +- .../librespot-02_disable_audio_cache.patch | 87 +++++++++++++++++++ .../patches/librespot-02_no_audio_cache.patch | 48 ---------- .../librespot/source/bin/librespot.start | 1 + 4 files changed, 89 insertions(+), 49 deletions(-) create mode 100644 packages/addons/service/librespot/patches/librespot-02_disable_audio_cache.patch delete mode 100644 packages/addons/service/librespot/patches/librespot-02_no_audio_cache.patch diff --git a/packages/addons/service/librespot/package.mk b/packages/addons/service/librespot/package.mk index b64fe51abd..e79d1b5da1 100644 --- a/packages/addons/service/librespot/package.mk +++ b/packages/addons/service/librespot/package.mk @@ -24,7 +24,7 @@ PKG_ARCH="any" PKG_LICENSE="prop." PKG_SITE="https://github.com/plietar/$PKG_NAME/" PKG_URL="https://github.com/plietar/$PKG_NAME/archive/$PKG_VERSION.zip" -PKG_DEPENDS_TARGET="toolchain avahi pyalsaaudio rust" +PKG_DEPENDS_TARGET="toolchain avahi libvorbis pyalsaaudio rust" PKG_SECTION="service" PKG_LONGDESC="Librespot ($PKG_VERSION) plays Spotify through LibreELEC using the opensource librespot library using a Spotify app as a remote." PKG_AUTORECONF="no" diff --git a/packages/addons/service/librespot/patches/librespot-02_disable_audio_cache.patch b/packages/addons/service/librespot/patches/librespot-02_disable_audio_cache.patch new file mode 100644 index 0000000000..42502b0df3 --- /dev/null +++ b/packages/addons/service/librespot/patches/librespot-02_disable_audio_cache.patch @@ -0,0 +1,87 @@ +From 031cc0a420db9d3ae8dd3543d07ff8503bdc508d Mon Sep 17 00:00:00 2001 +From: Michael Herger +Date: Tue, 20 Jun 2017 12:31:55 +0200 +Subject: [PATCH] Add --disable-audio-cache startup parameter + +Disable caching of downloaded audio files at runtime. Comes in handy when running librespot on a small device with SD card or other small storage. +--- + src/audio_file.rs | 24 +++++++++++++----------- + src/main.rs | 2 ++ + src/session.rs | 2 ++ + 3 files changed, 17 insertions(+), 11 deletions(-) + +diff --git a/src/audio_file.rs b/src/audio_file.rs +index 369d5ca..d014ba2 100644 +--- a/src/audio_file.rs ++++ b/src/audio_file.rs +@@ -151,17 +151,19 @@ impl AudioFileManager { + complete_tx: Some(complete_tx), + }; + +- let session = self.session(); +- self.session().spawn(move |_| { +- complete_rx.map(move |mut file| { +- if let Some(cache) = session.cache() { +- cache.save_file(file_id, &mut file); +- debug!("File {} complete, saving to cache", file_id); +- } else { +- debug!("File {} complete", file_id); +- } +- }).or_else(|oneshot::Canceled| Ok(())) +- }); ++ if self.session().config().use_audio_cache { ++ let session = self.session(); ++ self.session().spawn(move |_| { ++ complete_rx.map(move |mut file| { ++ if let Some(cache) = session.cache() { ++ cache.save_file(file_id, &mut file); ++ debug!("File {} complete, saving to cache", file_id); ++ } else { ++ debug!("File {} complete", file_id); ++ } ++ }).or_else(|oneshot::Canceled| Ok(())) ++ }); ++ } + + AudioFileOpen::Streaming(open) + } +diff --git a/src/main.rs b/src/main.rs +index 38c57fd..8a31a44 100644 +--- a/src/main.rs ++++ b/src/main.rs +@@ -86,6 +86,7 @@ struct Setup { + fn setup(args: &[String]) -> Setup { + let mut opts = getopts::Options::new(); + opts.optopt("c", "cache", "Path to a directory where files will be cached.", "CACHE") ++ .optflag("", "disable-audio-cache", "Disable caching of the audio data.") + .reqopt("n", "name", "Device name", "NAME") + .optopt("b", "bitrate", "Bitrate (96, 160 or 320). Defaults to 160", "BITRATE") + .optopt("", "onstart", "Run PROGRAM when playback is about to begin.", "PROGRAM") +@@ -152,6 +153,7 @@ fn setup(args: &[String]) -> Setup { + bitrate: bitrate, + onstart: matches.opt_str("onstart"), + onstop: matches.opt_str("onstop"), ++ use_audio_cache: !matches.opt_present("disable-audio-cache"), + }; + + let device = matches.opt_str("device"); +diff --git a/src/session.rs b/src/session.rs +index 86162bd..a5d397e 100644 +--- a/src/session.rs ++++ b/src/session.rs +@@ -49,6 +49,7 @@ pub struct Config { + pub bitrate: Bitrate, + pub onstart: Option, + pub onstop: Option, ++ pub use_audio_cache: bool, + } + + impl Default for Config { +@@ -60,6 +61,7 @@ impl Default for Config { + bitrate: Bitrate::Bitrate160, + onstart: None, + onstop: None, ++ use_audio_cache: true, + } + } + } diff --git a/packages/addons/service/librespot/patches/librespot-02_no_audio_cache.patch b/packages/addons/service/librespot/patches/librespot-02_no_audio_cache.patch deleted file mode 100644 index 6c4c932ec1..0000000000 --- a/packages/addons/service/librespot/patches/librespot-02_no_audio_cache.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff -Naur librespot/src/audio_file.rs librespot.nocache/src/audio_file.rs ---- librespot/src/audio_file.rs 2017-06-14 00:14:21.000000000 +0200 -+++ librespot.nocache/src/audio_file.rs 2017-06-20 00:35:14.060020000 +0200 -@@ -3,7 +3,7 @@ - use futures::Stream; - use futures::sync::{oneshot, mpsc}; - use futures::{Poll, Async, Future}; --use futures::future::{self, FutureResult}; -+use futures::future::FutureResult; - use std::cmp::min; - use std::fs; - use std::io::{self, Read, Write, Seek, SeekFrom}; -@@ -129,15 +129,9 @@ - - impl AudioFileManager { - pub fn open(&self, file_id: FileId) -> AudioFileOpen { -- let cache = self.session().cache().cloned(); -- -- if let Some(file) = cache.as_ref().and_then(|cache| cache.file(file_id)) { -- debug!("File {} already in cache", file_id); -- return AudioFileOpen::Cached(future::ok(file)); -- } -- - debug!("Downloading file {}", file_id); - -+ #[allow(unused_variables)] - let (complete_tx, complete_rx) = oneshot::channel(); - let (headers, data) = request_chunk(&self.session(), file_id, 0).split(); - -@@ -151,18 +145,6 @@ - complete_tx: Some(complete_tx), - }; - -- let session = self.session(); -- self.session().spawn(move |_| { -- complete_rx.map(move |mut file| { -- if let Some(cache) = session.cache() { -- cache.save_file(file_id, &mut file); -- debug!("File {} complete, saving to cache", file_id); -- } else { -- debug!("File {} complete", file_id); -- } -- }).or_else(|oneshot::Canceled| Ok(())) -- }); -- - AudioFileOpen::Streaming(open) - } - } diff --git a/packages/addons/service/librespot/source/bin/librespot.start b/packages/addons/service/librespot/source/bin/librespot.start index b3fbb4cd48..0d5aaed6b4 100755 --- a/packages/addons/service/librespot/source/bin/librespot.start +++ b/packages/addons/service/librespot/source/bin/librespot.start @@ -95,5 +95,6 @@ esac librespot $bitrate \ --cache "$ADDON_HOME/cache" \ $device \ + --disable-audio-cache \ $discovery \ --name "Librespot@$HOSTNAME"