I have written a shutdown script for transmission. Transmission calls the script after a torrent download finishes. The script runs perfectly on my machine (Ubuntu 11.04 & 12.04).
#!/bin/bash
sleep 300s
# default display on current host
DISPLAY=:0.0
# find out if monitor is on. Default timeout can be configured from screensaver/Power configuration.
STATUS=`xset -display $DISPLAY -q | grep 'Monitor'`
echo $STATUS
if [ "$STATUS" == " Monitor is On" ]
### Then check if its still downloading a torrent. Couldn't figure out how.(May be) by monitoring network downstream activity?
then
notify-send "Downloads Complete" "Exiting transmisssion now"
pkill transmission
else
notify-send "Downloads Complete" "Shutting Down Computer"
dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
fi
exit 0
The problem is that when I'm downloading more than one file, when the first one finishes, transmission executes the script. I would like to do that but after all downloads are completed.
I want to put a 2nd check ( right after monitor check) if it is still downloading another torrent.
Is there any way to do this?
Best Answer
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:
If you want to include idle downloads too, you could try this:
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.