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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 z 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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