Browse Source

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

	getFiles command now returns file data for finished/stopped
	downloads.	
	* src/XmlRpcMethodImpl.cc
Tatsuhiro Tsujikawa 16 years ago
parent
commit
d3ae337ace
2 changed files with 32 additions and 14 deletions
  1. 6 0
      ChangeLog
  2. 26 14
      src/XmlRpcMethodImpl.cc

+ 6 - 0
ChangeLog

@@ -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>
 
 	DownloadResult now has the list of FileEntry.  The download

+ 26 - 14
src/XmlRpcMethodImpl.cc

@@ -247,6 +247,19 @@ findRequestGroup(const SharedHandle<RequestGroupMan>& rgman, int32_t gid)
   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
 (const XmlRpcRequest& req, DownloadEngine* e)
 {
@@ -259,22 +272,21 @@ BDE GetFilesXmlRpcMethod::process
   
   int32_t gid = Util::parseInt(params[0].s());
 
+  BDE files = BDE::list();
   SharedHandle<RequestGroup> group = findRequestGroup(e->_requestGroupMan, gid);
   if(group.isNull()) {
-    throw DlAbortEx
-      (StringFormat("No file data is available for GID#%d", gid).str());
-  }
-  BDE files = BDE::list();
-  std::deque<SharedHandle<FileEntry> > fileEntries =
-    group->getDownloadContext()->getFileEntries();
-  size_t index = 1;
-  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;
+    SharedHandle<DownloadResult> dr =
+      e->_requestGroupMan->findDownloadResult(gid);
+    if(dr.isNull()) {
+      throw DlAbortEx
+	(StringFormat("No file data is available for GID#%d", gid).str());
+    } else {
+      createFileEntry(files, dr->fileEntries.begin(), dr->fileEntries.end());
+    }
+  } else {
+    std::deque<SharedHandle<FileEntry> > fileEntries =
+      group->getDownloadContext()->getFileEntries();
+    createFileEntry(files, fileEntries.begin(), fileEntries.end());
   }
   BDE resParams = BDE::list();
   resParams << files;