Prechádzať zdrojové kódy

Refactor MultiUrlRequestInfo ctor

StatCalc creation is moved to MultiUrlRequestInfo.  The summary output
is done only when PREF_QUIET is false and it is always to
global::cout(), so remove summaryOut_ and just use global::cout() in
that case. Also use std::unique_ptr for statCalc_ in DownloadEngine.
Tatsuhiro Tsujikawa 12 rokov pred
rodič
commit
f83b0fcfa3

+ 1 - 30
src/Context.cc

@@ -57,8 +57,6 @@
 #include "Platform.h"
 #include "FileEntry.h"
 #include "RequestGroup.h"
-#include "ConsoleStatCalc.h"
-#include "NullStatCalc.h"
 #include "download_helper.h"
 #include "Exception.h"
 #include "ProtocolDetector.h"
@@ -66,7 +64,6 @@
 #include "SocketCore.h"
 #include "DownloadContext.h"
 #include "fmt.h"
-#include "NullOutputFile.h"
 #include "console.h"
 #include "UriListParser.h"
 #ifdef ENABLE_BITTORRENT
@@ -85,31 +82,6 @@ extern int optind, opterr, optopt;
 
 namespace aria2 {
 
-std::shared_ptr<StatCalc> getStatCalc(const std::shared_ptr<Option>& op)
-{
-  std::shared_ptr<StatCalc> statCalc;
-  if(op->getAsBool(PREF_QUIET)) {
-    statCalc.reset(new NullStatCalc());
-  } else {
-    std::shared_ptr<ConsoleStatCalc> impl
-      (new ConsoleStatCalc(op->getAsInt(PREF_SUMMARY_INTERVAL),
-                           op->getAsBool(PREF_HUMAN_READABLE)));
-    impl->setReadoutVisibility(op->getAsBool(PREF_SHOW_CONSOLE_READOUT));
-    impl->setTruncate(op->getAsBool(PREF_TRUNCATE_CONSOLE_READOUT));
-    statCalc = impl;
-  }
-  return statCalc;
-}
-
-std::shared_ptr<OutputFile> getSummaryOut(const std::shared_ptr<Option>& op)
-{
-  if(op->getAsBool(PREF_QUIET)) {
-    return std::shared_ptr<OutputFile>(new NullOutputFile());
-  } else {
-    return global::cout();
-  }
-}
-
 #ifdef ENABLE_BITTORRENT
 namespace {
 void showTorrentFile(const std::string& uri)
@@ -281,8 +253,7 @@ Context::Context(bool standalone,
     global::cout()->printf("%s\n", MSG_NO_FILES_TO_DOWNLOAD);
   } else {
     reqinfo.reset(new MultiUrlRequestInfo(std::move(requestGroups),
-                                          op, getStatCalc(op),
-                                          getSummaryOut(op),
+                                          op,
                                           uriListParser));
   }
 }

+ 2 - 2
src/DownloadEngine.cc

@@ -251,9 +251,9 @@ void DownloadEngine::requestForceHalt()
   requestGroupMan_->forceHalt();
 }
 
-void DownloadEngine::setStatCalc(const std::shared_ptr<StatCalc>& statCalc)
+void DownloadEngine::setStatCalc(std::unique_ptr<StatCalc> statCalc)
 {
-  statCalc_ = statCalc;
+  statCalc_ = std::move(statCalc);
 }
 
 #ifdef ENABLE_ASYNC_DNS

+ 2 - 2
src/DownloadEngine.h

@@ -82,7 +82,7 @@ private:
 
   std::shared_ptr<EventPoll> eventPoll_;
 
-  std::shared_ptr<StatCalc> statCalc_;
+  std::unique_ptr<StatCalc> statCalc_;
 
   int haltRequested_;
 
@@ -235,7 +235,7 @@ public:
     option_ = op;
   }
 
-  void setStatCalc(const std::shared_ptr<StatCalc>& statCalc);
+  void setStatCalc(std::unique_ptr<StatCalc> statCalc);
 
   bool isHaltRequested() const
   {

+ 34 - 14
src/MultiUrlRequestInfo.cc

@@ -50,7 +50,8 @@
 #include "message.h"
 #include "util.h"
 #include "Option.h"
-#include "StatCalc.h"
+#include "ConsoleStatCalc.h"
+#include "NullStatCalc.h"
 #include "CookieStorage.h"
 #include "File.h"
 #include "Netrc.h"
@@ -59,10 +60,11 @@
 #include "TimeA2.h"
 #include "fmt.h"
 #include "SocketCore.h"
-#include "OutputFile.h"
+#include "NullOutputFile.h"
 #include "UriListParser.h"
 #include "SingletonHolder.h"
 #include "Notifier.h"
+#include "console.h"
 #ifdef ENABLE_WEBSOCKET
 # include "WebSocketSessionMan.h"
 #else // !ENABLE_WEBSOCKET
@@ -103,16 +105,30 @@ void handler(int signal) {
 }
 } // namespace
 
+namespace {
+
+std::unique_ptr<StatCalc> getStatCalc(const std::shared_ptr<Option>& op)
+{
+  if(op->getAsBool(PREF_QUIET)) {
+    return make_unique<NullStatCalc>();
+  } else {
+    auto impl = make_unique<ConsoleStatCalc>
+      (op->getAsInt(PREF_SUMMARY_INTERVAL),
+       op->getAsBool(PREF_HUMAN_READABLE));
+    impl->setReadoutVisibility(op->getAsBool(PREF_SHOW_CONSOLE_READOUT));
+    impl->setTruncate(op->getAsBool(PREF_TRUNCATE_CONSOLE_READOUT));
+    return std::move(impl);
+  }
+}
+
+} // namespace
+
 MultiUrlRequestInfo::MultiUrlRequestInfo
 (std::vector<std::shared_ptr<RequestGroup> > requestGroups,
  const std::shared_ptr<Option>& op,
- const std::shared_ptr<StatCalc>& statCalc,
- const std::shared_ptr<OutputFile>& summaryOut,
  const std::shared_ptr<UriListParser>& uriListParser)
   : requestGroups_(std::move(requestGroups)),
     option_(op),
-    statCalc_(statCalc),
-    summaryOut_(summaryOut),
     uriListParser_(uriListParser),
     useSignalHandler_(true)
 {
@@ -127,10 +143,12 @@ MultiUrlRequestInfo::~MultiUrlRequestInfo() {}
 
 void MultiUrlRequestInfo::printMessageForContinue()
 {
-  summaryOut_->printf
-    ("\n%s\n%s\n",
-     _("aria2 will resume download if the transfer is restarted."),
-     _("If there are any errors, then see the log file. See '-l' option in help/man page for details."));
+  if(!option_->getAsBool(PREF_QUIET)) {
+    global::cout()->printf
+      ("\n%s\n%s\n",
+       _("aria2 will resume download if the transfer is restarted."),
+       _("If there are any errors, then see the log file. See '-l' option in help/man page for details."));
+  }
 }
 
 int MultiUrlRequestInfo::prepare()
@@ -242,7 +260,7 @@ int MultiUrlRequestInfo::prepare()
       e_->getRequestGroupMan()->removeStaleServerStat
         (option_->getAsInt(PREF_SERVER_STAT_TIMEOUT));
     }
-    e_->setStatCalc(statCalc_);
+    e_->setStatCalc(getStatCalc(option_));
     if(uriListParser_) {
       e_->getRequestGroupMan()->setUriListParser(uriListParser_);
     }
@@ -271,9 +289,11 @@ error_code::Value MultiUrlRequestInfo::getResult()
   if(!serverStatOf.empty()) {
     e_->getRequestGroupMan()->saveServerStat(serverStatOf);
   }
-  e_->getRequestGroupMan()->showDownloadResults
-    (*summaryOut_, option_->get(PREF_DOWNLOAD_RESULT) == A2_V_FULL);
-  summaryOut_->flush();
+  if(!option_->getAsBool(PREF_QUIET)) {
+    e_->getRequestGroupMan()->showDownloadResults
+      (*global::cout(), option_->get(PREF_DOWNLOAD_RESULT) == A2_V_FULL);
+    global::cout()->flush();
+  }
 
   RequestGroupMan::DownloadStat s =
     e_->getRequestGroupMan()->getDownloadStat();

+ 0 - 8
src/MultiUrlRequestInfo.h

@@ -49,8 +49,6 @@ namespace aria2 {
 
 class RequestGroup;
 class Option;
-class StatCalc;
-class OutputFile;
 class UriListParser;
 class DownloadEngine;
 
@@ -60,10 +58,6 @@ private:
 
   std::shared_ptr<Option> option_;
 
-  std::shared_ptr<StatCalc> statCalc_;
-
-  std::shared_ptr<OutputFile> summaryOut_;
-
   std::shared_ptr<UriListParser> uriListParser_;
 
   std::shared_ptr<DownloadEngine> e_;
@@ -83,8 +77,6 @@ public:
   MultiUrlRequestInfo
   (std::vector<std::shared_ptr<RequestGroup> > requestGroups,
    const std::shared_ptr<Option>& op,
-   const std::shared_ptr<StatCalc>& statCalc,
-   const std::shared_ptr<OutputFile>& summaryOut,
    const std::shared_ptr<UriListParser>& uriListParser);
 
   ~MultiUrlRequestInfo();