#!/bin/sh

# AM INSTALL SCRIPT VERSION 3.5
APP=mpv
SITE1="Samueru-sama/mpv-AppImage"
SITE2="ivan-hc/MPV-appimage"

# CREATE DIRECTORIES AND ADD REMOVER
[ -n "$APP" ] && mkdir -p "/opt/$APP/tmp" "/opt/$APP/icons" && cd "/opt/$APP/tmp" || exit 1
printf "#!/bin/sh\nrm -f /usr/local/bin/$APP\nrm -R -f /opt/$APP" > ../remove
printf '\n%s' "rm -f /usr/local/share/applications/$APP-AM.desktop" >> ../remove
chmod a+x ../remove || exit 1

# CHOOSE A VERSION
read -r -p "
 Choose which version of mpv AppImage to use:
 
 1. mpv AppImage build using linuxdeploy, this how most appimages are made,
    however they only work on distros equal or newer than Ubuntu 20.04 at 
    the time of this writting.

    Source: https://github.com/Samueru-sama/mpv-AppImage

 2. mpv Archimage, this AppImage is made on top of JuNest, which makes it
    able to run on distributions older than what the AppImage spec requires
    however it comes at the cost of a increased installation size, near 10x.

    Source: https://github.com/ivan-hc/MPV-appimage

 Which version you choose (type a number and press ENTER)?" response
case "$response" in
	1) rm -f /opt/"$APP"/version
	UPDATER=1
	version=$(curl -Ls https://api.github.com/repos/"$SITE1"/releases | sed 's/[()",{} ]/\n/g' | grep -io 'https.*continuous.*mpv.*86_64.*mage$' | head -1)
	wget "$version"
	echo "$version" >> /opt/$APP/version;;
	2) rm -f /opt/"$APP"/version
	version=$(curl -Ls https://api.github.com/repos/"$SITE2"/releases | sed 's/[()",{} ]/\n/g' | grep -io 'https.*continuous.*mpv.*86_64.*mage$' | head -1)
	UPDATER=2
	wget "$version"
	echo "$version" >> /opt/$APP/version;;
	*) /opt/"$APP"/remove && exit;;
esac
cd ..
mv ./tmp/*mage ./"$APP"
rm -R -f ./tmp || exit 1
chmod a+x ./"$APP" || exit 1

# LINK
ln -s "/opt/$APP/$APP" "/usr/local/bin/$APP"

# SCRIPT TO UPDATE THE PROGRAM
cat >> ./AM-updater << 'EOF'
#!/bin/sh
set -u
APP=mpv
if [ -z "$APP" ]; then exit 1; fi
version0=$(cat "/opt/$APP/version")
version=$(curl -Ls https://api.github.com/repos/$SITE/releases | sed 's/[()",{} ]/\n/g' | grep -io 'https.*continuous.*mpv.*86_64.*mage$' | head -1)
[ -n "$version" ] || { echo "Error getting link"; exit 1; }
if [ "$version" != "$version0" ]; then
	notify-send "A new version of $APP is available, please wait"
	mkdir "/opt/$APP/tmp" && cd "/opt/$APP/tmp" || exit 1
	wget "$version" || exit 1
	cd ..
	mv --backup=t ./tmp/*mage ./"$APP" || exit 1
	echo "$version" > ./version
	rm -R -f ./tmp ./*~
	chmod a+x ./"$APP" || exit 1
	notify-send "$APP is updated!"
else
	echo "Update not needed!"
fi
EOF
if [ "$UPDATER" = "1" ]; then
	sed -i 's#$SITE#Samueru-sama/mpv-AppImage#g' /opt/"$APP"/AM-updater
elif [ "$UPDATER" = "2" ]; then
	sed -i 's#$SITE#ivan-hc/MPV-appimage#g' /opt/"$APP"/AM-updater
fi
chmod a+x ./AM-updater || exit 1

# LAUNCHER & ICON
cd "/opt/$APP" || exit 1
./"$APP" --appimage-extract *.desktop 1>/dev/null && mv ./squashfs-root/*.desktop ./"$APP".desktop
./"$APP" --appimage-extract .DirIcon 1>/dev/null && mv ./squashfs-root/.DirIcon ./DirIcon
COUNT=0
while [ "$COUNT" -lt 10 ]; do # Tries to get the actual icon/desktop if it is a symlink to another symlink
	if [ -L ./"$APP".desktop ]; then
		LINKPATH=$(readlink ./"$APP".desktop)
		./"$APP" --appimage-extract "$LINKPATH" 1>/dev/null && mv ./squashfs-root/"$LINKPATH" ./"$APP".desktop
	fi
	if [ -L ./DirIcon ]; then
		LINKPATH=$(readlink ./DirIcon)
		./"$APP" --appimage-extract "$LINKPATH" 1>/dev/null && mv ./squashfs-root/"$LINKPATH" ./DirIcon
	fi
	[ ! -L ./"$APP".desktop ] && [ ! -L ./DirIcon ] && break
	COUNT=$((COUNT + 1))
done
sed -i "s#Exec=[^ ]*#Exec=$APP#g; s#Icon=.*#Icon=/opt/$APP/icons/$APP#g" ./"$APP".desktop
mv ./"$APP".desktop /usr/local/share/applications/"$APP"-AM.desktop && mv ./DirIcon ./icons/"$APP" 1>/dev/null
rm -R -f ./squashfs-root

