blob: acaab24ccaf4121d3aff5bbc60c17123d2458f8d (
plain) (
tree)
|
|
#!/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="bemenu"
note()
{
# usage: note "message"
: "${1:?}"
command -v "notify-send" 1>/dev/null &&
notify-send " pirowatch" "$1"
}
die()
{
# usage: die "reason" [exit_status]
: "${1:?}"
note "$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 &&
note "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 ||
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 "$WAYLAND_DISPLAY" ] &&
menu="dmenu"
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 "$@"
|