[Libtorrent-devel] Using branch and if commands
Josef Drexler
josef at ttdpatch.net
Thu Nov 27 11:30:05 UTC 2008
On Nov 27, 2008, at 12:03 PM, Steven Adams wrote:
> I'm just trying to work out how the branch and if commands work
> with rtorrent on version 0.8.4.
>
> I've read the wiki but still don't really understand.
>
> 1. What does branch do exactly??
branch=condition-command,true-command,false-command
branch=condition1,true1,condition2,true2,false2
etc.
It executes the condition command, and if that returns a true value
(non-zero number of non-empty string), it executes the true-command.
Otherwise it checks the next condition (if any) or executes the false-
command.
The "if" command does the same, but its argument isn't a command name
but an expression. Functionally, "branch=foo,bar,baz" and "if=
$foo,bar,baz" do the same, the $ indicates evaluation of its argument
as a command name (by default it's a plain string which would always
be true). Both call the "foo" command, and check its return value to
decide whether to call "bar" or "baz".
> 2. Does an if command execute the command after the comma? So for
> example the below if will execute all the stuff in the quotes. When
> rtorrent see's the ; character does it just execute another
> command? (hope that makes sense)
>
> on_finished = move_complete,"if=d.get_custom4=,\"execute=mv,-u,
> $d.get_base_path=,$d.get_custom1=;d.set_directory=
> $d.get_custom1=;print=test\""
This won't work, the if will always be true (because the string
"d.get_custom4=" is not empty). You need $d.get_custom4= here to
evaluate the command, or you need to use branch=d.get_custom4= instead.
I think the semicolon is a special feature of on_* handlers only, and
it only works after a space, to terminate the argument list of the
previous command and start a new command.
> 3. If i have
>
> if=d.get_custom4=print=test1,print=test2
>
> What does the comma mean?? Does rtorrent just treat it as a
> delimiter to find what commands to execute?
The comma separates arguments to the function call. In your example
you have two arguments, "d.get_custom4=print=test1" and
"print=test2". The first is the condition, but because it's a plain
string it will always be true. The second is the command to run if
the condition is true.
You probably meant either
if=$d.get_custom4=,print=test1,print=test2
or
branch=d.get_custom4=,print=test1,print=test2
These will print "test1" in the log if the download's custom4 value
is set, or "test2" otherwise.
--
Josef Drexler
josef at ttdpatch.net
More information about the Libtorrent-devel
mailing list