mirror of
https://github.com/codex-storage/deluge.git
synced 2025-02-13 03:46:43 +00:00
197 lines
5.3 KiB
Markdown
197 lines
5.3 KiB
Markdown
|
## Execute
|
||
|
The **Execute** plugin gives you the option to run your own scripts (e.g. `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 will be added in the future.
|
||
|
|
||
|
The script to be executed will be supplied with three torrent variables:
|
||
|
|
||
|
1. ID (Hash)
|
||
|
2. Name
|
||
|
3. Folder:
|
||
|
* *Torrent Added:* 'Download'
|
||
|
* *Torrent Complete:* 'Download' or 'Move Completed', if setup.
|
||
|
|
||
|
## Configuration
|
||
|
|
||
|
Enable the plugin in the Plugins menu in Preferences.
|
||
|
|
||
|
***Important: After enabling this plugin Deluge will require restarting for it to work properly.***
|
||
|
|
||
|
The events Torrent Complete and Torrent Added can be selected and the full path to the script entered (e.g. /home/user/execute_script)
|
||
|
|
||
|
![](http://forum.deluge-torrent.org/download/file.php?id=3263)
|
||
|
|
||
|
Make sure the script is set to executable:
|
||
|
|
||
|
```
|
||
|
chmod u+x /home/user/execute_script
|
||
|
```
|
||
|
Also ensure that it is accessible by the user used to run deluged.
|
||
|
|
||
|
Before adding to Deluge, scripts should be tested manually like so:
|
||
|
|
||
|
```
|
||
|
./execute_script "TorrentID" "Torrent Name" "Torrent Path"
|
||
|
```
|
||
|
|
||
|
## Script Examples
|
||
|
The following scripts can be used for testing purposes.
|
||
|
|
||
|
### Bash
|
||
|
|
||
|
```sh
|
||
|
#!/bin/bash
|
||
|
torrentid=$1
|
||
|
torrentname=$2
|
||
|
torrentpath=$3
|
||
|
echo "Torrent Details: " "$torrentname" "$torrentpath" "$torrentid" >> /tmp/execute_script.log
|
||
|
```
|
||
|
|
||
|
The variables will show up in the log file: `/tmp/execute_script.log`
|
||
|
|
||
|
### Windows Batch
|
||
|
Save this with `.bat` extension such as `execute_example.bat`:
|
||
|
|
||
|
```bat
|
||
|
@echo off
|
||
|
set torrentid=%1
|
||
|
set torrentname=%2
|
||
|
set torrentpath=%3
|
||
|
@echo Torrent Details: %torrentname% %torrentpath% %torrentid% >> "%userprofile%\Desktop\execute_script.log"
|
||
|
```
|
||
|
|
||
|
|
||
|
The variables will show up in the log file on the user Desktop.
|
||
|
|
||
|
### Perl
|
||
|
|
||
|
```perl
|
||
|
#!/usr/bin/perl
|
||
|
$torrentid = $ARGV[0];
|
||
|
$torrentname = $ARGV[1];
|
||
|
$torrentpath = $ARGV[2];
|
||
|
open(my $fh, '>>', '/tmp/execute_perl.log');
|
||
|
print $fh "Torrent Details: $torrentname $torrentpath $torrentid\n"
|
||
|
```
|
||
|
|
||
|
The variables will show up in the log file: `/tmp/execute_perl.log`
|
||
|
|
||
|
### Python
|
||
|
|
||
|
```python
|
||
|
#!/usr/bin/env python
|
||
|
from sys import argv
|
||
|
from syslog import syslog
|
||
|
syslog('deluge test: the script started running')
|
||
|
for arg in argv[1:]:
|
||
|
syslog(arg)
|
||
|
```
|
||
|
|
||
|
The variables should show up in your syslog.
|
||
|
|
||
|
```
|
||
|
tail /var/log/syslog
|
||
|
```
|
||
|
|
||
|
### Sendemail script
|
||
|
As a alternative to the notifications plugin you can send your e-mails through the execute script by using the program `sendemail`. By using `sendemail` it is possible to send e-mails to a smtp server all from one (command)-line.
|
||
|
|
||
|
To install sendemail on Ubuntu:
|
||
|
|
||
|
```
|
||
|
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"
|
||
|
```
|
||
|
|
||
|
The script should be named *torrent_added* and contain the following:
|
||
|
|
||
|
```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
|
||
|
```
|
||
|
|
||
|
Make sure that you substitute smtp.myisp.com, myemail@domain.com and fromemail@domain.com with your own data!
|
||
|
|
||
|
This 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.
|
||
|
|
||
|
You can also achieve the same outcome with a python script:
|
||
|
|
||
|
```python
|
||
|
#!/usr/bin/env python
|
||
|
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 and 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()
|
||
|
```
|
||
|
|
||
|
### Extract archives script
|
||
|
|
||
|
This script will search for archives in downloaded content and extract them. Actions are logged as entries in syslog.
|
||
|
It can be easily extended to support more compression and archive formats.
|
||
|
|
||
|
```sh
|
||
|
#!/bin/bash
|
||
|
formats=(zip rar)
|
||
|
commands=([zip]="unzip -u" [rar]="unrar -o- e")
|
||
|
extraction_subdir='extracted'
|
||
|
|
||
|
torrentid=$1
|
||
|
torrentname=$2
|
||
|
torrentpath=$3
|
||
|
|
||
|
log()
|
||
|
{
|
||
|
logger -t deluge-extractarchives "$@"
|
||
|
}
|
||
|
|
||
|
log "Torrent complete: $@"
|
||
|
cd "${torrentpath}"
|
||
|
for format in "${formats[@]}"; do
|
||
|
while read file; do
|
||
|
log "Extracting \"$file\""
|
||
|
cd "$(dirname "$file")"
|
||
|
file=$(basename "$file")
|
||
|
# if extraction_subdir is not empty, extract to subdirectory
|
||
|
if [[ ! -z "$extraction_subdir" ]] ; then
|
||
|
mkdir "$extraction_subdir"
|
||
|
cd "$extraction_subdir"
|
||
|
file="../$file"
|
||
|
fi
|
||
|
${commands[$format]} "$file"
|
||
|
done < <(find "$torrentpath/$torrentname" -iname "*.${format}" )
|
||
|
done
|
||
|
```
|