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?

  1. Pause or remove completed torrents after they are completed.

  2. Send a pushover notification (with curl)[optional]

  3. Send a twitter notification (requires twidge)[optional]

  4. Suspend/Shutdown Computer OR leave it as it is.

Pushover Notification From Transmission

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:

  1. Get the code from github-gist & save the file as trsm anywhere on your hard-drive. Make the file executable chmod a+x trsm .

  2. Login to pushover & copy your user key. Paste it under user-key in the script.

  3. 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.

  4. For twitter setup see twidge documentation.

  5. 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 as username & password respectively.

  6. Click open web-client to check if it is working properly.

  7. 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