Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
librespot: update to a4e0f58
  • Loading branch information
awiouy committed Sep 5, 2018
1 parent 3962fbf commit a95cc7e
Show file tree
Hide file tree
Showing 16 changed files with 375 additions and 213 deletions.
10 changes: 10 additions & 0 deletions packages/addons/service/librespot/changelog.txt
@@ -1,3 +1,13 @@
112
- Update to a4e0f58
- Rework Python
- Correct codec in Kodi mode
- Fix setting change
- Fix wizard
- Fix zapping issue
- Display album, artist, icon and title
- Wait for librespot.onevent to finish

111
- Update to 431be9e
- Fix delay with Kodi playback option
Expand Down
6 changes: 3 additions & 3 deletions packages/addons/service/librespot/package.mk
Expand Up @@ -3,9 +3,9 @@
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)

PKG_NAME="librespot"
PKG_VERSION="431be9e"
PKG_SHA256="2e336c5415b6ee6f669e673282daccdd770b15d35dd6d71b39b17dc2aa3424c0"
PKG_REV="111"
PKG_VERSION="a4e0f582a8c705b05c8abba58d9e9c1c06ad532d"
PKG_SHA256="63ed879d7185f16963316b0c3149a40875260f5403b2c55c6cdb470e91b7741d"
PKG_REV="112"
PKG_ARCH="any"
PKG_LICENSE="MIT"
PKG_SITE="https://github.com/librespot-org/librespot/"
Expand Down
@@ -1,30 +1,23 @@
commit 55439529ae313eac5d946aa751387fa747cc6bc4
Author: awiouy <awiouy@gmail.com>
Date: Wed Jun 13 17:39:54 2018 +0200

libreelec: kodi hooks

diff --git a/playback/src/player.rs b/playback/src/player.rs
index dd99423..365c108 100644
index ab1a8ab..0aa0630 100644
--- a/playback/src/player.rs
+++ b/playback/src/player.rs
@@ -17,7 +17,7 @@ use core::spotify_id::SpotifyId;
use audio::{AudioDecrypt, AudioFile};
use audio::{VorbisDecoder, VorbisPacket};
use audio_backend::Sink;
-use metadata::{FileFormat, Metadata, Track};
+use metadata::{FileFormat, Metadata, Track, Artist};
use mixer::AudioFilter;

pub struct Player {
@@ -49,15 +49,22 @@ enum PlayerCommand {
@@ -49,15 +49,18 @@ enum PlayerCommand {
pub enum PlayerEvent {
Started {
track_id: SpotifyId,
+ track: Track,
+ artist: Artist,
+ new_state: String,
},

Changed {
old_track_id: SpotifyId,
new_track_id: SpotifyId,
+ track: Track,
+ artist: Artist,
+ new_state: String,
},

Expand All @@ -34,17 +27,7 @@ index dd99423..365c108 100644
},
}

@@ -404,6 +411,9 @@ impl PlayerInternal {

match self.load_track(track_id, position as i64) {
Some((decoder, normalisation_factor)) => {
+ let track = Track::get(&self.session, track_id).wait().unwrap();
+ let artist = Artist::get(&self.session, track.artists[0]).wait().unwrap();
+
if play {
match self.state {
PlayerState::Playing {
@@ -413,11 +423,20 @@ impl PlayerInternal {
@@ -413,11 +416,18 @@ impl PlayerInternal {
| PlayerState::EndOfTrack {
track_id: old_track_id,
..
Expand All @@ -58,19 +41,17 @@ index dd99423..365c108 100644
+ self.send_event(PlayerEvent::Changed {
+ old_track_id: old_track_id,
+ new_track_id: track_id,
+ track: track,
+ artist: artist,
+ new_state: new_state,
+ });
+ },
+ _ => {
+ let new_state = "play".to_string();
+ self.send_event(PlayerEvent::Started { track_id, track, artist, new_state });
+ self.send_event(PlayerEvent::Started { track_id, new_state });
+ },
}

self.start_sink();
@@ -443,13 +462,20 @@ impl PlayerInternal {
@@ -443,13 +453,18 @@ impl PlayerInternal {
| PlayerState::EndOfTrack {
track_id: old_track_id,
..
Expand All @@ -83,8 +64,6 @@ index dd99423..365c108 100644
+ self.send_event(PlayerEvent::Changed {
+ old_track_id: old_track_id,
+ new_track_id: track_id,
+ track: track,
+ artist: artist,
+ new_state: new_state,
+ })
+ },
Expand All @@ -96,19 +75,17 @@ index dd99423..365c108 100644
}
}

@@ -474,7 +500,10 @@ impl PlayerInternal {
@@ -474,7 +489,8 @@ impl PlayerInternal {
if let PlayerState::Paused { track_id, .. } = self.state {
self.state.paused_to_playing();

- self.send_event(PlayerEvent::Started { track_id });
+ let track = Track::get(&self.session, track_id).wait().unwrap();
+ let artist = Artist::get(&self.session, track.artists[0]).wait().unwrap();
+ let new_state = "play".to_string();
+ self.send_event(PlayerEvent::Started { track_id, track, artist, new_state });
+ self.send_event(PlayerEvent::Started { track_id, new_state });
self.start_sink();
} else {
warn!("Player::play called from invalid state");
@@ -486,7 +515,8 @@ impl PlayerInternal {
@@ -486,7 +502,8 @@ impl PlayerInternal {
self.state.playing_to_paused();

self.stop_sink_if_running();
Expand All @@ -118,7 +95,7 @@ index dd99423..365c108 100644
} else {
warn!("Player::pause called from invalid state");
}
@@ -497,7 +527,8 @@ impl PlayerInternal {
@@ -497,7 +514,8 @@ impl PlayerInternal {
| PlayerState::Paused { track_id, .. }
| PlayerState::EndOfTrack { track_id } => {
self.stop_sink_if_running();
Expand All @@ -129,36 +106,34 @@ index dd99423..365c108 100644
}
PlayerState::Stopped => {
diff --git a/src/player_event_handler.rs b/src/player_event_handler.rs
index b6a653d..f746c8f 100644
index b6a653d..7549e00 100644
--- a/src/player_event_handler.rs
+++ b/src/player_event_handler.rs
@@ -18,18 +18,28 @@ pub fn run_program_on_events(event: PlayerEvent, onevent: &str) {
@@ -18,18 +18,22 @@ pub fn run_program_on_events(event: PlayerEvent, onevent: &str) {
PlayerEvent::Changed {
old_track_id,
new_track_id,
+ track,
+ artist,
+ new_state,
} => {
env_vars.insert("PLAYER_EVENT", "change".to_string());
env_vars.insert("OLD_TRACK_ID", old_track_id.to_base16());
env_vars.insert("TRACK_ID", new_track_id.to_base16());
+ env_vars.insert("TITLE", track.name.to_string());
+ env_vars.insert("ARTIST", artist.name.to_string());
- env_vars.insert("OLD_TRACK_ID", old_track_id.to_base16());
- env_vars.insert("TRACK_ID", new_track_id.to_base16());
+ env_vars.insert("OLD_TRACK_ID", old_track_id.to_base62());
+ env_vars.insert("TRACK_ID", new_track_id.to_base62());
+ env_vars.insert("STATE", new_state.to_string());
}
- PlayerEvent::Started { track_id } => {
+ PlayerEvent::Started { track_id, track, artist, new_state } => {
+ PlayerEvent::Started { track_id, new_state } => {
env_vars.insert("PLAYER_EVENT", "start".to_string());
env_vars.insert("TRACK_ID", track_id.to_base16());
+ env_vars.insert("TITLE", track.name.to_string());
+ env_vars.insert("ARTIST", artist.name.to_string());
- env_vars.insert("TRACK_ID", track_id.to_base16());
+ env_vars.insert("TRACK_ID", track_id.to_base62());
+ env_vars.insert("STATE", new_state.to_string());
}
- PlayerEvent::Stopped { track_id } => {
+ PlayerEvent::Stopped { track_id, new_state } => {
env_vars.insert("PLAYER_EVENT", "stop".to_string());
env_vars.insert("TRACK_ID", track_id.to_base16());
- env_vars.insert("TRACK_ID", track_id.to_base16());
+ env_vars.insert("TRACK_ID", track_id.to_base62());
+ env_vars.insert("STATE", new_state.to_string());
}
}
Expand Down
@@ -0,0 +1,23 @@
From abcd8697b46924f8a18d733fc9d2bf884e901a46 Mon Sep 17 00:00:00 2001
From: leszekb <leszek@control-by.net>
Date: Mon, 14 May 2018 22:42:34 +0200
Subject: [PATCH] Update player_event_handler.rs

---
src/player_event_handler.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/player_event_handler.rs b/src/player_event_handler.rs
index b6a653d..6064bc0 100644
--- a/src/player_event_handler.rs
+++ b/src/player_event_handler.rs
@@ -8,7 +8,7 @@ fn run_program(program: &str, env_vars: HashMap<&str, String>) {
Command::new(&v.remove(0))
.args(&v)
.envs(env_vars.iter())
- .spawn()
+ .status()
.expect("program failed to start");
}


28 changes: 13 additions & 15 deletions packages/addons/service/librespot/source/addon.py
@@ -1,24 +1,22 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)

import alsaaudio as alsa
import alsaaudio
import xbmcaddon
import xbmcgui


dialog = xbmcgui.Dialog()
strings = xbmcaddon.Addon().getLocalizedString
dialog = xbmcgui.Dialog()
strings = xbmcaddon.Addon().getLocalizedString
while True:
pcms = alsa.pcms()[1:]
if len(pcms) == 0:
dialog.ok(xbmcaddon.Addon().getAddonInfo('name'), strings(30210))
break
pcmx = dialog.select(strings(30115), pcms)
if pcmx == -1:
break
pcm = pcms[pcmx]
xbmcaddon.Addon().setSetting('ls_o', pcm)
break
pcms = alsaaudio.pcms()[1:]
if len(pcms) == 0:
dialog.ok(xbmcaddon.Addon().getAddonInfo('name'), strings(30210))
break
pcmx = dialog.select(strings(30115), pcms)
if pcmx == -1:
break
pcm = pcms[pcmx]
xbmcaddon.Addon().setSetting('ls_o', pcm)
break
del dialog


@@ -1,2 +1,2 @@
#!/bin/sh
echo -e "$STATE\n$ARTIST\n$TITLE" > "$LS_FIFO"
echo -e "$STATE\n$TRACK_ID" > "$LS_FIFO"
7 changes: 5 additions & 2 deletions packages/addons/service/librespot/source/bin/librespot.start
Expand Up @@ -3,6 +3,9 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)

f="/storage/.kodi/userdata/addon_data/service.librespot/settings.xml"
[ -f "$f" ] && sed -i 's/ls_O/ls_m/g' "$f"

activate_card() {
if [ -e "/proc/asound/$1" ]; then
return
Expand Down Expand Up @@ -50,7 +53,7 @@ init_alsa() {
index="${index%%,*}"
card="card$index"
activate_card "$card"
;;
;;
*)
if [ -n "$ls_o" ]; then
echo "Unknown playback device specification $ls_o"
Expand Down Expand Up @@ -85,7 +88,7 @@ if [ -n "$ls_p" -a -n "$ls_u" ]; then
--username \"$ls_u\""
fi

if [ "$ls_O" == "Kodi" ]; then
if [ "$ls_m" == "Kodi" ]; then
LIBRESPOT="$LIBRESPOT --backend pulseaudio --device-type TV"
else
init_alsa
Expand Down

0 comments on commit a95cc7e

Please sign in to comment.