diff --git a/doc/manual-src/en/aria2c.rst b/doc/manual-src/en/aria2c.rst index 4b7741b2..aeadd3db 100644 --- a/doc/manual-src/en/aria2c.rst +++ b/doc/manual-src/en/aria2c.rst @@ -639,6 +639,14 @@ BitTorrent Specific Options queue gets started. But be aware that seeding item is still recognized as active download in RPC method. Default: ``false`` +.. option:: --bt-enable-hook-after-hash-check[=true|false] + + Allow hook command invocation after hash check (see :option:`-V` + option) in BitTorrent download. By default, when hash check + succeeds, the command given by :option:`--on-bt-download-complete` + is executed. To disable this action, give ``false`` to this option. + Default: ``true`` + .. option:: --bt-enable-lpd[=true|false] Enable Local Peer Discovery. If a private flag is set in a torrent, @@ -1967,6 +1975,7 @@ of URIs. These optional lines must start with white space(s). * :option:`always-resume <--always-resume>` * :option:`async-dns <--async-dns>` * :option:`auto-file-renaming <--auto-file-renaming>` + * :option:`bt-enable-hook-after-hash-check <--bt-enable-hook-after-hash-check>` * :option:`bt-enable-lpd <--bt-enable-lpd>` * :option:`bt-exclude-tracker <--bt-exclude-tracker>` * :option:`bt-external-ip <--bt-external-ip>` diff --git a/src/BtCheckIntegrityEntry.cc b/src/BtCheckIntegrityEntry.cc index b25c4462..c1c93708 100644 --- a/src/BtCheckIntegrityEntry.cc +++ b/src/BtCheckIntegrityEntry.cc @@ -77,9 +77,12 @@ void BtCheckIntegrityEntry::onDownloadFinished { auto group = getRequestGroup(); const auto& option = group->getOption(); - util::executeHookByOptName(group, option.get(), PREF_ON_BT_DOWNLOAD_COMPLETE); - SingletonHolder::instance()->notifyDownloadEvent - (EVENT_ON_BT_DOWNLOAD_COMPLETE, group); + if(option->getAsBool(PREF_BT_ENABLE_HOOK_AFTER_HASH_CHECK)) { + util::executeHookByOptName(group, option.get(), + PREF_ON_BT_DOWNLOAD_COMPLETE); + SingletonHolder::instance()->notifyDownloadEvent + (EVENT_ON_BT_DOWNLOAD_COMPLETE, group); + } // TODO Currently,when all the checksums // are valid, then aria2 goes to seeding mode. Sometimes it is better // to exit rather than doing seeding. So, it would be good to toggle this diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc index 3967d3c7..02d78fc0 100644 --- a/src/OptionHandlerFactory.cc +++ b/src/OptionHandlerFactory.cc @@ -1749,6 +1749,18 @@ std::vector OptionHandlerFactory::createOptionHandlers() op->addTag(TAG_BITTORRENT); handlers.push_back(op); } + { + OptionHandler* op(new BooleanOptionHandler + (PREF_BT_ENABLE_HOOK_AFTER_HASH_CHECK, + TEXT_BT_ENABLE_HOOK_AFTER_HASH_CHECK, + A2_V_TRUE, + OptionHandler::OPT_ARG)); + op->addTag(TAG_BITTORRENT); + op->setInitialOption(true); + op->setChangeGlobalOption(true); + op->setChangeOptionForReserved(true); + handlers.push_back(op); + } { OptionHandler* op(new BooleanOptionHandler (PREF_BT_ENABLE_LPD, diff --git a/src/prefs.cc b/src/prefs.cc index 7da29859..815b8b9d 100644 --- a/src/prefs.cc +++ b/src/prefs.cc @@ -556,6 +556,9 @@ PrefPtr PREF_BT_REMOVE_UNSELECTED_FILE = makePref("bt-remove-unselected-file"); PrefPtr PREF_BT_DETACH_SEED_ONLY = makePref("bt-detach-seed-only"); PrefPtr PREF_BT_FORCE_ENCRYPTION = makePref("bt-force-encryption"); +// values: true | false +PrefPtr PREF_BT_ENABLE_HOOK_AFTER_HASH_CHECK = + makePref("bt-enable-hook-after-hash-check"); /** * Metalink related preferences diff --git a/src/prefs.h b/src/prefs.h index 615f8449..f8115f52 100644 --- a/src/prefs.h +++ b/src/prefs.h @@ -494,6 +494,8 @@ extern PrefPtr PREF_BT_REMOVE_UNSELECTED_FILE; extern PrefPtr PREF_BT_DETACH_SEED_ONLY; // values: true | false extern PrefPtr PREF_BT_FORCE_ENCRYPTION; +// values: true | false +extern PrefPtr PREF_BT_ENABLE_HOOK_AFTER_HASH_CHECK; /** * Metalink related preferences diff --git a/src/usage_text.h b/src/usage_text.h index 9a4b93c3..09c4ae33 100644 --- a/src/usage_text.h +++ b/src/usage_text.h @@ -1046,3 +1046,10 @@ " Specifing 0 will disable this option. This value\n" \ " will be set to socket file descriptor using\n" \ " SO_RCVBUF socket option with setsockopt() call.") +#define TEXT_BT_ENABLE_HOOK_AFTER_HASH_CHECK \ + _(" --bt-enable-hook-after-hash-check[=true|false] Allow hook command invocation\n" \ + " after hash check (see -V option) in BitTorrent\n" \ + " download. By default, when hash check succeeds,\n" \ + " the command given by --on-bt-download-complete\n" \ + " is executed. To disable this action, give false\n" \ + " to this option.")