2009-05-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Set DownloadResult::IN_PROGRESS for downloads removed by xml-rpc
	command.
	* src/RequestGroup.cc
	* src/RequestGroup.h
	* src/RequestGroupMan.cc
	* src/XmlRpcMethodImpl.cc
	* test/RequestGroupTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2009-05-09 04:11:31 +00:00
parent 933866e315
commit 7e7f809339
6 changed files with 42 additions and 7 deletions

View File

@ -1,3 +1,13 @@
2009-05-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Set DownloadResult::IN_PROGRESS for downloads removed by xml-rpc
command.
* src/RequestGroup.cc
* src/RequestGroup.h
* src/RequestGroupMan.cc
* src/XmlRpcMethodImpl.cc
* test/RequestGroupTest.cc
2009-05-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net> 2009-05-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added more options that can be specified in -i list and xml-rpc Added more options that can be specified in -i list and xml-rpc

View File

@ -123,6 +123,7 @@ RequestGroup::RequestGroup(const SharedHandle<Option>& option,
_preLocalFileCheckEnabled(true), _preLocalFileCheckEnabled(true),
_haltRequested(false), _haltRequested(false),
_forceHaltRequested(false), _forceHaltRequested(false),
_haltReason(RequestGroup::NONE),
_singleHostMultiConnectionEnabled(true), _singleHostMultiConnectionEnabled(true),
_uriSelector(new InOrderURISelector()), _uriSelector(new InOrderURISelector()),
_lastModifiedTime(Time::null()), _lastModifiedTime(Time::null()),
@ -179,7 +180,11 @@ DownloadResult::RESULT RequestGroup::downloadResult() const
return DownloadResult::FINISHED; return DownloadResult::FINISHED;
else { else {
if (_uriResults.empty()) { if (_uriResults.empty()) {
return DownloadResult::UNKNOWN_ERROR; if(_haltReason == RequestGroup::USER_REQUEST) {
return DownloadResult::IN_PROGRESS;
} else {
return DownloadResult::UNKNOWN_ERROR;
}
} else { } else {
return _uriResults.back().getResult(); return _uriResults.back().getResult();
} }
@ -793,9 +798,12 @@ TransferStat RequestGroup::calculateStat()
return stat; return stat;
} }
void RequestGroup::setHaltRequested(bool f) void RequestGroup::setHaltRequested(bool f, HaltReason haltReason)
{ {
_haltRequested = f; _haltRequested = f;
if(_haltRequested) {
_haltReason = haltReason;
}
#ifdef ENABLE_BITTORRENT #ifdef ENABLE_BITTORRENT
if(!_btRuntime.isNull()) { if(!_btRuntime.isNull()) {
_btRuntime->setHalt(f); _btRuntime->setHalt(f);
@ -803,9 +811,9 @@ void RequestGroup::setHaltRequested(bool f)
#endif // ENABLE_BITTORRENT #endif // ENABLE_BITTORRENT
} }
void RequestGroup::setForceHaltRequested(bool f) void RequestGroup::setForceHaltRequested(bool f, HaltReason haltReason)
{ {
setHaltRequested(f); setHaltRequested(f, haltReason);
_forceHaltRequested = f; _forceHaltRequested = f;
} }

View File

@ -74,6 +74,12 @@ class PeerStorage;
#endif // ENABLE_BITTORRENT #endif // ENABLE_BITTORRENT
class RequestGroup { class RequestGroup {
public:
enum HaltReason {
NONE,
SHUTDOWN_SIGNAL,
USER_REQUEST
};
private: private:
static int32_t _gidCounter; static int32_t _gidCounter;
@ -116,6 +122,8 @@ private:
bool _forceHaltRequested; bool _forceHaltRequested;
HaltReason _haltReason;
// URIResult is stored in the ascending order of the time when its result is // URIResult is stored in the ascending order of the time when its result is
// available. // available.
std::deque<URIResult> _uriResults; std::deque<URIResult> _uriResults;
@ -320,9 +328,9 @@ public:
return _preLocalFileCheckEnabled; return _preLocalFileCheckEnabled;
} }
void setHaltRequested(bool f); void setHaltRequested(bool f, HaltReason = SHUTDOWN_SIGNAL);
void setForceHaltRequested(bool f); void setForceHaltRequested(bool f, HaltReason = SHUTDOWN_SIGNAL);
bool isHaltRequested() const bool isHaltRequested() const
{ {

View File

@ -456,6 +456,9 @@ void RequestGroupMan::showDownloadResults(std::ostream& o) const
if((*itr)->result == DownloadResult::FINISHED) { if((*itr)->result == DownloadResult::FINISHED) {
status = MARK_OK; status = MARK_OK;
++ok; ++ok;
} else if((*itr)->result == DownloadResult::IN_PROGRESS) {
status = MARK_INPR;
++inpr;
} else { } else {
status = MARK_ERR; status = MARK_ERR;
++err; ++err;

View File

@ -150,7 +150,7 @@ BDE RemoveXmlRpcMethod::process(const XmlRpcRequest& req, DownloadEngine* e)
(StringFormat("Active Download not found for GID#%d", gid).str()); (StringFormat("Active Download not found for GID#%d", gid).str());
} }
group->setHaltRequested(true); group->setHaltRequested(true, RequestGroup::USER_REQUEST);
BDE resParams = BDE::list(); BDE resParams = BDE::list();
resParams << BDE("OK"); resParams << BDE("OK");

View File

@ -121,6 +121,12 @@ void RequestGroupTest::testCreateDownloadResult()
// result is UNKNOWN_ERROR if download has not completed and no specific // result is UNKNOWN_ERROR if download has not completed and no specific
// error has been reported // error has been reported
CPPUNIT_ASSERT_EQUAL(DownloadResult::UNKNOWN_ERROR, result->result); CPPUNIT_ASSERT_EQUAL(DownloadResult::UNKNOWN_ERROR, result->result);
// if haltReason is set to RequestGroup::USER_REQUEST, download
// result becomes IN_PROGRESS
group.setHaltRequested(true, RequestGroup::USER_REQUEST);
result = group.createDownloadResult();
CPPUNIT_ASSERT_EQUAL(DownloadResult::IN_PROGRESS, result->result);
} }
{ {
group.addURIResult("http://first/file", DownloadResult::TIME_OUT); group.addURIResult("http://first/file", DownloadResult::TIME_OUT);