267 lines
9.2 KiB
Bash
Executable File
267 lines
9.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
source /usr/local/src/SharedLibraries/Bash/header
|
|
|
|
# Configure the torrenting engine.
|
|
function configuretorrent {
|
|
if [ ! -f "$1" ]; then
|
|
errorheader "Torrent configuration file not found."
|
|
exit 1;
|
|
fi
|
|
param "$1" torrentengine
|
|
param "$1" torrentterms
|
|
param "$1" magnetposition
|
|
param "$1" torrentdebugging
|
|
param "$1" searchunifier
|
|
}
|
|
# Get a magnet link for downloads.
|
|
function getmagnetlink {
|
|
if [ -z "$1" ]; then
|
|
errorheader "Need search terms";
|
|
exit 1;
|
|
fi
|
|
if [ -z "$torrentengine" ] || [ -z "$searchlink" ]; then
|
|
errorheader Torrent not configured.
|
|
fi
|
|
export searchstring="$(echo "$1" | sed "s/ /$searchunifier/g")"
|
|
export searchlink="$(printf "$torrentengine" "$searchstring")"
|
|
export searchresult=$(wget -q -O - "$searchlink" | bash -c "$torrentterms")
|
|
export magnetlink=$(wget -q -O - "$searchresult" | grep 'magnet:?' | cut -f $magnetposition -d \")
|
|
if [ $torrentdebugging == "true" ]; then
|
|
echo $searchstring
|
|
echo $searchlink
|
|
echo $searchresult
|
|
echo $magnetlink
|
|
read
|
|
fi
|
|
}
|
|
function torrentlink {
|
|
if [ ! -z "$magnetlink" ]; then
|
|
/usr/bin/transmission-cli -d 1000 -u 1 -er -w "$downloaddir" -b -f "/usr/local/bin/wolfpack-stoptorrent" "$magnetlink"
|
|
rm -Rf ~/.config/transmission/resume/*
|
|
rm -Rf ~/.config/transmission/torrents/*
|
|
fi
|
|
}
|
|
|
|
# Logging
|
|
export logfile='/var/log/wolfpack.log'
|
|
|
|
function helptext {
|
|
echo '
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
/\____ xxxxxxxxxxxxx AniNIX::WolfPack
|
|
// ~ / _\_____ Let loose the wolves to hunt, run,
|
|
/ \ .. \/ and be free. They shall repay you
|
|
// /~_____/ with their prey.
|
|
/// \\/ / ~dev@aninix.net
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
wolfpack --alpha ~~ Tell the alpha to send the
|
|
pack members hunting.
|
|
wolfpack --member <pup> ~~ Send a member to train a pup
|
|
and bring back results.
|
|
wolfpack --stop-torrent ~~ Stop any transmission-cli
|
|
processes
|
|
|
|
Available pup types (all pups are line-delimited with the type and
|
|
result location as the first two lines):
|
|
torrent ~~ Torrent the result of the
|
|
search term.
|
|
Will remove search line on
|
|
success.
|
|
shows ~~ Download the episode in a
|
|
show and increment. Shows
|
|
are listed in format
|
|
S01E01#Show terms
|
|
download ~~ Takes a list of commands to
|
|
run to arrive at a URL to
|
|
grab and downloads the last
|
|
URL.
|
|
search ~~ Uses the Google search
|
|
engine to return the top
|
|
five results for the search
|
|
terms on each line.
|
|
'
|
|
}
|
|
|
|
function torrent {
|
|
if [ "$1" == "" ] || [ $(wc -l "$1" | cut -f 1 -d ' ') -lt 3 ]; then
|
|
echo "Need a valid argument."
|
|
return;
|
|
fi
|
|
if [ "$(whatismyip)" == "$(nslookup aninix.net | grep Address | cut -f 2 -d ' ')" ]; then
|
|
echo "Should not torrent directly from the AniNIX main IP for privacy reasons" 1>&2
|
|
exit 1
|
|
fi
|
|
export downloaddir=$(head -n 2 "$1" | tail -n 1)
|
|
if [ "$(pgrep -afc transmission-cli)" -ne 0 ]; then
|
|
logstatement "Transmission is still running. Aborting."
|
|
return;
|
|
fi
|
|
for i in $(tail -n +3 "$1"); do
|
|
getmagnetlink "$i"
|
|
torrentlink
|
|
if [ ! -z "$magnetlink" ]; then
|
|
sed -i "/$i/d" "$1"
|
|
logstatement "Downloaded and removed $i"
|
|
fi
|
|
done
|
|
}
|
|
|
|
|
|
|
|
function shows {
|
|
if [ "$1" == "" ] || [ $(wc -l "$1" | cut -f 1 -d ' ') -lt 3 ]; then
|
|
echo "Need a valid argument."
|
|
return;
|
|
fi
|
|
if [ "$(pgrep -afc transmission-cli)" -ne 0 ]; then
|
|
logstatement "Transmission is still running. Aborting."
|
|
return;
|
|
fi
|
|
if [ "$(whatismyip)" == "$(nslookup aninix.net | grep Address | cut -f 2 -d ' ')" ]; then
|
|
echo "Should not torrent directly from the AniNIX main IP for privacy reasons" 1>&2
|
|
exit 1
|
|
fi
|
|
export downloaddir=$(head -n 2 "$1" | tail -n 1)
|
|
echo "Would download to "$downloaddir
|
|
for i in $(tail -n +3 "$1"); do
|
|
export searchsegment="$(echo $i | tr '#' "$searchunifier")"
|
|
getmagnetlink "$searchsegment"
|
|
if [ ! -z "$magnetlink" ]; then
|
|
# We found an episode.
|
|
torrentlink
|
|
export sepisode=$(echo $i | cut -f 1 -d '#')
|
|
export searchterms="$(echo $i | cut -f 2 -d '#')"
|
|
export season=$(echo $sepisode | cut -f 1 -d 'E' | cut -f 2 -d 'S')
|
|
export episode=$(echo $sepisode | cut -f 2 -d 'E')
|
|
export ep=$(printf "%02d\n" $((${episode#0} + 1)))
|
|
sed -i "s/$i/S"$season"E"$ep"#"$searchterms"/" "$1"
|
|
logstatement "$i was downloaded and pup updated."
|
|
rm -f "$downloaddir"/*/*.txt # Including this to avoid breaking Plex
|
|
rm -f "$downloaddir"/*/*.nfo
|
|
else
|
|
# We didn't -- is there a new season?
|
|
export sepisode=$(echo $i | cut -f 1 -d '#')
|
|
export searchterms=$(echo $i | cut -f 2 -d '#')
|
|
export season=$(echo $sepisode | cut -f 1 -d 'E' | cut -f 2 -d 'S')
|
|
export episode=$(echo $sepisode | cut -f 2 -d 'E')
|
|
export newseason=$(printf "%02d\n" $((${season#0} + 1)))
|
|
export newsearch="$(echo $searchsegment | sed 's/S'$season'E'$episode'/S'$newseason'E01/')"
|
|
getmagnetlink "$newsearch"
|
|
if [ "$magnetlinki" != "" ]; then
|
|
torrentlink
|
|
logstatement "$newsearch Downloaded and pup updated."
|
|
sed -i "s/$i/S"$newseason"E01#"$searchterms"/" "$1"
|
|
else
|
|
logstatement "No new season found after $searchterms"
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
function download {
|
|
if [ "$1" == "" ] || [ $(wc -l "$1" | cut -f 1 -d ' ') -lt 3 ]; then
|
|
echo "Need a valid argument."
|
|
return;
|
|
fi
|
|
# Second line in the file is the directory to download to.
|
|
export downloaddir=$(head -n 2 "$1" | tail -n 1)
|
|
# The third line and any following lines should be
|
|
for i in $(tail -n +3 "$1"); do
|
|
#echo EVALUATING: $i
|
|
if [ "$i" == "" ]; then continue; fi
|
|
export comm=$(echo $i | sed "s#PREVRESULT#$nexturl#g" -)
|
|
export nexturl=$(bash -c "$comm")
|
|
#echo Found next url: $nexturl
|
|
done
|
|
export filename="$downloaddir"/"$(echo "$nexturl" | rev | cut -f 1 -d \/ | rev)"
|
|
#if file doesn't already exist....
|
|
if [ ! -f "$filename" ]; then
|
|
logstatement "Downloading $nexturl to $filename ..."
|
|
export dedupterm="$(echo $1 | cut -f 1 -d '.' | rev | cut -f 1 -d '/' | rev)"
|
|
for i in $(find "$downloaddir" | grep -i "$dedupterm"); do
|
|
logstatement "Deduped! Removed $i from $downloaddir"
|
|
rm -Rf $i;
|
|
done
|
|
wget -q -O "$filename" "$nexturl"
|
|
logstatement "Downloaded"
|
|
fi
|
|
}
|
|
|
|
function search {
|
|
if [ "$1" == "" ] || [ $(wc -l "$1" | cut -f 1 -d ' ') -lt 3 ]; then
|
|
echo "Need a valid argument."
|
|
return;
|
|
fi
|
|
export downloaddir=$(head -n 2 "$1" | tail -n 1)
|
|
for i in $(tail -n +3 "$1"); do
|
|
export searchstring=$(echo $i | sed 's/ /+/g')
|
|
export file="$downloaddir"/$searchstring'.txt'
|
|
echo | googler --count=5 -C -x "$searchstring" | grep -v 'Enter n, p, result' > "$file"
|
|
logstatement "Ran search for $searchstring to $file"
|
|
done
|
|
}
|
|
|
|
function stoptorrent {
|
|
# TODO This is destructive to all other transmission-CLI clients on the box.
|
|
killall transmission-cli
|
|
}
|
|
|
|
configuretorrent /usr/local/etc/WolfPack/torrentengine
|
|
|
|
if [ "$1" == "" ]; then
|
|
helptext;
|
|
exit;
|
|
fi
|
|
|
|
logstatement "--- $(date) ---"
|
|
logstatement "Started $1 $2 on $(uname -n)"
|
|
|
|
case "$1" in
|
|
"--alpha")
|
|
if [ "$2" == "" ]; then
|
|
export basedir="/usr/local/etc/WolfPack"
|
|
else
|
|
export basedir="$2";
|
|
fi
|
|
logstatement "Starting members from pup in $basedir"
|
|
for i in $(find "$basedir" -type f | grep '.pup'); do
|
|
/usr/local/bin/wolfpack --member "$i";
|
|
done
|
|
;;
|
|
|
|
"--member")
|
|
logstatement "Spawning a member for $2"
|
|
whatismyip | tee -a /var/log/wolfpack.log
|
|
case "$(head -n 1 "$2")" in
|
|
"shows")
|
|
shows "$2"
|
|
;;
|
|
"torrent")
|
|
torrent "$2"
|
|
;;
|
|
"search")
|
|
search "$2"
|
|
;;
|
|
"download")
|
|
download "$2"
|
|
;;
|
|
*)
|
|
echo "Bad pup type."
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
"--stoptorrent")
|
|
stoptorrent
|
|
;;
|
|
|
|
*)
|
|
helptext
|
|
;;
|
|
esac
|
|
|
|
logstatement "Exited $1"
|
|
logstatement "--- $(date) ---"
|
|
logstatement " "
|