From b3800a65bac4ae2308173061c081fc50f8bc671c Mon Sep 17 00:00:00 2001 From: awiouy Date: Mon, 4 Jun 2018 23:45:38 +0200 Subject: [PATCH] tvmosaic: initial addon --- .../addons/service/tvmosaic/changelog.txt | 2 + .../addons/service/tvmosaic/icon/icon.png | Bin 0 -> 38276 bytes packages/addons/service/tvmosaic/package.mk | 76 ++++++++++++++++++ .../service/tvmosaic/source/bin/tvmosaic.cli | 25 ++++++ .../tvmosaic/source/bin/tvmosaic.start | 42 ++++++++++ .../addons/service/tvmosaic/source/default.py | 39 +++++++++ .../resources/language/English/strings.po | 14 ++++ .../tvmosaic/source/resources/settings.xml | 6 ++ .../tvmosaic/source/settings-default.xml | 3 + .../source/system.d/service.tvmosaic.service | 13 +++ 10 files changed, 220 insertions(+) create mode 100644 packages/addons/service/tvmosaic/changelog.txt create mode 100644 packages/addons/service/tvmosaic/icon/icon.png create mode 100644 packages/addons/service/tvmosaic/package.mk create mode 100755 packages/addons/service/tvmosaic/source/bin/tvmosaic.cli create mode 100755 packages/addons/service/tvmosaic/source/bin/tvmosaic.start create mode 100644 packages/addons/service/tvmosaic/source/default.py create mode 100644 packages/addons/service/tvmosaic/source/resources/language/English/strings.po create mode 100644 packages/addons/service/tvmosaic/source/resources/settings.xml create mode 100644 packages/addons/service/tvmosaic/source/settings-default.xml create mode 100644 packages/addons/service/tvmosaic/source/system.d/service.tvmosaic.service diff --git a/packages/addons/service/tvmosaic/changelog.txt b/packages/addons/service/tvmosaic/changelog.txt new file mode 100644 index 0000000000..ffbebe8438 --- /dev/null +++ b/packages/addons/service/tvmosaic/changelog.txt @@ -0,0 +1,2 @@ +100 +- Initial addon diff --git a/packages/addons/service/tvmosaic/icon/icon.png b/packages/addons/service/tvmosaic/icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..620c7e1738c9ac751e5aa4b9c06e0c7759d411b9 GIT binary patch literal 38276 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 My56%AwO1kk2gj@sH~;_u literal 0 HcmV?d00001 diff --git a/packages/addons/service/tvmosaic/package.mk b/packages/addons/service/tvmosaic/package.mk new file mode 100644 index 0000000000..1452d1b06f --- /dev/null +++ b/packages/addons/service/tvmosaic/package.mk @@ -0,0 +1,76 @@ +################################################################################ +# 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 . +################################################################################ + +PKG_NAME="tvmosaic" +PKG_VERSION="1.0.0-16296" +PKG_REV="100" +PKG_ARCH="arm" +PKG_LICENSE="Prop." +PKG_SITE="https://tv-mosaic.com" +PKG_URL="https://github.com/awiouy/tvmosaic/archive/$PKG_VERSION.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_SECTION="service" +PKG_SHORTDESC="TV Mosaic" +PKG_LONGDESC="TV Mosaic ($PKG_VERSION) live and recorded TV for Kodi and DLNA clients" + +PKG_IS_ADDON="yes" +PKG_ADDON_NAME="TV Mosaic" +PKG_ADDON_TYPE="xbmc.service" +PKG_MAINTAINER="Anton Voyl (awiouy)" + +configure_target() { + : +} + +make_target() { + : +} + +makeinstall_target() { + : +} + +debug_strip() { + : +} + +addon() { + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin + cp $PKG_BUILD/tvmosaic/tvmosaic_reg \ + $PKG_BUILD/tvmosaic/tvmosaic_server \ + $PKG_BUILD/tvmosaic/version.dat \ + $ADDON_BUILD/$PKG_ADDON_ID/bin + + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/config/shared.inst/RecordedTV \ + $ADDON_BUILD/$PKG_ADDON_ID/config/shared.inst/channel_logo \ + $ADDON_BUILD/$PKG_ADDON_ID/config/shared.inst/xmltv + cp -r $PKG_BUILD/tvmosaic/data \ + $PKG_BUILD/tvmosaic/shared.inst \ + $ADDON_BUILD/$PKG_ADDON_ID/config + echo $PKG_REV > $ADDON_BUILD/$PKG_ADDON_ID/config/pkg_rev + + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/lib + cp -L $PKG_BUILD/tvmosaic/lib/libcares.so.2 \ + $PKG_BUILD/tvmosaic/lib/libdvbapi.so \ + $PKG_BUILD/tvmosaic/lib/libdvben50221.so \ + $PKG_BUILD/tvmosaic/lib/libiconv.so.2 \ + $PKG_BUILD/tvmosaic/lib/libidn.so.11 \ + $PKG_BUILD/tvmosaic/lib/libssh2.so.1 \ + $PKG_BUILD/tvmosaic/lib/libucsi.so \ + $ADDON_BUILD/$PKG_ADDON_ID/lib +} diff --git a/packages/addons/service/tvmosaic/source/bin/tvmosaic.cli b/packages/addons/service/tvmosaic/source/bin/tvmosaic.cli new file mode 100755 index 0000000000..d2a78db447 --- /dev/null +++ b/packages/addons/service/tvmosaic/source/bin/tvmosaic.cli @@ -0,0 +1,25 @@ +#!/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.tvmosaic + +export TVMOSAIC_ROOT_CONFIG_DIR="$ADDON_HOME" + +tvmosaic_server -command_line_mode diff --git a/packages/addons/service/tvmosaic/source/bin/tvmosaic.start b/packages/addons/service/tvmosaic/source/bin/tvmosaic.start new file mode 100755 index 0000000000..abbd7953f7 --- /dev/null +++ b/packages/addons/service/tvmosaic/source/bin/tvmosaic.start @@ -0,0 +1,42 @@ +#!/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.tvmosaic + +sleep "$tvm_delay" + +export TVMOSAIC_ROOT_CONFIG_DIR="$ADDON_HOME" + +pkg_rev() { + cat "$1/pkg_rev" 2> /dev/null +} + +if [ "$(pkg_rev $ADDON_DIR/config)" != "$(pkg_rev $ADDON_HOME)" ]; then + cp -r "$ADDON_DIR/config/"* "$ADDON_HOME" +fi + +if [ -f "$ADDON_HOME/tvmosaic_configuration.xml" ]; then + tvmosaic_reg -reginstall "$ADDON_HOME/data/common/product_info/tvmosaic.xml" update +else + tvmosaic_reg -preparenewinstall "$ADDON_DIR/bin" "$ADDON_HOME/data" "$ADDON_HOME/shared.inst" + tvmosaic_reg -reginstall "$ADDON_HOME/data/common/product_info/tvmosaic.xml" install +fi + +tvmosaic_server diff --git a/packages/addons/service/tvmosaic/source/default.py b/packages/addons/service/tvmosaic/source/default.py new file mode 100644 index 0000000000..a4ba4d9ce1 --- /dev/null +++ b/packages/addons/service/tvmosaic/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/tvmosaic/source/resources/language/English/strings.po b/packages/addons/service/tvmosaic/source/resources/language/English/strings.po new file mode 100644 index 0000000000..537e7c5cc7 --- /dev/null +++ b/packages/addons/service/tvmosaic/source/resources/language/English/strings.po @@ -0,0 +1,14 @@ +# Kodi Media Center language file +# Addon Name: tvmosaic +# Addon id: service.tvmosaic +# Addon Provider: Team LibreELEC +msgid "" +msgstr "" + +msgctxt "#30000" +msgid "Configuration" +msgstr "" + +msgctxt "#30001" +msgid "Start delay" +msgstr "" diff --git a/packages/addons/service/tvmosaic/source/resources/settings.xml b/packages/addons/service/tvmosaic/source/resources/settings.xml new file mode 100644 index 0000000000..131f906384 --- /dev/null +++ b/packages/addons/service/tvmosaic/source/resources/settings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/addons/service/tvmosaic/source/settings-default.xml b/packages/addons/service/tvmosaic/source/settings-default.xml new file mode 100644 index 0000000000..6facb0d900 --- /dev/null +++ b/packages/addons/service/tvmosaic/source/settings-default.xml @@ -0,0 +1,3 @@ + + + diff --git a/packages/addons/service/tvmosaic/source/system.d/service.tvmosaic.service b/packages/addons/service/tvmosaic/source/system.d/service.tvmosaic.service new file mode 100644 index 0000000000..5c45fdea05 --- /dev/null +++ b/packages/addons/service/tvmosaic/source/system.d/service.tvmosaic.service @@ -0,0 +1,13 @@ +[Unit] +Description=TV Mosaic Server +Documentation=https://tv-mosaic.com +After=network-online.target +Requires=network-online.target + +[Service] +ExecStart=/bin/sh /storage/.kodi/addons/service.tvmosaic/bin/tvmosaic.start +Type=forking +Restart=always + +[Install] +WantedBy=kodi.target