Transmission shutdown script for multiple torrents?
This information isn't passed to the scripts via environment variables, so you'll need to query Transmission's RPC interface. This is sometimes done by client libraries -- for example, a Python script could use python transmissionrpc. There are other interfaces like this listed at http://www.transmissionbt.com/resources/ .
Here's a quick approach that will use transmission-remote to count the number of non-idle downloads:
transmission-remote yourhost:yourport -tall --info | grep "^ State:" | grep "Down" | wc --lines
If you want to include idle downloads too, you could try this:
transmission-remote yourhost:yourport -l | grep -v -e " 100% " -e "^Sum" -e "^ID" -e " Stopped " | wc --lines
Where "^ID" and "^Sum" strips the header and footer; " 100% " strips completed torrents; and " Stopped " strips out the incomplete-but-paused torrents. This approach isn't foolproof -- for example, a torrent named " 100% Stopped " would break it.
I created a better script(from user98677 advice) which takes advantage of transmission's RPC Interface.
Code:
Github Gist: https://gist.github.com/khurshid-alam/6474227
What it Does?
Pause or remove completed torrents after they are completed.
Send a pushover notification (with curl)[optional]
Send a twitter notification (requires twidge)[optional]
Suspend/Shutdown Computer OR leave it as it is.
Screenshot
Setup
On Ubuntu
sudo apt-get install libnotify-bin
sudo apt-get install transmission-cli
On Ubuntu >= 13.04 (For twitter notification):
sudo add-apt-repository ppa:moorhen-core/moorhen-apps
sudo apt-get install twidge
For suspend
action on non-Ubuntu distro (Ubuntu uses Upower) install powermanagement-interface package
sudo apt-get install powermanagement-interface
After installation:
Get the code from github-gist & save the file as
trsm
anywhere on your hard-drive. Make the file executablechmod a+x trsm
.Login to pushover & copy your user key. Paste it under
user-key
in the script.If you want notifications send with nice looking application (transmission) icon just create a fake app in pushover with transmission icon & then copy the application key (API/Token key) & paste it under
app-key
in the script.For twitter setup see twidge documentation.
Open transmission. Go to preference->web. Enable web client (default port
9091
) & enable user authentication . Choose a username & password. Put that username & password in the script asusername
&password
respectively.Click open web-client to check if it is working properly.
Finally save the script & go to downloading tab (in transmission preference) & click
call script when torrent is complete
. Select the respective script.
Script
#!/bin/bash
user-key=" " #put your pushover user-key
app-key=" " #put your pushover application-key
device=" " #Your device name in pushover
username=" " # Transmission remote username
password=" " # Transmission remote password
sleep 100s
# default display on current host
DISPLAY=:0.0
# authorize transmission
trsm="transmission-remote --auth $username:$password"
# find out number of torrent
TORRENTLIST=`$trsm --list | sed -e '1d;$d;s/^ *//' | cut --only-delimited --delimiter=' ' --fields=1`
for TORRENTID in $TORRENTLIST
do
echo "* * * * * Operations on torrent ID $TORRENTID starting. * * * * *"
#echo $TORRENTID
DL_COMPLETED=`$trsm --torrent $TORRENTID --info | grep "Percent Done: 100%"`
#echo $DL_COMPLETED
# pause completed torrents & get those torrent names.
if [ "$DL_COMPLETED" != "" ]; then
$trsm --torrent $TORRENTID --stop
trname=`$trsm --torrent $TORRENTID --info | grep "Name:" | awk -F: '{print $NF}'`
# post an update to twitter
echo "$trname download was completed" | twidge update # Put "#" if you don't need this.
# push update for pushover
curl -s \
-F "token=$user-key" \
-F "user=$app-key" \
# -F "device=$device" \ # uncomment, if you want to send notification to a particular device.
-F "title=Download Finished" \
-F "message=$trname download has completed." \
http://api.pushover.net/1/messages > /dev/null
# The following codes works assuming One take advantage of gnome-power-manager by setting "black screen after 2/5/10/.. minitues ".
# if monitor(Including laptop screen but EXCLUDING external monitor) is on, it will just force blank the screen, if not, it will shutdown/suspend or leave it as it is.
# Modify it as per your requirement.
STATUS=`xset -display $DISPLAY -q | grep 'Monitor'`
#echo $STATUS
if [ "$STATUS" == " Monitor is On" ]
then
notify-send "Downloads Complete" "turning off the screen now"
xset dpms force off
else
notify-send "Downloads Complete" "$trname"
# uncomment to shutdown the computer
#dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
# uncomment to suspend (on ubuntu)
#dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
# uncomment to suspend (on Linux) (requires powermanagement-interface package)
#pmi action suspend
else
echo "Torrent #$TORRENTID is not completed. Ignoring."
fi
done