diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-06-23 15:14:24 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-06-23 15:14:24 +0000 |
| commit | 6b2ab3ffc0d96d66723fa8b43552fd09d2108781 (patch) | |
| tree | 8d556ed0e0ad4be116396d1fcfda16d90288bc73 /src | |
| parent | 100ed86b5caebf0c9d68d36378f052dfe0ad56e9 (diff) | |
2009-06-24 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added tellWaiting XML-RPC method.
* src/SingleFileDownloadContext.cc
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* test/XmlRpcMethodTest.cc
Diffstat (limited to 'src')
| -rw-r--r-- | src/SingleFileDownloadContext.cc | 6 | ||||
| -rw-r--r-- | src/XmlRpcMethodFactory.cc | 2 | ||||
| -rw-r--r-- | src/XmlRpcMethodImpl.cc | 42 | ||||
| -rw-r--r-- | src/XmlRpcMethodImpl.h | 5 |
4 files changed, 54 insertions, 1 deletions
diff --git a/src/SingleFileDownloadContext.cc b/src/SingleFileDownloadContext.cc index 92332f85..1acbb2b1 100644 --- a/src/SingleFileDownloadContext.cc +++ b/src/SingleFileDownloadContext.cc @@ -83,7 +83,11 @@ bool SingleFileDownloadContext::knowsTotalLength() const size_t SingleFileDownloadContext::getNumPieces() const { - return (_fileEntries.front()->getLength()+_pieceLength-1)/_pieceLength; + if(_pieceLength == 0) { + return 0; + } else { + return (_fileEntries.front()->getLength()+_pieceLength-1)/_pieceLength; + } } std::string SingleFileDownloadContext::getActualBasePath() const diff --git a/src/XmlRpcMethodFactory.cc b/src/XmlRpcMethodFactory.cc index c42007ab..f6495fc8 100644 --- a/src/XmlRpcMethodFactory.cc +++ b/src/XmlRpcMethodFactory.cc @@ -71,6 +71,8 @@ XmlRpcMethodFactory::create(const std::string& methodName) #endif // ENABLE_BITTORRENT } else if(methodName == "aria2.tellActive") { return SharedHandle<XmlRpcMethod>(new TellActiveXmlRpcMethod()); + } else if(methodName == "aria2.tellWaiting") { + return SharedHandle<XmlRpcMethod>(new TellWaitingXmlRpcMethod()); } else if(methodName == "aria2.changeOption") { return SharedHandle<XmlRpcMethod>(new ChangeOptionXmlRpcMethod()); } else if(methodName == "aria2.changeGlobalOption") { diff --git a/src/XmlRpcMethodImpl.cc b/src/XmlRpcMethodImpl.cc index 176f18c0..8bc629a2 100644 --- a/src/XmlRpcMethodImpl.cc +++ b/src/XmlRpcMethodImpl.cc @@ -521,6 +521,48 @@ BDE TellActiveXmlRpcMethod::process return list; } +BDE TellWaitingXmlRpcMethod::process +(const XmlRpcRequest& req, DownloadEngine* e) +{ + const BDE& params = req._params; + assert(params.isList()); + + if(params.size() != 2 || + !params[0].isInteger() || !params[1].isInteger() || + params[0].i() < 0 || params[1].i() < 0) { + throw DL_ABORT_EX("Invalid argument. Specify offset and num in integer."); + } + + size_t offset = params[0].i(); + size_t num = params[1].i(); + + BDE list = BDE::list(); + const std::deque<SharedHandle<RequestGroup> >& waitings = + e->_requestGroupMan->getReservedGroups(); + if(waitings.size() <= offset) { + return list; + } + size_t lastDistance; + if(waitings.size() < offset+num) { + lastDistance = waitings.size(); + } else { + lastDistance = offset+num; + } + std::deque<SharedHandle<RequestGroup> >::const_iterator first = + waitings.begin(); + std::advance(first, offset); + std::deque<SharedHandle<RequestGroup> >::const_iterator last = + waitings.begin(); + std::advance(last, lastDistance); + for(; first != last; ++first) { + BDE entryDict = BDE::dict(); + entryDict["status"] = BDE_WAITING; + gatherProgress(entryDict, *first, e); + list << entryDict; + } + return list; +} + BDE PurgeDownloadResultXmlRpcMethod::process (const XmlRpcRequest& req, DownloadEngine* e) { diff --git a/src/XmlRpcMethodImpl.h b/src/XmlRpcMethodImpl.h index 917b198d..765f7748 100644 --- a/src/XmlRpcMethodImpl.h +++ b/src/XmlRpcMethodImpl.h @@ -97,6 +97,11 @@ protected: virtual BDE process(const XmlRpcRequest& req, DownloadEngine* e); }; +class TellWaitingXmlRpcMethod:public XmlRpcMethod { +protected: + virtual BDE process(const XmlRpcRequest& req, DownloadEngine* e); +}; + class ChangeOptionXmlRpcMethod:public XmlRpcMethod { protected: virtual BDE process(const XmlRpcRequest& req, DownloadEngine* e); |
