Version 7 (modified by konti, 14 years ago) (diff)

--

Execute

The Execute plugin is only supported from deluge versions 1.3RC2 and up. It gives you the option to run your own scripts (e.a. Bash, Python or any other shell) triggered with different events in Deluge. At this moment only the events added (when a torrent is added to deluge) and complete (when a torrent has finished downloading) are supported. More events whill be added in the future.

The script will be executed with three variables.

1: The id of the torrent 2: The name of the torrent 3: With the added event the Download to: folder and with the complete event the - when configured - Move completed to: folder.

Configuration

Through webUI

As of version 1.3RC2 it is possible to configure the plugin through webUI without manually having to install the plugin. It is necessary to enable the plugin in the plugins menu in Preferences. After reopening the Preferences menu the Execute plugin is available.

The events Torrent Complete and Torrent Added can be selected. The command should be the full path script (e.a. /var/lib/deluge/myscripts/on_added.sh). Make sure the script is accessible by the user that is used to run deluged and that it is executable.

Through GTK UI

Script Examples

bash

python

The following scripts can be used for testing purposses. They can be run from command line like:

./test.py "var1" "var2" "var3"

The variables should show up in your syslog.

tail /var/log/syslog

Python Example script

#!/usr/bin/python
import sys
import os
import syslog
syslog.syslog('deluge test: the script started running')
for arg in sys.argv[1:]:
    syslog.syslog(arg)

Sendemail script

As a alternative to the notifications plugin you can send your e-mails through the execute script by using the program sendemail. I'll explain in short how to set this up.

We need to have script to run and the application sendemail installed. With sendemail it is possible to send e-mails to a smtp server all from one (command)-line. I'm using ubuntu 9.10. If sendemail is available in your repository sendemail can be installed with the command:

sudo apt-get install sendemail

The following command sends a e-mail:

sendemail -s smtp.myisp.com -t myemail@domain.com -f fromemail@domain.com -u "subject" -m "message"

Now where going to create the script that utilyzes the sendemail program. The script is named torrent_added.sh

#!/bin/bash
torrentid=$1
torrentname=$2
torrentpath=$3

subject="Started download new torrent!"
message="$torrentname to $torrentpath"

echo -e `date`"::Started download torrent:$2 in: $3" with id:$torrentid >> ~/scripts.log
echo -e `sendemail -s smtp.myisp.com -t myemail@domain.com -f fromemail@domain.com -u "Started downloading $torrentname!" -m "Downloading $torrentname to: $torrentpath"` >> ~/scripts.log

In line 2,3 and 4 the variables are assigned to more readable variables.

In line 6 and 7 the variables subject and message are filled.

In line 9 the message is being written to (in my case) /var/lib/deluge/scripts.log.

In line 10 the sendemail program is called. Output is also written to the /var/lib/deluge/scripts.log file.

Make sure that you substitute smtp.myisp.com, myemail@… and fromemail@… with your own data!

the same script can be rewritten to be used with the complete event. This way you will get a e-mail when a torrent is started and finished.

The same can also be done with a single python script:

import sys 
import smtplib

torrent_id = sys.argv[1]
torrent_name = sys.argv[2]
save_path = sys.argv[3]

#You can change these
from_addr = "fromemail@domain.com"
to_addr = "myemail@domain.com"
smtp_srv = "smtp.myisp.com"

subject = "Some subject"
message = """Put your message here

It can span multiple lines. It can also contain information by specifying
%(torrent_id)s or %(torrent_name)s""" % { 
    'torrent_id': torrent_id,
    'torrent_name': torrent_name,
    'save_path': save_path
}

msg = "To:%s\nFrom:%s\nSubject: %s\n\n%s" % (to_addr, from_addr, subject, message)

smtp = smtplib.SMTP(smtp_srv)
smtp.sendmail(from_addr, to_addr, msg)
smtp.quit()