2010-07-16 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Added --on-bt-download-complete=COMMAND option.  For BitTorrent, a
	command specified in --on-download-complete is called when
	download completes and seeding is over. On the other hand, this
	option set the command to be executed when download completes but
	before seeding.
	* doc/aria2c.1.txt
	* src/DefaultPieceStorage.cc
	* src/OptionHandlerFactory.cc
	* src/prefs.cc
	* src/prefs.h
	* src/usage_text.h
	* src/util.cc
	* src/util.h
pull/1/head
Tatsuhiro Tsujikawa 2010-07-16 15:00:35 +00:00
parent db23e29ecf
commit 34036e58af
11 changed files with 91 additions and 1 deletions

View File

@ -1,3 +1,19 @@
2010-07-16 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added --on-bt-download-complete=COMMAND option. For BitTorrent, a
command specified in --on-download-complete is called when
download completes and seeding is over. On the other hand, this
option set the command to be executed when download completes but
before seeding.
* doc/aria2c.1.txt
* src/DefaultPieceStorage.cc
* src/OptionHandlerFactory.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
* src/util.cc
* src/util.h
2010-07-16 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Updated doc of --split option.

View File

@ -1249,6 +1249,16 @@ or
\fIdebug\fR
.RE
.PP
\fB\-\-on\-bt\-download\-complete\fR=COMMAND
.RS 4
For BitTorrent, a command specified in
\fB\-\-on\-download\-complete\fR
is called when download completes and seeding is over\&. On the other hand, this option set the command to be executed when download completes but before seeding\&. See
\fB\-\-on\-download\-start\fR
option for the requirement of COMMAND\&. Possible Values:
\fI/path/to/command\fR
.RE
.PP
\fB\-\-on\-download\-complete\fR=COMMAND
.RS 4
Set the command to be executed when download completes\&. See

View File

@ -2077,6 +2077,18 @@ name.</td>
</p>
</dd>
<dt class="hdlist1">
<strong>--on-bt-download-complete</strong>=COMMAND
</dt>
<dd>
<p>
For BitTorrent, a command specified in <strong>--on-download-complete</strong> is
called when download completes and seeding is over. On the other
hand, this option set the command to be executed when download
completes but before seeding. See <strong>--on-download-start</strong> option for
the requirement of COMMAND. Possible Values: <em>/path/to/command</em>
</p>
</dd>
<dt class="hdlist1">
<strong>--on-download-complete</strong>=COMMAND
</dt>
<dd>
@ -4230,7 +4242,7 @@ files in the program, then also delete it here.</p></div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2010-07-16 23:25:07 JST
Last updated 2010-07-16 23:44:34 JST
</div>
</div>
</body>

View File

@ -851,6 +851,14 @@ name.
LEVEL is either 'debug', 'info', 'notice', 'warn' or 'error'.
Default: 'debug'
*--on-bt-download-complete*=COMMAND::
For BitTorrent, a command specified in *--on-download-complete* is
called when download completes and seeding is over. On the other
hand, this option set the command to be executed when download
completes but before seeding. See *--on-download-start* option for
the requirement of COMMAND. Possible Values: '/path/to/command'
*--on-download-complete*=COMMAND::
Set the command to be executed when download completes. See

View File

@ -59,6 +59,9 @@
#include "array_fun.h"
#include "PieceStatMan.h"
#include "wallclock.h"
#ifdef ENABLE_BITTORRENT
# include "bittorrent_helper.h"
#endif // ENABLE_BITTORRENT
namespace aria2 {
@ -363,6 +366,16 @@ void DefaultPieceStorage::completePiece(const SharedHandle<Piece>& piece)
} else {
logger_->info(MSG_DOWNLOAD_COMPLETED);
}
#ifdef ENABLE_BITTORRENT
if(downloadContext_->hasAttribute(bittorrent::BITTORRENT)) {
SharedHandle<TorrentAttribute> torrentAttrs =
bittorrent::getTorrentAttrs(downloadContext_);
if(!torrentAttrs->metadata.empty()) {
util::executeHookByOptName(downloadContext_->getOwnerRequestGroup(),
option_, PREF_ON_BT_DOWNLOAD_COMPLETE);
}
}
#endif // ENABLE_BITTORRENT
}
}

View File

@ -1401,6 +1401,16 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
op->addTag(TAG_BITTORRENT);
handlers.push_back(op);
}
{
SharedHandle<OptionHandler> op(new DefaultOptionHandler
(PREF_ON_BT_DOWNLOAD_COMPLETE,
TEXT_ON_BT_DOWNLOAD_COMPLETE,
NO_DEFAULT_VALUE,
"/path/to/command"));
op->addTag(TAG_ADVANCED);
op->addTag(TAG_HOOK);
handlers.push_back(op);
}
{
SharedHandle<NumberOptionHandler> op(new NumberOptionHandler
(PREF_PEER_CONNECTION_TIMEOUT,

View File

@ -354,6 +354,8 @@ const std::string PREF_BT_TRACKER_TIMEOUT("bt-tracker-timeout");
const std::string PREF_BT_TRACKER_CONNECT_TIMEOUT("bt-tracker-connect-timeout");
// values: 1*digit
const std::string PREF_DHT_MESSAGE_TIMEOUT("dht-message-timeout");
// values: string
const std::string PREF_ON_BT_DOWNLOAD_COMPLETE("on-bt-download-complete");
/**
* Metalink related preferences

View File

@ -358,6 +358,8 @@ extern const std::string PREF_BT_TRACKER_TIMEOUT;
extern const std::string PREF_BT_TRACKER_CONNECT_TIMEOUT;
// values: 1*digit
extern const std::string PREF_DHT_MESSAGE_TIMEOUT;
// values: string
extern const std::string PREF_ON_BT_DOWNLOAD_COMPLETE;
/**
* Metalink related preferences

View File

@ -698,3 +698,11 @@
_(" --conditional-get[=true|false] Download file only when the local file is older\n" \
" than remote file. Currently, this function has\n" \
" many limitations. See man page for details.")
#define TEXT_ON_BT_DOWNLOAD_COMPLETE \
_(" --on-bt-download-complete=COMMAND For BitTorrent, a command specified in\n" \
" --on-download-complete is called when download\n" \
" completes and seeding is over. On the other hand,\n" \
" this option sets the command to be executed when\n" \
" download completes but before seeding.\n" \
" See --on-download-start option for the\n" \
" requirement of COMMAND.")

View File

@ -1394,6 +1394,12 @@ void executeHook(const std::string& command, gid_t gid)
void executeHookByOptName
(const SharedHandle<RequestGroup>& group, const Option* option,
const std::string& opt)
{
executeHookByOptName(group.get(), option, opt);
}
void executeHookByOptName
(const RequestGroup* group, const Option* option, const std::string& opt)
{
if(!option->blank(opt)) {
executeHook(option->get(opt), group->getGID());

View File

@ -402,6 +402,9 @@ void executeHookByOptName
(const SharedHandle<RequestGroup>& group, const Option* option,
const std::string& opt);
void executeHookByOptName
(const RequestGroup* group, const Option* option, const std::string& opt);
} // namespace util
} // namespace aria2