From 95212ee663a1065b17f513c35c2703e2bbcdcecf Mon Sep 17 00:00:00 2001 From: awiouy Date: Sun, 4 Mar 2018 18:54:17 +0100 Subject: [PATCH] snapserver: initial addon --- .../addons/service/snapserver/changelog.txt | 2 + .../addons/service/snapserver/icon/icon.png | Bin 0 -> 40635 bytes packages/addons/service/snapserver/package.mk | 40 ++++++++++++++++++ .../snapserver/source/bin/snapserver.start | 39 +++++++++++++++++ .../service/snapserver/source/default.py | 39 +++++++++++++++++ .../resources/language/English/strings.po | 30 +++++++++++++ .../snapserver/source/resources/settings.xml | 10 +++++ .../snapserver/source/settings-default.xml | 7 +++ .../system.d/service.snapserver.service | 11 +++++ 9 files changed, 178 insertions(+) create mode 100644 packages/addons/service/snapserver/changelog.txt create mode 100644 packages/addons/service/snapserver/icon/icon.png create mode 100644 packages/addons/service/snapserver/package.mk create mode 100644 packages/addons/service/snapserver/source/bin/snapserver.start create mode 100644 packages/addons/service/snapserver/source/default.py create mode 100644 packages/addons/service/snapserver/source/resources/language/English/strings.po create mode 100644 packages/addons/service/snapserver/source/resources/settings.xml create mode 100644 packages/addons/service/snapserver/source/settings-default.xml create mode 100644 packages/addons/service/snapserver/source/system.d/service.snapserver.service diff --git a/packages/addons/service/snapserver/changelog.txt b/packages/addons/service/snapserver/changelog.txt new file mode 100644 index 0000000000..ffbebe8438 --- /dev/null +++ b/packages/addons/service/snapserver/changelog.txt @@ -0,0 +1,2 @@ +100 +- Initial addon diff --git a/packages/addons/service/snapserver/icon/icon.png b/packages/addons/service/snapserver/icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf0f85a1a5207b135ac6d8e50b1bc2027454a93 GIT binary patch literal 40635 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. +################################################################################ + +PKG_NAME="snapserver" +PKG_VERSION="0.13.0" +PKG_REV="100" +PKG_ARCH="any" +PKG_LICENSE="GPLv3" +PKG_DEPENDS_TARGET="toolchain shairport-sync snapcast" +PKG_SECTION="service" +PKG_SHORTDESC="Snapserver: Synchronous multi-room audio server" +PKG_LONGDESC="Snapclient ($PKG_VERSION) is a Snapcast server. Snapcast is a multi-room client-server audio system, where all clients are time synchronized with the server to play perfectly synced audioplays." +PKG_TOOLCHAIN="manual" + +PKG_IS_ADDON="yes" +PKG_ADDON_NAME="Snapserver" +PKG_ADDON_TYPE="xbmc.service" +PKG_MAINTAINER="Anton Voyl (awiouy)" + +addon() { + mkdir -p "$ADDON_BUILD/$PKG_ADDON_ID/bin" + cp "$(get_build_dir shairport-sync)/.$TARGET_NAME/shairport-sync" \ + "$(get_build_dir snapcast)/server/snapserver" \ + "$ADDON_BUILD/$PKG_ADDON_ID/bin" +} diff --git a/packages/addons/service/snapserver/source/bin/snapserver.start b/packages/addons/service/snapserver/source/bin/snapserver.start new file mode 100644 index 0000000000..3cc71a6609 --- /dev/null +++ b/packages/addons/service/snapserver/source/bin/snapserver.start @@ -0,0 +1,39 @@ +#!/bin/sh +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2018-present Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +. /etc/profile +oe_setup_addon service.snapserver + +case "$ss_ps" in + Default) + ss_us="--stream pipe:///tmp/snapfifo?name=Default" + ;; + Airplay) + ss_us="--stream airplay:///shairport-sync?name=Airplay" + ;; + Spotify) + ss_us="--stream spotify:///librespot?name=Spotify" + ;; +esac + +snapserver \ + --controlPort "$ss_cp" \ + --daemon "$ss_ni" \ + --port "$ss_sp" \ + $ss_us diff --git a/packages/addons/service/snapserver/source/default.py b/packages/addons/service/snapserver/source/default.py new file mode 100644 index 0000000000..a4ba4d9ce1 --- /dev/null +++ b/packages/addons/service/snapserver/source/default.py @@ -0,0 +1,39 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2018-present Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +import subprocess +import xbmc +import xbmcaddon + + +def systemctl(command): + subprocess.call( + ['systemctl', command, xbmcaddon.Addon().getAddonInfo('id')]) + + +class Monitor(xbmc.Monitor): + + def __init__(self, *args, **kwargs): + xbmc.Monitor.__init__(self) + + def onSettingsChanged(self): + systemctl('restart') + + +if __name__ == '__main__': + Monitor().waitForAbort() diff --git a/packages/addons/service/snapserver/source/resources/language/English/strings.po b/packages/addons/service/snapserver/source/resources/language/English/strings.po new file mode 100644 index 0000000000..2ee26e3825 --- /dev/null +++ b/packages/addons/service/snapserver/source/resources/language/English/strings.po @@ -0,0 +1,30 @@ +# Kodi Media Center language file +# Addon Name: snapserver +# Addon id: service.snapclient +# Addon Provider: Team LibreELEC +msgid "" +msgstr "" + +msgctxt "#30000" +msgid "Snapserver" +msgstr "" + +msgctxt "#30001" +msgid "Server port" +msgstr "" + +msgctxt "#30002" +msgid "Control port" +msgstr "" + +msgctxt "#30003" +msgid "Priority" +msgstr "" + +msgctxt "#30004" +msgid "Preset" +msgstr "" + +msgctxt "#30005" +msgid "Stream" +msgstr "" diff --git a/packages/addons/service/snapserver/source/resources/settings.xml b/packages/addons/service/snapserver/source/resources/settings.xml new file mode 100644 index 0000000000..2a1ea8583a --- /dev/null +++ b/packages/addons/service/snapserver/source/resources/settings.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/addons/service/snapserver/source/settings-default.xml b/packages/addons/service/snapserver/source/settings-default.xml new file mode 100644 index 0000000000..1876e660ca --- /dev/null +++ b/packages/addons/service/snapserver/source/settings-default.xml @@ -0,0 +1,7 @@ + + 1705 + 0 + Airplay + 1704 + --stream pipe:///tmp/snapfifo?name=default + diff --git a/packages/addons/service/snapserver/source/system.d/service.snapserver.service b/packages/addons/service/snapserver/source/system.d/service.snapserver.service new file mode 100644 index 0000000000..09232a23f5 --- /dev/null +++ b/packages/addons/service/snapserver/source/system.d/service.snapserver.service @@ -0,0 +1,11 @@ +[Unit] +Description=Snapserver +After=kodi.service network-online.target sound.target +Requires=kodi.service network-online.target sound.target + +[Service] +Type=forking +ExecStart=/bin/sh /storage/.kodi/addons/service.snapserver/bin/snapserver.start + +[Install] +WantedBy=kodi.target