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.
pull/106/head
Tatsuhiro Tsujikawa 2013-07-06 19:26:30 +09:00
parent 162c138362
commit f83b0fcfa3
5 changed files with 39 additions and 56 deletions

View File

@ -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));
}
}

View File

@ -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

View File

@ -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
{

View File

@ -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();

View File

@ -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();