aboutsummaryrefslogblamecommitdiff
path: root/pirowatch
blob: 4ed54ce058a9d33737c9cb912aa01dce2d9ba499 (plain) (tree)
1
2
3
4
5
6
7
8
9
         
 



                                                       
                  
              
            
 



                                           
 


                                                 

                                                

 
















                                                                   



                                                                            






                                                                                                                         


                                               





                                    


                                                                                                                
                                                                                    
                                               
            
                                                                             









                                                
                
                       
 




                          
                            
                            

                         
 
                                                                                                                                  







                                                           

 
         
#!/bin/sh

# dir where files are cached
cache_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/pirowatch"
# dir where torrent files are stored
torrent_dir="${DOWNLOADS:-$HOME/Downloads}"
torrent_port=49110
dht_port=49130
menu="dmenu"

die()
{
	# usage: die "reason" [exit_status]
	: "${1:?}"

	command -v "notify-send" 1>/dev/null &&
		notify-send "  pirowatch" "$1"

	printf "\033[31;1merr: %b\033[0m\n" "$1"
	exit "${2:-1}"
}

dep_check()
{
	# usage: dep_check "dep_1" ...
	: "${1:?}"

	for dep; do
		command -v "$dep" 1>/dev/null ||
			die "$dep not found, please install it" 127
	done

	unset dep
}

stream() {
	# usage: stream "torrent"
	: "${1:?}"

	dep_check "webtorrent" "mpv"

	command -v "notify-send" 1>/dev/null &&
		notify-send " connecting to peers" "wait for few seconds"

	if [ -n "$2" ]
	then
		webtorrent --mpv -o "$cache_dir" --torrent-port "$torrent_port" --dht-port "$dht_port" "$1" --select "$2"
	else
		webtorrent --mpv -o "$cache_dir" --torrent-port "$torrent_port" --dht-port "$dht_port" "$1"
	fi

	[ "$?" != 0 ] &&
		die "webtorrent failed to play"
}

set_index() {
	# usage: get_index "torrent"
	: "${1:?}"

	dep_check "webtorrent" "$menu"

	fetch=$(webtorrent -o "$cache_dir" --torrent-port "$torrent_port" --dht-port "$dht_port" "$1" --select |
		grep -Ei "\.(mkv|mp4|webm|avi|mov|flv|flac|opus|ogg|mp3|wav) (.*)$")
	if [ "$(echo "$fetch" | wc -l)" -gt 1 ]
	then
		fetch="$(printf "%s" "$fetch" | "$menu" -p "  " -l 25)" ||
			die "empty selection" 66
	fi

	index="${fetch%%[[:space:]]*}"

	unset fetch
}

main()
{
	torrent=
	index="tobeset"

	if [ "$1" = "-s" ]
	then
		index=
		shift
	fi
	[ -z "$DISPLAY" ] &&
		menu="wmenu"

	dep_check "$menu"

	torrent="${1:-$torrent_dir/$(find "$torrent_dir" -type f -name "*.torrent" | sed 's/.*\///g' | "$menu" -p "  " -l 25)}"
	[ -z "${torrent##"${torrent_dir}"/}" ] &&
		die "magnet or torrent file not entered" 66
	[ -d "$cache_dir" ] ||
		mkdir -p "$cache_dir"
	[ "$index" = "tobeset" ] &&
		set_index "$torrent"

	stream "$torrent" "$index"
}

main "$@"