#!/bin/bash

# SPDX-License-Identifier: GPL-2.0-only
# Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv)

. /etc/profile
oe_setup_addon service.nextpvr

ICON="${ADDON_DIR}/resources/icon.png"
CONTROL_FILE="/tmp/curl.nextpvr.done"
DATA_FILE="/tmp/curl.nextpvr.data"
NEXTPVR_VERSION="@NEXTPVR_VERSION@"
NEXTPVR_FILE="NPVR-${NEXTPVR_VERSION%~*}.zip"

# check for enough free disk space
if [ $(df . | awk 'END {print $4}') -lt 400000 ]; then
  kodi-send --action="Notification(Not enough disk space, at least 400MB are required,30000,${ICON})" >/dev/null
  exit 0
fi

# remove install status and folders
if [ -f ${ADDON_DIR}/extract.ok ]; then
  rm ${ADDON_DIR}/extract.ok
fi

if [ -d ${ADDON_DIR}/nextpvr-bin ]; then
  rm -rf ${ADDON_DIR}/nextpvr-bin
fi

if [ -d ${ADDON_DIR}/tmp_download ]; then
  rm -rf ${ADDON_DIR}/tmp_download
fi

# create tmp download dir
mkdir -p ${ADDON_DIR}/tmp_download
cd ${ADDON_DIR}/tmp_download

echo "Downloading NextPVR"

# download NextPVR
rm -f ${CONTROL_FILE} ${DATA_FILE}
(
  curl -L -# -O -C - https://github.com/sub3/releases/releases/download/${NEXTPVR_VERSION%~*}/${NEXTPVR_FILE} 2>${DATA_FILE}
  touch ${CONTROL_FILE}
) |
  while [ : ]; do
    [ -f ${DATA_FILE} ] && prog="$(tr '\r' '\n' <${DATA_FILE} | tail -n 1 | sed -r 's/^[# ]+/#/;s/^[^0-9]*//g')" || prog=
    kodi-send --action="Notification(Downloading NextPVR,\"${prog:-0.0%}\",3000,${ICON})" >/dev/null
    [ -f ${CONTROL_FILE} ] && break
    sleep 4
  done

rm -f ${CONTROL_FILE} ${DATA_FILE}

# check for failed download
if [ ! -f ${NEXTPVR_FILE} ]; then
  kodi-send --action="Notification(Download NextPVR failed,${ICON})"
  exit 1
fi

# extract NextPVR
kodi-send --action="Notification(Extracting NextPVR,starting,1000,${ICON})" >/dev/null
mkdir -p ${ADDON_DIR}/nextpvr-bin

chmod +x ${ADDON_DIR}/lbin/hdhomerun_config
chmod +x ${ADDON_DIR}/lbin/comskip
ln -s ${ADDON_DIR}/lbin/hdhomerun_config ${ADDON_DIR}/nextpvr-bin
ln -s ${ADDON_DIR}/lib.private/libmediainfo.so ${ADDON_DIR}/nextpvr-bin

unzip ${NEXTPVR_FILE} -d ${ADDON_DIR}/nextpvr-bin >/dev/null

if [ "$(uname -m)" != "x86_64" ]; then
  sed -i 's/<TranscodeHLS>default<\/TranscodeHLS>/<TranscodeHLS>-y [ANALYZE_DURATION] [SEEK] -i [SOURCE] -map_metadata -1 -threads [THREADS] -ignore_unknown -map 0:v:0? [PREFERRED_LANGUAGE] -map 0:a:[AUDIO_STREAM] -map -0:s -vcodec copy -acodec aac -ac 2 -c:s copy -hls_time [SEGMENT_DURATION] -start_number 0 -hls_list_size [SEGMENT_COUNT] -y [TARGET]<\/TranscodeHLS>/' ${ADDON_DIR}/nextpvr-bin/data/Config-master-dont-edit.xml
fi
sed -i 's/<RecordingDirectory>C:\\Users\\Public\\Videos\\<\/RecordingDirectory>/<RecordingDirectory>\/storage\/tvshows\/<\/RecordingDirectory>/' ${ADDON_DIR}/nextpvr-bin/data/Config-master-dont-edit.xml
sed -i 's/<LiveTVBufferDirectory>C:\\Users\\Public\\Videos\\<\/LiveTVBufferDirectory>/<LiveTVBufferDirectory>\/tmp\/<\/LiveTVBufferDirectory>/' ${ADDON_DIR}/nextpvr-bin/data/Config-master-dont-edit.xml
find ${ADDON_DIR}/nextpvr-bin/DeviceHost -name DeviceHostLinux -exec chmod 755 {} \;

# cleanup
cd ${ADDON_DIR}
rm -rf ${ADDON_DIR}/tmp_download
touch ${ADDON_DIR}/extract.ok
kodi-send --action="Notification(Extracting NextPVR,finished,1000,${ICON})" >/dev/null
