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

getFiles command now returns file data for finished/stopped
	downloads.	
	* src/XmlRpcMethodImpl.cc
pull/1/head
Tatsuhiro Tsujikawa 2009-05-12 15:17:18 +00:00
parent 8bbbc9c33b
commit d3ae337ace
2 changed files with 32 additions and 14 deletions

View File

@ -1,3 +1,9 @@
2009-05-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
getFiles command now returns file data for finished/stopped
downloads.
* src/XmlRpcMethodImpl.cc
2009-05-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net> 2009-05-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
DownloadResult now has the list of FileEntry. The download DownloadResult now has the list of FileEntry. The download

View File

@ -247,6 +247,19 @@ findRequestGroup(const SharedHandle<RequestGroupMan>& rgman, int32_t gid)
return group; return group;
} }
template<typename InputIterator>
static void createFileEntry(BDE& files, InputIterator first, InputIterator last)
{
size_t index = 1;
for(; first != last; ++first, ++index) {
BDE entry = BDE::dict();
entry["index"] = Util::uitos(index);
entry["path"] = (*first)->getPath();
entry["selected"] = (*first)->isRequested()?BDE("true"):BDE("false");
files << entry;
}
}
BDE GetFilesXmlRpcMethod::process BDE GetFilesXmlRpcMethod::process
(const XmlRpcRequest& req, DownloadEngine* e) (const XmlRpcRequest& req, DownloadEngine* e)
{ {
@ -259,22 +272,21 @@ BDE GetFilesXmlRpcMethod::process
int32_t gid = Util::parseInt(params[0].s()); int32_t gid = Util::parseInt(params[0].s());
BDE files = BDE::list();
SharedHandle<RequestGroup> group = findRequestGroup(e->_requestGroupMan, gid); SharedHandle<RequestGroup> group = findRequestGroup(e->_requestGroupMan, gid);
if(group.isNull()) { if(group.isNull()) {
SharedHandle<DownloadResult> dr =
e->_requestGroupMan->findDownloadResult(gid);
if(dr.isNull()) {
throw DlAbortEx throw DlAbortEx
(StringFormat("No file data is available for GID#%d", gid).str()); (StringFormat("No file data is available for GID#%d", gid).str());
} else {
createFileEntry(files, dr->fileEntries.begin(), dr->fileEntries.end());
} }
BDE files = BDE::list(); } else {
std::deque<SharedHandle<FileEntry> > fileEntries = std::deque<SharedHandle<FileEntry> > fileEntries =
group->getDownloadContext()->getFileEntries(); group->getDownloadContext()->getFileEntries();
size_t index = 1; createFileEntry(files, fileEntries.begin(), fileEntries.end());
for(std::deque<SharedHandle<FileEntry> >::const_iterator i =
fileEntries.begin(); i != fileEntries.end(); ++i, ++index) {
BDE entry = BDE::dict();
entry["index"] = Util::uitos(index);
entry["path"] = (*i)->getPath();
entry["selected"] = (*i)->isRequested()?BDE("true"):BDE("false");
files << entry;
} }
BDE resParams = BDE::list(); BDE resParams = BDE::list();
resParams << files; resParams << files;