diff --git a/packages/addons/service/multimedia/tvheadend/source/bin/tvheadend.start b/packages/addons/service/multimedia/tvheadend/source/bin/tvheadend.start index f56e3c39fb..aac0b73d3e 100755 --- a/packages/addons/service/multimedia/tvheadend/source/bin/tvheadend.start +++ b/packages/addons/service/multimedia/tvheadend/source/bin/tvheadend.start @@ -22,14 +22,8 @@ . /etc/profile -LOCKDIR="/var/lock/" -LOCKFILE="tvheadend.disabled" -LOCKFILE_SLEEP="tvheadend.sleep" - ADDON_DIR="$HOME/.xbmc/addons/service.multimedia.tvheadend" -ADDON_SYS_DIR="/usr/lib/xbmc/addons/service.multimedia.tvheadend" ADDON_HOME="$HOME/.xbmc/userdata/addon_data/service.multimedia.tvheadend" -ADDON_BIN="tvheadend" LOG_FILE="$ADDON_HOME/service.log" ADDON_SETTINGS="$ADDON_HOME/settings.xml" XMLTV_FILE="$ADDON_DIR/bin/tv_grab_file" @@ -42,29 +36,13 @@ TIMESHIFT_SETTINGS_DIR="$ADDON_HOME/timeshift" TIMESHIFT_SETTINGS_FILE="$TIMESHIFT_SETTINGS_DIR/config" TIMESHIFT_DIR="$ADDON_HOME/cache/timeshift" -## handle upgrade. this should be removed later - -# remove any old hts-tvheadend dir -if [ -d $HOME/.xbmc/addons/service.multimedia.hts-tvheadend ] ; then - # stop old service if runing - $HOME/.xbmc/addons/service.multimedia.hts-tvheadend/bin/tvheadend.stop - rm -rf $HOME/.xbmc/addons/service.multimedia.hts-tvheadend -fi - -# reuse old config files -if [ -d $HOME/.xbmc/userdata/addon_data/service.multimedia.hts-tvheadend ] ; then - mv $HOME/.xbmc/userdata/addon_data/service.multimedia.hts-tvheadend $ADDON_HOME - sed -i 's/service.multimedia.hts-tvheadend/service.multimedia.tvheadend/g' $ADDON_HOME/xmltv/config -fi -## - mkdir -p $ADDON_HOME +chmod a+x $ADDON_DIR/bin/* + if [ ! -f "$ADDON_SETTINGS" ]; then if [ -f $ADDON_DIR/settings-default.xml ]; then cp $ADDON_DIR/settings-default.xml $ADDON_SETTINGS - elif [ -f $ADDON_SYS_DIR/settings-default.xml ]; then - cp $ADDON_SYS_DIR/settings-default.xml $ADDON_SETTINGS fi fi @@ -72,8 +50,6 @@ if [ ! -f "$XMLTV_SETTINGS_FILE" ]; then mkdir -p $XMLTV_SETTINGS_DIR if [ -f $ADDON_DIR/xmltv-config ]; then cp $ADDON_DIR/xmltv-config $XMLTV_SETTINGS_FILE - elif [ -f $ADDON_SYS_DIR/xmltv-config ]; then - cp $ADDON_SYS_DIR/xmltv-config $XMLTV_SETTINGS_FILE fi fi @@ -82,8 +58,6 @@ if [ ! -f "$DVR_SETTINGS_FILE" ]; then mkdir -p $DVR_SETTINGS_DIR if [ -f $ADDON_DIR/dvr-config ]; then cp $ADDON_DIR/dvr-config $DVR_SETTINGS_FILE - elif [ -f $ADDON_SYS_DIR/dvr-config ]; then - cp $ADDON_SYS_DIR/dvr-config $DVR_SETTINGS_FILE fi fi @@ -92,8 +66,6 @@ if [ ! -f "$TIMESHIFT_SETTINGS_FILE" ]; then mkdir -p $TIMESHIFT_SETTINGS_DIR if [ -f $ADDON_DIR/timeshift-config ]; then cp $ADDON_DIR/timeshift-config $TIMESHIFT_SETTINGS_FILE - elif [ -f $ADDON_SYS_DIR/timeshift-config ]; then - cp $ADDON_SYS_DIR/timeshift-config $TIMESHIFT_SETTINGS_FILE fi fi @@ -104,45 +76,32 @@ else fi mkdir -p /var/config - if [ -f $ADDON_DIR/settings-default.xml ]; then - cat "$ADDON_DIR/settings-default.xml" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/tvheadend.conf.default - elif [ -f $ADDON_SYS_DIR/settings-default.xml ]; then - cat "$ADDON_SYS_DIR/settings-default.xml" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/tvheadend.conf.default - fi - cat "$ADDON_SETTINGS" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/tvheadend.conf +if [ -f $ADDON_DIR/settings-default.xml ]; then + cat "$ADDON_DIR/settings-default.xml" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/tvheadend.conf.default +fi +cat "$ADDON_SETTINGS" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/tvheadend.conf . /var/config/tvheadend.conf.default . /var/config/tvheadend.conf - rm -rf "$LOCKDIR/$LOCKFILE_SLEEP" &>/dev/null - tvheadend.stop - rm -rf "$LOCKDIR/$LOCKFILE" &>/dev/null - if [ ! "$(pidof $ADDON_BIN)" ]; then - while [ true ] ; do - while [ -f "$LOCKDIR/$LOCKFILE_SLEEP" ] ; do - usleep 100000 - done - if [ -f "$LOCKDIR/$LOCKFILE" ] ; then - break - fi - # start userspace DVB driver/addon - for driver_dvb in $(find /storage/.xbmc/addons/driver.dvb.*/bin/userspace-driver.sh -type f 2>/dev/null); do - driver_dvb_name=$(echo $driver_dvb | awk 'BEGIN {FS="/"} {printf("%s", $5)}') - logger -t Tvheadend "### Loading userspace DVB driver: $driver_dvb_name ###" - # use ". " because of variable export - . $driver_dvb - done - # (wait for) at least 1 adapter (xbmc allows to set 0) - [ $NUM_ADAPTERS -lt 1 ] && NUM_ADAPTERS=1 - if [ "$WAIT_FOR_FEINIT" == "true" ] && [ ! -e /dev/dvb/adapter$((NUM_ADAPTERS-1))/frontend* ] ; then - sleep 1 - continue - fi - if [ "$PRELOAD_CAPMT_CA" == "true" ] ; then - logger -t Tvheadend "### Preloading capmt_ca.so library ###" - LD_PRELOAD="$ADDON_DIR/bin/capmt_ca.so $LD_PRELOAD" $ADDON_BIN $TVHEADEND_ARG &>$LOG_FILE - else - $ADDON_BIN $TVHEADEND_ARG &>$LOG_FILE - fi - done & - fi +# start userspace DVB driver/addon +for driver_dvb in $(find /storage/.xbmc/addons/driver.dvb.*/bin/userspace-driver.sh -type f 2>/dev/null); do + driver_dvb_name=$(echo $driver_dvb | awk 'BEGIN {FS="/"} {printf("%s", $5)}') + logger -t Tvheadend "### Loading userspace DVB driver: $driver_dvb_name ###" + # use ". " because of variable export + . $driver_dvb +done + +# (wait for) at least 1 adapter (xbmc allows to set 0) +[ $NUM_ADAPTERS -lt 1 ] && NUM_ADAPTERS=1 +if [ "$WAIT_FOR_FEINIT" == "true" ] && [ ! -e /dev/dvb/adapter$((NUM_ADAPTERS-1))/frontend* ] ; then + sleep 1 + continue +fi + +if [ "$PRELOAD_CAPMT_CA" == "true" ] ; then + logger -t Tvheadend "### Preloading capmt_ca.so library ###" + LD_PRELOAD="$ADDON_DIR/bin/capmt_ca.so $LD_PRELOAD" exec tvheadend $TVHEADEND_ARG &>$LOG_FILE +else + exec tvheadend $TVHEADEND_ARG &>$LOG_FILE +fi diff --git a/packages/addons/service/multimedia/tvheadend/source/bin/tvheadend.stop b/packages/addons/service/multimedia/tvheadend/source/bin/tvheadend.stop deleted file mode 100755 index 6713e0249c..0000000000 --- a/packages/addons/service/multimedia/tvheadend/source/bin/tvheadend.stop +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) -# -# This Program 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, or (at your option) -# any later version. -# -# This Program 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. /etc/profile - -LOCKDIR="/var/lock/" -LOCKFILE="tvheadend.disabled" -LOCKFILE_SLEEP="tvheadend.sleep" - -ADDON_BIN="tvheadend" - -mkdir -p "$LOCKDIR" -if [ ! -e "$LOCKDIR/$LOCKFILE_SLEEP" ] ; then - touch "$LOCKDIR/$LOCKFILE" -fi - -if [ "$(pidof $ADDON_BIN)" ] ; then - killall -q $ADDON_BIN - for seq in `seq 1 10` ; do - if [ ! "$(pidof $ADDON_BIN)" ] ; then - break - fi - usleep 200000 - done - killall -q -9 $ADDON_BIN -fi diff --git a/packages/addons/service/multimedia/tvheadend/source/default.py b/packages/addons/service/multimedia/tvheadend/source/default.py index d011cbf6f8..6f814651a2 100644 --- a/packages/addons/service/multimedia/tvheadend/source/default.py +++ b/packages/addons/service/multimedia/tvheadend/source/default.py @@ -17,23 +17,3 @@ # the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. # http://www.gnu.org/copyleft/gpl.html ################################################################################ - -import xbmc, xbmcaddon, time, os, subprocess - -__scriptname__ = "TVHeadend Service" -__author__ = "OpenELEC" -__url__ = "http://www.openelec.tv" -__settings__ = xbmcaddon.Addon(id='service.multimedia.tvheadend') -__cwd__ = __settings__.getAddonInfo('path') -__start__ = xbmc.translatePath( os.path.join( __cwd__, 'bin', "tvheadend.start") ) -__stop__ = xbmc.translatePath( os.path.join( __cwd__, 'bin', "tvheadend.stop") ) - -#make binary files executable in adson bin folder -subprocess.Popen("chmod -R +x " + __cwd__ + "/bin/*" , shell=True, close_fds=True) - -subprocess.Popen(__start__, shell=True, close_fds=True) - -while (not xbmc.abortRequested): - time.sleep(0.250) - -subprocess.Popen(__stop__, shell=True, close_fds=True) diff --git a/packages/addons/service/multimedia/tvheadend/source/sleep.d/tvheadend.power b/packages/addons/service/multimedia/tvheadend/source/sleep.d/tvheadend.power index 3f63e940c4..611b24bae6 100755 --- a/packages/addons/service/multimedia/tvheadend/source/sleep.d/tvheadend.power +++ b/packages/addons/service/multimedia/tvheadend/source/sleep.d/tvheadend.power @@ -22,35 +22,28 @@ . /etc/profile +SERVICE="service.multimedia.tvheadend" ADDON_HOME="$HOME/.xbmc/userdata/addon_data/service.multimedia.tvheadend" ADDON_SETTINGS="$ADDON_HOME/settings.xml" REMOVE_MODULES=`grep REMOVE_MODULES $ADDON_SETTINGS | sed 's|.*value="\([^"]*\)".*|\1|g'` -LOCKFILE_SLEEP="/var/lock/tvheadend.sleep" - ADDON_DIR="$HOME/.xbmc/addons/service.multimedia.tvheadend" case "$1" in - hibernate|suspend|pre) - if [ "$(pidof tvheadend)" ];then - progress "Shutting down HTS TVHeadend for suspending..." - touch $LOCKFILE_SLEEP - tvheadend.stop + pre) + if systemctl is-active "$SERVICE" &>/dev/null ; then + systemctl stop "$SERVICE" for module in $REMOVE_MODULES ; do rmmod -w $module done fi ;; - - thaw|resume|post) - if [ -f "$LOCKFILE_SLEEP" ] ; then - progress "Restarting HTS TVHeadend for wakeup..." + post) + if systemctl is-enabled "$SERVICE" &>/dev/null ; then for module in $REMOVE_MODULES ; do modprobe $module done - rm -rf "$LOCKFILE_SLEEP" + systemctl start "$SERVICE" fi ;; - *) exit $NA - ;; esac diff --git a/packages/addons/service/multimedia/tvheadend/source/system.d/service.multimedia.tvheadend.service b/packages/addons/service/multimedia/tvheadend/source/system.d/service.multimedia.tvheadend.service new file mode 100644 index 0000000000..9458d6b5aa --- /dev/null +++ b/packages/addons/service/multimedia/tvheadend/source/system.d/service.multimedia.tvheadend.service @@ -0,0 +1,13 @@ +[Unit] +Description=TVHeadend Service +After=graphical.target + +[Service] +ExecStart=/bin/sh -c "exec sh /storage/.xbmc/addons/service.multimedia.tvheadend/bin/tvheadend.start" +TimeoutStopSec=2 +Restart=always +RestartSec=2 +StartLimitInterval=0 + +[Install] +WantedBy=xbmc.target