#!/bin/bash
#
#Copyright 2012 - 2019 CurlyMo, mk01 & mkreisl <development@xbian.org>
#
#This file is part of XBian - XBMC on the Raspberry Pi.
#
#XBian 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 3 of the License, or (at your option) any later
#version.
#
#XBian 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 XBian. If not, see <http://www.gnu.org/licenses/>

# Sets the webserver setting XBMC
#  $1: [Integer] 1 or 0
# Returns
# - 0: Failed
# - 1: Success
function setXBMCWebserverFn() {
        if [ $1 -eq 1 ]; then
                NEWSET="false";
        else
                NEWSET="true";
        fi

        [ -d /home/xbian/.kodi ] && XBMC_KODI_DIR="/home/xbian/.kodi" || XBMC_KODI_DIR="/home/xbian/.xbmc"
        OLDSET=$(sed -ne 's/\(.*<webserver>\)\([a-z]\{1,5\}\)\(<\/webserver>\)/\2/p' $XBMC_KODI_DIR/userdata/advancedsettings.xml);
        if [ -z "$OLDSET" ]; then
                if [ $(grep -c "lookandfeel" $XBMC_KODI_DIR/userdata/advancedsettings.xml) -eq 2 ]; then
                        sed -i "s/<\/lookandfeel>/     <webserver>$NEWSET<\/webserver>\n   <\/lookandfeel>/g" $XBMC_KODI_DIR/userdata/advancedsettings.xml
                else
                        sed -i "s/<\/advancedsettings>/   <lookandfeel>\n     <webserver>$NEWSET<\/webserver>\n   <\/lookandfeel>\n<\/advancedsettings>/g" $XBMC_KODI_DIR/userdata/advancedsettings.xml
                fi
        else
                sed -i "s/<webserver>$OLDSET<\/webserver>/<webserver>$NEWSET<\/webserver>/g" $XBMC_KODI_DIR/userdata/advancedsettings.xml
        fi
        if [ "$(sed -ne 's/\(.*<webserver>\)\([a-z]\{1,5\}\)\(<\/webserver>\)/\2/p' $XBMC_KODI_DIR/userdata/advancedsettings.xml)" == "$NEWSET" ]; then
                return 1;
        else
                return 0;
        fi
}

# Gets the webserver setting XBMC
# Returns
# - 0: Disabled
# - 1: Enabled
function getXBMCWebserverFn() {
        [ -d /home/xbian/.kodi ] && XBMC_KODI_DIR="/home/xbian/.kodi" || XBMC_KODI_DIR="/home/xbian/.xbmc"
	CURSET=$(sed -ne 's/\(.*<webserver>\)\([a-z]\{1,5\}\)\(<\/webserver>\)/\2/p' $XBMC_KODI_DIR/userdata/advancedsettings.xml);
	if [ -z "$CURSET" ] || [ "$CURSET" == "false" ]; then
		return 0;
	else
		return 1;
	fi
}

function getXBMCtvoffFn() {
    [ ! -e /etc/default/xbmc ] && return 1
    [ "$(awk -F'=' '/^SCREENOFF=/{print $2}' /etc/default/xbmc)" = yes ]; SO=$?
    AF=$(awk -F'=' '/^AFTER=/{print $2}' /etc/default/xbmc); AF=${AF:-0}
    [ "$(awk -F'=' '/^IGNOREPLAYER=/{print $2}' /etc/default/xbmc)" = yes ]; IP=$((1-$?))
    echo "$((1-$SO)) $AF $IP"
    return $SO
}

function setXBMCtvoffFn() {
    [ ! -e /etc/default/xbmc ] && return 1
    [ -n "$2" ] && sed -i "s/AFTER=.*/AFTER=$2/g" /etc/default/xbmc
    [ -n "$3" -a "$3" -gt 0 ] && v='yes' || v='no'
    sed -i "s/IGNOREPLAYER=.*/IGNOREPLAYER=$v/g" /etc/default/xbmc
    [ "$1" -gt 0 ] && v='yes' || v='no'
    sed -i "s/SCREENOFF=.*/SCREENOFF=$v/g" /etc/default/xbmc
    grep -q "SCREENOFF=$v" /etc/default/xbmc
    echo $((1-$?))
}

function getXBMCexitoffFn() {
    [ ! -e /etc/default/xbmc ] && return 1
    grep -q XBMCOFF=yes /etc/default/xbmc
    return $?
}

function setXBMCexitoffFn() {
    [ ! -e /etc/default/xbmc ] && return 1
    [ "$1" -gt 0 ] && v='yes' || v='no'
    sed -i "s/XBMCOFF=.*/XBMCOFF=$v/g" /etc/default/xbmc
    grep -q "XBMCOFF=$v" /etc/default/xbmc
}

function getXBMChaltoffFn() {
    [ ! -e /etc/default/xbmc ] && return 1
    grep -q SCROFFHALT=yes /etc/default/xbmc
    return $?
}

function setXBMChaltoffFn() {
    [ ! -e /etc/default/xbmc ] && return 1
    [ "$1" -gt 0 ] && v='yes' || v='no'
    sed -i "s/SCROFFHALT=.*/SCROFFHALT=$v/g" /etc/default/xbmc
    grep -q "SCROFFHALT=$v" /etc/default/xbmc
}

function getXBMCtvonFn() {
    [ ! -e /etc/default/xbmc ] && return 1
    grep -q XBMCEXITON=yes /etc/default/xbmc
    return $?
}

function setXBMCtvonFn() {
    [ ! -e /etc/default/xbmc ] && return 1
    [ "$1" -gt 0 ] && v='yes' || v='no'
    sed -i "s/XBMCEXITON=.*/XBMCEXITON=$v/g" /etc/default/xbmc
    grep -q "XBMCEXITON=$v" /etc/default/xbmc
}

function getXBMCpriorityFn() {
    [ ! -e /etc/default/xbmc ] && return 1
    [ "$(awk -F'=' '/^DPRIORITY=/{print $2}' /etc/default/xbmc)" = yes ]
    return $?
}

function setXBMCpriorityFn() {
    [ ! -e /etc/default/xbmc ] && return 1

    P=$(grep PSAVER /etc/default/xbmc)
    [ -n "$2" ] && eval $(echo "sed -i 's/$P/PSAVER=\"$2\"/' /etc/default/xbmc")
    P=$(grep PPLAYER /etc/default/xbmc)
    [ -n "$3" ] && eval $(echo "sed -i 's/$P/PPLAYER=\"$3\"/' /etc/default/xbmc")

    if grep -q DPRIORITY=yes /etc/default/xbmc; then
        if [ $1 -eq 0 ]; then
            sed -i 's/DPRIORITY=yes/DPRIORITY=no/' /etc/default/xbmc
            grep -q DPRIORITY=no /etc/default/xbmc
            return $?
        else
            return 0
        fi
    elif grep -q DPRIORITY=no /etc/default/xbmc; then
        if [ $1 -eq 1 ]; then
            sed -i 's/DPRIORITY=no/DPRIORITY=yes/' /etc/default/xbmc
            grep -q DPRIORITY=yes /etc/default/xbmc
            return $?
        else
            return 0
        fi
    fi

    return 1
}

function getXBMCusbautoFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && return 1
    [ "$(awk -F'=' '/^ENABLED=/{print $2}' /etc/usbmount/usbmount.conf)" \> 0 ]
    return $?
}

function setXBMCusbautoFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && return 1
    [ "$1" -gt 0 ] && { v='1'; c='start'; } || { v='0'; c='stop'; }
    sed -i "s/ENABLED=.*/ENABLED=$v/g" /etc/usbmount/usbmount.conf
    $c -q usbmount-cleaner 2>/dev/null
    grep -q "ENABLED=$v" /etc/usbmount/usbmount.conf
    return $?
}

function getXBMCusbsyncFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && return 1
    grep ^MOUNTOPTIONS= /etc/usbmount/usbmount.conf | grep -qw sync
    return $?
}

function setXBMCusbsyncFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && return 1
    if [ $1 -eq 0 ]; then
        getXBMCusbsyncFn || return 0
        o=$(grep ^MOUNTOPTIONS= /etc/usbmount/usbmount.conf)
        n=$(echo $o | sed 's/sync/async/')
        sed -i "s/$o/$n/g" /etc/usbmount/usbmount.conf
        getXBMCusbsyncFn || return 0
    else
        o=$(grep ^MOUNTOPTIONS= /etc/usbmount/usbmount.conf)
        n=$(echo $o | sed 's/async/sync/')
        sed -i "s/$o/$n/g" /etc/usbmount/usbmount.conf
        getXBMCusbsyncFn && return 0
    fi
    return 1
}

function getXBMCusbshareFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && return 1
    [ "$(awk -F'=' '/^SHARESMB=/{print $2}' /etc/usbmount/usbmount.conf)" = yes ]
    return $?
}

function setXBMCusbshareFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && return 1
    [ "$1" -gt 0 ] && v='yes' || v='no'
    sed -i "s/SHARESMB=.*/SHARESMB=$v/g" /etc/usbmount/usbmount.conf
    grep -q "SHARESMB=$v" /etc/usbmount/usbmount.conf
    return $?
}

function getXBMCsharerwFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && return 1
    [ "$(awk -F'=' '/^SHARERW=/{print $2}' /etc/usbmount/usbmount.conf)" = yes ]
    return $?
}

function setXBMCsharerwFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && return 1
    [ "$1" -gt 0 ] && v='yes' || v='no'
    sed -i "s/SHARERW=.*/SHARERW=$v/g" /etc/usbmount/usbmount.conf
    grep -q "SHARERW=$v" /etc/usbmount/usbmount.conf
    return $?
}

function getXBMCuuidnameFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && return 1
    [ "$(awk -F'=' '/^UUIDNAME=/{print $2}' /etc/usbmount/usbmount.conf)" = yes ]
    return $?
}

function setXBMCuuidnameFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && return 1
    [ "$1" -gt 0 ] && v='yes' || v='no'
    sed -i "s/UUIDNAME=.*/UUIDNAME=$v/g" /etc/usbmount/usbmount.conf
    grep -q "UUIDNAME=$v" /etc/usbmount/usbmount.conf
    return $?
}

function getXBMChddspinFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && echo 0
    awk -F'=' '/^SPINDOWN=/{print $2}' /etc/usbmount/usbmount.conf
}

function setXBMChddspinFn() {
    [ ! -e /etc/usbmount/usbmount.conf ] && return 1
    [ -z "$2" -o "$1" -eq 0 ] && tm=$1 || tm=$2
    [ $tm -gt 20 ] && return 1
    sed -i "s/SPINDOWN=.*/SPINDOWN=$tm/g" /etc/usbmount/usbmount.conf
    [ "$(getXBMChddspinFn)" = "$tm" ] && { for b in /dev/sd[a-d]; do DEVNAME=$b usbmount spindown; done; return 0; } || return 1
}
