diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-03-06 14:21:43 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-03-06 14:21:43 +0000 |
| commit | b1713e63738839e861f0b10ef6ad58f0e93aef3e (patch) | |
| tree | f10b44c5e2b06ceb3cbe756fbbc865485c018702 /src/FileEntry.cc | |
| parent | 61b2b88c29accbc5a4b04471abbd5cc7e38c4baf (diff) | |
2010-03-06 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added changeUri XML-RPC method. This method removes/adds URIs
dynamically.
* doc/aria2c.1.txt
* src/AbstractCommand.cc
* src/DownloadContext.cc
* src/DownloadContext.h
* src/FileEntry.cc
* src/FileEntry.h
* src/Request.cc
* src/Request.h
* src/RequestGroup.cc
* src/RequestGroupMan.cc
* src/XmlRpcMethodFactory.cc
* src/XmlRpcMethodImpl.cc
* src/XmlRpcMethodImpl.h
* test/FileEntryTest.cc
* test/XmlRpcMethodTest.cc
Diffstat (limited to 'src/FileEntry.cc')
| -rw-r--r-- | src/FileEntry.cc | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/src/FileEntry.cc b/src/FileEntry.cc index adc12da4..db0ff1b9 100644 --- a/src/FileEntry.cc +++ b/src/FileEntry.cc @@ -218,7 +218,9 @@ void FileEntry::storePool(const SharedHandle<Request>& request) void FileEntry::poolRequest(const SharedHandle<Request>& request) { removeRequest(request); - storePool(request); + if(!request->removalRequested()) { + storePool(request); + } } bool FileEntry::removeRequest(const SharedHandle<Request>& request) @@ -330,4 +332,49 @@ void FileEntry::releaseRuntimeResource() _uriResults.clear(); } +template<typename InputIterator, typename T> +static InputIterator findRequestByUri +(InputIterator first, InputIterator last, const T& uri) +{ + for(; first != last; ++first) { + if(!(*first)->removalRequested() && (*first)->getUrl() == uri) { + return first; + } + } + return last; +} + +bool FileEntry::removeUri(const std::string& uri) +{ + std::deque<std::string>::iterator itr = + std::find(_spentUris.begin(), _spentUris.end(), uri); + if(itr == _spentUris.end()) { + itr = std::find(_uris.begin(), _uris.end(), uri); + if(itr == _uris.end()) { + return false; + } else { + _uris.erase(itr); + return true; + } + } else { + _spentUris.erase(itr); + SharedHandle<Request> req; + std::deque<SharedHandle<Request> >::iterator riter = + findRequestByUri(_inFlightRequests.begin(), _inFlightRequests.end(), uri); + if(riter == _inFlightRequests.end()) { + riter = findRequestByUri(_requestPool.begin(), _requestPool.end(), uri); + if(riter == _requestPool.end()) { + return true; + } else { + req = *riter; + _requestPool.erase(riter); + } + } else { + req = *riter; + } + req->requestRemoval(); + return true; + } +} + } // namespace aria2 |
