#!/bin/bash
## script to fetch and build a module of yt-dlp
## by ncmprhnsbl @ forum.porteus.org
## version 20201126

. /usr/share/porteus/porteus-functions
get_colors

# Check for root
if [ $(whoami) != "root" ]; then
	echo "Only root can run this."
	exit 1
fi

# functions set work directory(default is /tmp) to current work directory
set_tmp() {
	WRKDIR=/tmp
}

set_pwd() {
	WRKDIR=$(pwd)
}
set_tmp
# set up fakeroot and set some variables

# echo usage
show_help() {
	echo " options:  -d : do operations in the present directory, instead of /tmp . "
	echo "           -h        : show this usage. "
}
while getopts ":-d:-h:" o; do
	case "$1" in

	-d)
		set_pwd
		;;

	-h)
		show_help
		exit 0
		;;

	*)
		show_help
		exit 1
		;;

	esac
done
case "$1" in

"")
	set_tmp
	;;

esac

PKG=yt-dlp
[ ! -d $WRKDIR/$PKG/usr/bin ] && mkdir -p $WRKDIR/$PKG/usr/bin
#[ ! -d $WRKDIR/$PKG/install ] && mkdir -p $WRKDIR/$PKG/install
BUILD=$WRKDIR/$PKG
BIND=$BUILD/usr/bin

checksum() {
	if [ -z $CHOICE ]; then
		echo "Verifying download integrity.."
		echo "Server  : $SUM1"
		echo "Download: $SUM2"
		if [ "$SUM1" = "$SUM2" ]; then
			echo "Download verified."
		else
			echo "Integrity check failed."
			cleanup
		fi
	fi
}

# tidy up after
cleanup() {
	echo
	[ -d $BUILD ] && rm -rf $BUILD
	[ -f $WRKDIR/SHA2-256SUMS ] && rm $WRKDIR/SHA2-256SUMS
	[ -f $WRKDIR/deno-*.zip ] && rm $WRKDIR/deno-*.zip
	[ -f $WRKDIR/quickjs*.zip ] && rm $WRKDIR/quickjs*.zip
	exit
}
trap cleanup SIGHUP SIGINT SIGTERM

# set arch
case $(uname -m) in
x86_64)
	ARCH=x86_64
	SUFFIX=64
	SARCH=x86_64
	;;
*)
	ARCH=i686
	SUFFIX=
	SARCH=i586
	;;
esac

# i586 unsupported
if [ $ARCH != "x86_64" ]; then
	echo "Sorry 32bit is no longer supported"
	exit 1
fi

# tell us where the work will be done
echo "Work will be done in: $txtgreen$WRKDIR$rst "
echo
echo "$txtgreen Note: now using yt-dlp instead of youtube-dl.$rst"
echo

#get version info
SERVER=$(awk -F= '/SERVER=/{print$NF}' /etc/porteus.conf)
VURL=https://github.com/yt-dlp/yt-dlp
VER=$(lynx --dump --nonumbers https://github.com/yt-dlp/yt-dlp | grep "releases/tag" | awk -F"/" '{print$NF}')
# download URL
URL=$VURL/releases/download/$VER/yt-dlp_linux
JURL1="https://github.com/denoland/deno/"
JVER1=$(lynx --dump --nonumbers $JURL1 | grep "releases/tag" | awk -F"/" '{print$NF}')
JDURL1="${JURL1}releases/download/$JVER1/deno-x86_64-unknown-linux-gnu.zip"
JURL2="https://bellard.org/quickjs/binary_releases/"
JVER2=$(lynx --dump --nonumbers $JURL2 | grep linux-x86_64 | tail -n1 | awk -F/ '{print$NF}')
JDURL2="$JURL2/$JVER2"
TAG=ncm
REV=1

array_menu(){
echo "$1"
echo "$2"
select CHOICE in ${RESULT[@]}; do
	if [ -z "$CHOICE" ]; then
		red "? java runtime chosen." && echo
			else
		echo "$txtgreen${CHOICE^^}$rst Java runtime chosen"
		echo
	fi
	break
done
}

get_js_interpreter(){
array_menu "Please choose a Javascript runtime from the menu:"
case $CHOICE in
	deno) JDURL="$JDURL1" JS_INT="deno-x86_64-unknown-linux-gnu.zip" ;;
	quickjs) JDURL="$JDURL2" JS_INT="$JVER2" ;;
	none) JDURL="none" ;;
	*)
	echo "Invalid choice"
	$FUNCNAME
	;;
esac
}

# check for installed version
if [ $(which $PKG 2>/dev/null) ]; then
	IVER=$($PKG --version)
	echo "you have version $IVER installed"
else
	echo "$PKG is not installed"
fi

# check installed version is up to date, if so offer escape.
if [ "$VER" = "$IVER" ]; then
	read -p " You already have the latest version $txtgreen$CVER$rst. Do you still want to continue? [y/n]" -n 1 -r -s && echo
	[[ $REPLY =~ ^[Nn]$ ]] && cleanup
fi

# Get version on porteus server
SERVER_LATFILE=$(lynx -dump --nonumbers --listonly $SERVER/$SARCH/current/modules | awk -F/ '/yt-dlp/{print$NF}' | tail -n1)
SERVER_LATVER=$(awk -F- '{print$3}' <<<"${SERVER_LATFILE}")
echo "Checking $SERVER/$SARCH/current/modules"

# show all version information
echo "The Porteus$txtgreen SERVER$rst version is :" $txtgreen "$SERVER_LATVER" $rst
echo
echo "The latest $PKG version is    :" $txtgreen "$VER" $rst
echo
cyan "To download from Youtube may now require a javascript runtime."
cyan "(the 1000 other supported sites do not)"
cyan "The choices we offer are : deno (large 44mb but auto detected by yt-dlp)"
cyan "or : quickjs (small 1mb but requires '--js-runtimes quickjs') "
echo
cyan "You can choose to download the premade module from our server,"
cyan "which includes quickjs."
cyan "or download the version from github and choose a javascript runtime."
echo

read -p " Would you like to download the porteus server version? [y/n]" -n 1 -r -s && echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
	echo
	download $SERVER/$SARCH/current/modules/$SERVER_LATFILE $WRKDIR
	## Check that we have a module in $WRKDIR
	if [ ! -f $WRKDIR/$SERVER_LATFILE ]; then
		echo
		sayerror "Download of the $PKG module failed."
		echo
		cleanup
	else
		echo
		echo "Your file is at:" $txtcyan "$WRKDIR/$SERVER_LATFILE" $rst
		echo "Please move it to your modules folder to survive a reboot."
		echo
		cleanup
	fi
fi

read -p " Would you like to download $txtgreen $PKG-$VER $rst ? [y/n]" -n 1 -r -s && echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
	cleanup
fi

RESULT+=( 'deno' 'quickjs' 'none' )
get_js_interpreter

# download the latest version
download $URL $BIND

# download deno or quickjs and extract to $BIND
if [[ $JDURL != "none" ]]; then
	#echo "java url is: $JDURL"
	[ ! -f $WRKDIR/$JS_INT ] && download $JDURL $WRKDIR
	unzip $WRKDIR/$JS_INT -d $BIND/
fi

## Check that we have a binary in BIND
if [ ! -f $BIND/${PKG}_linux ]; then
	echo
	sayerror "File $BIND/${PKG}_linux not found. Some went wrong with the download."
	cleanup
fi

## Check integrity of downloaded tarball using sha256sum
download $VURL/releases/download/$VER/SHA2-256SUMS $WRKDIR
SUM1=$(grep yt-dlp_linux $WRKDIR/SHA2-256SUMS | head -n1 | cut -d" " -f1)
SUM2=$(sha256sum $BIND/${PKG}_linux | cut -d" " -f1)
checksum

mv $BIND/${PKG}_linux $BIND/$PKG
# make executable
chmod +x $BIND/*

cd $BUILD
### fake slackware type package info: super dumb version
PKGINFO=var/lib/pkgtools/packages
#FILES=`find *`
mkdir -p $PKGINFO
echo "PACKAGE NAME: $PKG-$VER-noarch-$REV$TAG" >$PKGINFO/$PKG-$VER-noarch-$REV$TAG

# add slack-desc
cat >>$PKGINFO/$PKG-$VER-noarch-$REV$TAG <<EOM
PACKAGE DESCRIPTION:
yt-dl: yt-dlp (YouTube video download utility)
yt-dlp:
yt-dlp: yt-dlp is a small command-line program to download videos
yt-dlp: from YouTube.com.  It's licensed under the MIT License.
yt-dlp:
yt-dlp: Homepage: http://www.yt-dl.org/
yt-dlp:
yt-dlp:
yt-dlp:
yt-dlp:
yt-dlp:
FILE LIST:
EOM

find * | grep -v var >>$PKGINFO/$PKG-$VER-noarch-$REV$TAG

# make slackware pkg
#cd $BUILD && makepkg -l n -c n $WRKDIR/$PKG-$VER-noarch-$REV$TAG.txz

# make module
#cd $WRKDIR && txz2xzm $PKG-$VER-noarch-$REV$TAG.txz
cd $WRKDIR && dir2xzm $PKG $PKG-$VER-noarch-$REV$TAG.xzm

echo "Your module $txtgreen $PKG-$VER-noarch-$REV$TAG.xzm $rst is ready in $WRKDIR "
cyan "Please copy it to your modules folder or somewhere safe."

cleanup
