2010-01-17 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Added --human-readable option.  This option, when true is given,
	prints sizes and speed in human readable format(e.g., 1.2Ki,
	3.4Mi) in the console readout. The default value is true and it
	looks exactly the same as aria2-1.8.0.  So the 'new feature'
	appears when false is given.  In this case, sizes and speed are
	printed without in bytes. No Ki, Mi units conversion is used.
	This may be useful for a program to parse the output of aria2.
	* doc/aria2c.1.txt
	* src/ConsoleStatCalc.cc
	* src/ConsoleStatCalc.h
	* src/OptionHandlerFactory.cc
	* src/main.cc
	* src/prefs.cc
	* src/prefs.h
	* src/usage_text.h
pull/1/head
Tatsuhiro Tsujikawa 2010-01-17 07:23:53 +00:00
parent c022939c8f
commit c0308e1ea4
11 changed files with 125 additions and 25 deletions

View File

@ -1,3 +1,21 @@
2010-01-17 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added --human-readable option. This option, when true is given,
prints sizes and speed in human readable format(e.g., 1.2Ki,
3.4Mi) in the console readout. The default value is true and it
looks exactly the same as aria2-1.8.0. So the 'new feature'
appears when false is given. In this case, sizes and speed are
printed without in bytes. No Ki, Mi units conversion is used.
This may be useful for a program to parse the output of aria2.
* doc/aria2c.1.txt
* src/ConsoleStatCalc.cc
* src/ConsoleStatCalc.h
* src/OptionHandlerFactory.cc
* src/main.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
2010-01-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Now --all-proxy, --http-proxy, --https-proxy and --ftp-proxy

View File

@ -2,12 +2,12 @@
.\" Title: aria2c
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
.\" Date: 01/15/2010
.\" Date: 01/17/2010
.\" Manual: Aria2 Manual
.\" Source: Aria2
.\" Language: English
.\"
.TH "ARIA2C" "1" "01/15/2010" "Aria2" "Aria2 Manual"
.TH "ARIA2C" "1" "01/17/2010" "Aria2" "Aria2 Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@ -967,6 +967,12 @@ Default:
\fIprealloc\fR
.RE
.PP
\fB\-\-human\-readable\fR[=\fItrue\fR|\fIfalse\fR]
.RS 4
Print sizes and speed in human readable format (e\&.g\&., 1\&.2Ki, 3\&.4Mi) in the console readout\&. Default:
\fItrue\fR
.RE
.PP
\fB\-\-interface\fR=INTERFACE
.RS 4
Bind sockets to given interface\&. You can specify interface name, IP address and hostname\&. Possible Values: interface, IP address, hostname

View File

@ -1773,6 +1773,15 @@ writes the piece to the appropriate files.</td>
</p>
</dd>
<dt class="hdlist1">
<strong>--human-readable</strong>[=<em>true</em>|<em>false</em>]
</dt>
<dd>
<p>
Print sizes and speed in human readable format (e.g., 1.2Ki, 3.4Mi)
in the console readout. Default: <em>true</em>
</p>
</dd>
<dt class="hdlist1">
<strong>--interface</strong>=INTERFACE
</dt>
<dd>
@ -3578,7 +3587,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-01-15 17:58:00 JST
Last updated 2010-01-17 16:21:53 JST
</div>
</div>
</body>

View File

@ -673,6 +673,11 @@ Advanced Options
Possible Values: 'none', 'prealloc', 'falloc'
Default: 'prealloc'
*--human-readable*[='true'|'false']::
Print sizes and speed in human readable format (e.g., 1.2Ki, 3.4Mi)
in the console readout. Default: 'true'
*--interface*=INTERFACE::
Bind sockets to given interface. You can specify interface name, IP

View File

@ -72,7 +72,8 @@
namespace aria2 {
static void printProgress
(std::ostream& o, const SharedHandle<RequestGroup>& rg, const DownloadEngine* e)
(std::ostream& o, const SharedHandle<RequestGroup>& rg, const DownloadEngine* e,
const SizeFormatter& sizeFormatter)
{
TransferStat stat = rg->calculateStat();
unsigned int eta = 0;
@ -100,10 +101,10 @@ static void printProgress
#endif // ENABLE_BITTORRENT
{
o << "SIZE:"
<< util::abbrevSize(rg->getCompletedLength())
<< sizeFormatter(rg->getCompletedLength())
<< "B"
<< "/"
<< util::abbrevSize(rg->getTotalLength())
<< sizeFormatter(rg->getTotalLength())
<< "B";
if(rg->getTotalLength() > 0) {
o << "("
@ -128,13 +129,13 @@ static void printProgress
if(!rg->downloadFinished()) {
o << " "
<< "SPD:"
<< util::abbrevSize(stat.getDownloadSpeed()) << "Bs";
<< sizeFormatter(stat.getDownloadSpeed()) << "Bs";
}
if(stat.getSessionUploadLength() > 0) {
o << " "
<< "UP:"
<< util::abbrevSize(stat.getUploadSpeed()) << "Bs"
<< "(" << util::abbrevSize(stat.getAllTimeUploadLength()) << "B)";
<< sizeFormatter(stat.getUploadSpeed()) << "Bs"
<< "(" << sizeFormatter(stat.getAllTimeUploadLength()) << "B)";
}
if(eta > 0) {
o << " "
@ -149,13 +150,17 @@ class PrintSummary
private:
size_t _cols;
const DownloadEngine* _e;
const SizeFormatter& _sizeFormatter;
public:
PrintSummary(size_t cols, const DownloadEngine* e):_cols(cols), _e(e) {}
PrintSummary
(size_t cols, const DownloadEngine* e,
const SizeFormatter& sizeFormatter):
_cols(cols), _e(e), _sizeFormatter(sizeFormatter) {}
void operator()(const SharedHandle<RequestGroup>& rg)
{
const char SEP_CHAR = '-';
printProgress(std::cout, rg, _e);
printProgress(std::cout, rg, _e, _sizeFormatter);
const std::vector<SharedHandle<FileEntry> >& fileEntries =
rg->getDownloadContext()->getFileEntries();
std::cout << "\n"
@ -169,7 +174,8 @@ public:
static void printProgressSummary
(const std::deque<SharedHandle<RequestGroup> >& groups, size_t cols,
const DownloadEngine* e)
const DownloadEngine* e,
const SizeFormatter& sizeFormatter)
{
const char SEP_CHAR = '=';
time_t now;
@ -190,12 +196,19 @@ static void printProgressSummary
}
std::cout << " *** " << "\n"
<< std::setfill(SEP_CHAR) << std::setw(cols) << SEP_CHAR << "\n";
std::for_each(groups.begin(), groups.end(), PrintSummary(cols, e));
std::for_each(groups.begin(), groups.end(),
PrintSummary(cols, e, sizeFormatter));
}
ConsoleStatCalc::ConsoleStatCalc(time_t summaryInterval):
ConsoleStatCalc::ConsoleStatCalc(time_t summaryInterval, bool humanReadable):
_summaryInterval(summaryInterval)
{}
{
if(humanReadable) {
_sizeFormatter.reset(new AbbrevSizeFormatter());
} else {
_sizeFormatter.reset(new PlainSizeFormatter());
}
}
void
ConsoleStatCalc::calculateStat(const DownloadEngine* e)
@ -204,7 +217,7 @@ ConsoleStatCalc::calculateStat(const DownloadEngine* e)
return;
}
_cp.reset();
const SizeFormatter& sizeFormatter = *_sizeFormatter.get();
bool isTTY = isatty(STDOUT_FILENO) == 1;
unsigned short int cols = 80;
#ifdef __MINGW32__
@ -231,13 +244,14 @@ ConsoleStatCalc::calculateStat(const DownloadEngine* e)
if((_summaryInterval > 0) &&
_lastSummaryNotified.elapsed(_summaryInterval)) {
_lastSummaryNotified.reset();
printProgressSummary(e->_requestGroupMan->getRequestGroups(), cols, e);
printProgressSummary(e->_requestGroupMan->getRequestGroups(), cols, e,
sizeFormatter);
std::cout << "\n";
}
RequestGroupHandle firstRequestGroup = e->_requestGroupMan->getRequestGroup(0);
printProgress(o, firstRequestGroup, e);
printProgress(o, firstRequestGroup, e, sizeFormatter);
if(e->_requestGroupMan->countRequestGroup() > 1) {
o << "("
@ -251,7 +265,7 @@ ConsoleStatCalc::calculateStat(const DownloadEngine* e)
TransferStat stat = e->_requestGroupMan->calculateStat();
o << " "
<< "[TOTAL SPD:"
<< util::abbrevSize(stat.getDownloadSpeed()) << "Bs" << "]";
<< sizeFormatter(stat.getDownloadSpeed()) << "Bs" << "]";
}
{
@ -260,10 +274,10 @@ ConsoleStatCalc::calculateStat(const DownloadEngine* e)
o << " "
<< "[FileAlloc:"
<< "#" << entry->getRequestGroup()->getGID() << " "
<< util::abbrevSize(entry->getCurrentLength())
<< sizeFormatter(entry->getCurrentLength())
<< "B"
<< "/"
<< util::abbrevSize(entry->getTotalLength())
<< sizeFormatter(entry->getTotalLength())
<< "B"
<< "(";
if(entry->getTotalLength() > 0) {
@ -287,10 +301,10 @@ ConsoleStatCalc::calculateStat(const DownloadEngine* e)
o << " "
<< "[Checksum:"
<< "#" << entry->getRequestGroup()->getGID() << " "
<< util::abbrevSize(entry->getCurrentLength())
<< sizeFormatter(entry->getCurrentLength())
<< "B"
<< "/"
<< util::abbrevSize(entry->getTotalLength())
<< sizeFormatter(entry->getTotalLength())
<< "B"
<< "("
<< 100*entry->getCurrentLength()/entry->getTotalLength()

View File

@ -37,9 +37,38 @@
#include "StatCalc.h"
#include "TimeA2.h"
#include "util.h"
namespace aria2 {
class SizeFormatter:public std::unary_function<int64_t, std::string> {
protected:
virtual std::string format(int64_t size) const = 0;
public:
virtual ~SizeFormatter() {}
std::string operator()(int64_t size) const
{
return format(size);
}
};
class AbbrevSizeFormatter:public SizeFormatter {
protected:
virtual std::string format(int64_t size) const
{
return util::abbrevSize(size);
}
};
class PlainSizeFormatter:public SizeFormatter {
protected:
virtual std::string format(int64_t size) const
{
return util::itos(size);
}
};
class ConsoleStatCalc:public StatCalc
{
private:
@ -48,8 +77,10 @@ private:
Time _lastSummaryNotified;
time_t _summaryInterval;
SharedHandle<SizeFormatter> _sizeFormatter;
public:
ConsoleStatCalc(time_t summaryInterval);
ConsoleStatCalc(time_t summaryInterval, bool humanReadable = true);
virtual ~ConsoleStatCalc() {}

View File

@ -238,6 +238,15 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
op->addTag(TAG_BASIC);
handlers.push_back(op);
}
{
SharedHandle<OptionHandler> op(new BooleanOptionHandler
(PREF_HUMAN_READABLE,
TEXT_HUMAN_READABLE,
V_TRUE,
OptionHandler::OPT_ARG));
op->addTag(TAG_ADVANCED);
handlers.push_back(op);
}
{
SharedHandle<OptionHandler> op(new DefaultOptionHandler
(PREF_INPUT_FILE,

View File

@ -94,7 +94,8 @@ SharedHandle<StatCalc> getStatCalc(const SharedHandle<Option>& op)
if(op->getAsBool(PREF_QUIET)) {
statCalc.reset(new NullStatCalc());
} else {
statCalc.reset(new ConsoleStatCalc(op->getAsInt(PREF_SUMMARY_INTERVAL)));
statCalc.reset(new ConsoleStatCalc(op->getAsInt(PREF_SUMMARY_INTERVAL),
op->getAsBool(PREF_HUMAN_READABLE)));
}
return statCalc;
}

View File

@ -176,6 +176,8 @@ const std::string PREF_XML_RPC_LISTEN_ALL("xml-rpc-listen-all");
const std::string PREF_INTERFACE("interface");
// value: true | false
const std::string PREF_DISABLE_IPV6("disable-ipv6");
// value: true | false
const std::string PREF_HUMAN_READABLE("human-readable");
/**
* FTP related preferences

View File

@ -180,6 +180,8 @@ extern const std::string PREF_XML_RPC_LISTEN_ALL;
extern const std::string PREF_INTERFACE;
// value: true | false
extern const std::string PREF_DISABLE_IPV6;
// value: true | false
extern const std::string PREF_HUMAN_READABLE;
/**
* FTP related preferences

View File

@ -606,3 +606,6 @@
" in metadata will not be downloaded. This option\n" \
" has effect only when BitTorrent Magnet URI is\n" \
" used. See also --bt-save-metadata option.")
#define TEXT_HUMAN_READABLE \
_(" --human-readable[=true|false] Print sizes and speed in human readable format\n" \
" (e.g., 1.2Ki, 3.4Mi) in the console readout.")