#!/bin/bash
# This script emulates "unique application" functionality on Linux. When starting
# playback with this script, it will try to reuse an already running instance of
# mpv and configure window according to media type.
# Copyright Jean-Philippe Guillemin - zenwalk.org <h1p8r10n@gmail.com> - GPL v2


CONFIGPATH="$HOME/.config/mpv"
mkdir -p $CONFIGPATH
CONFIG="$CONFIGPATH/mpv.conf"
if [ ! -e $CONFIG ] ; then 
cat > $CONFIG << END
# config file for MPV CLI options
osd-level=0
keep-open=no
ontop=no
END
fi

video(){
	/usr/bin/mpv \
		--profile=video \
		--input-file=~/.mpv_fifo
}

audio(){
	/usr/bin/mpv \
		--profile=audio \
		--input-file=~/.mpv_fifo
}

check_media(){
	if [[ ! "$@" \
		|| "$(xdg-mime query filetype "$@" | grep -i 'video\|realmedia' )" \
		|| "$(file "$@" | grep -i 'video\|MP4' )" ]] ; then
		echo -n "video"
	else
		echo -n "audio" 
	fi	
}

mode="$(check_media "$1")"
skip=1

if [ ! "$(pidof mpv)" ] ; then 
	rm -f ~/.mpv_fifo
	rm -f ~/.mpv_mode
	mkfifo --mode=666 ~/.mpv_fifo
	echo -n "$mode" > ~/.mpv_mode
	"$mode" &
	skip="0"
fi

for file in "$@" ; do
	if [ "$(check_media "$file")" != "$(cat ~/.mpv_mode)" ] ; then
		killall mpv 
		$0 "$@"
		exit 0
	fi
	echo "raw loadfile \"$file\" append-play" > ~/.mpv_fifo
done
[ "$skip" == "1" ] && echo "playlist-next" > ~/.mpv_fifo

exit 0

