Ver Fonte

Add --bt-enable-hook-after-hash-check option

This option sets flag which allows hook command invocation after hash
check (see -V option) in BitTorrent download.  By default, when hash
check succeeds, the command given by --on-bt-download-complete is
executed.  To disable this action, give false to this option.
Tatsuhiro Tsujikawa há 10 anos atrás
pai
commit
35f08f05ef

+ 9 - 0
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>`

+ 6 - 3
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<Notifier>::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<Notifier>::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

+ 12 - 0
src/OptionHandlerFactory.cc

@@ -1749,6 +1749,18 @@ std::vector<OptionHandler*> 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,

+ 3 - 0
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

+ 2 - 0
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

+ 7 - 0
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.")