Преглед на файлове

2008-05-11 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

	Changed method signature:
	PostDownloadHandler::getNextRequestGroups
	Metalink2RequestGroup::generate
	RequestGroup::postDownloadProcessing
	* src/BtPostDownloadHandler.cc
	* src/BtPostDownloadHandler.h
	* src/Metalink2RequestGroup.cc
	* src/Metalink2RequestGroup.h
	* src/MetalinkPostDownloadHandler.cc
	* src/MetalinkPostDownloadHandler.h
	* src/PostDownloadHandler.h
	* src/RequestGroup.cc
	* src/RequestGroup.h
	* src/RequestGroupMan.cc
	* src/main.cc
	* test/BtPostDownloadHandlerTest.cc
	* test/Metalink2RequestGroupTest.cc
	* test/MetalinkPostDownloadHandlerTest.cc
Tatsuhiro Tsujikawa преди 17 години
родител
ревизия
b96eb7fd79

+ 21 - 0
ChangeLog

@@ -1,3 +1,24 @@
+2008-05-11  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
+
+	Changed method signature:
+	PostDownloadHandler::getNextRequestGroups
+	Metalink2RequestGroup::generate
+	RequestGroup::postDownloadProcessing
+	* src/BtPostDownloadHandler.cc
+	* src/BtPostDownloadHandler.h
+	* src/Metalink2RequestGroup.cc
+	* src/Metalink2RequestGroup.h
+	* src/MetalinkPostDownloadHandler.cc
+	* src/MetalinkPostDownloadHandler.h
+	* src/PostDownloadHandler.h
+	* src/RequestGroup.cc
+	* src/RequestGroup.h
+	* src/RequestGroupMan.cc
+	* src/main.cc
+	* test/BtPostDownloadHandlerTest.cc
+	* test/Metalink2RequestGroupTest.cc
+	* test/MetalinkPostDownloadHandlerTest.cc
+	
 2008-05-11  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 
 	Rewritten AccRequestGroup

+ 3 - 3
src/BtPostDownloadHandler.cc

@@ -58,7 +58,9 @@ BtPostDownloadHandler::BtPostDownloadHandler()
 
 BtPostDownloadHandler::~BtPostDownloadHandler() {}
 
-RequestGroups BtPostDownloadHandler::getNextRequestGroups(RequestGroup* requestGroup)
+void BtPostDownloadHandler::getNextRequestGroups
+(std::deque<SharedHandle<RequestGroup> >& groups,
+ RequestGroup* requestGroup)
 {
   const Option* op = requestGroup->getOption();
   _logger->debug("Generating RequestGroups for Torrent file %s",
@@ -83,9 +85,7 @@ RequestGroups BtPostDownloadHandler::getNextRequestGroups(RequestGroup* requestG
   rg->setDownloadContext(btContext);
   btContext->setOwnerRequestGroup(rg.get());
   
-  RequestGroups groups;
   groups.push_back(rg);
-  return groups;
 }
 
 } // namespace aria2

+ 3 - 2
src/BtPostDownloadHandler.h

@@ -46,8 +46,9 @@ public:
 
   virtual ~BtPostDownloadHandler();
 
-  virtual std::deque<SharedHandle<RequestGroup> >
-  getNextRequestGroups(RequestGroup* requestGroup);
+  virtual void
+  getNextRequestGroups(std::deque<SharedHandle<RequestGroup> >& groups,
+		       RequestGroup* requestGroup);
 };
 
 typedef SharedHandle<BtPostDownloadHandler> BtPostDownloadHandlerHandle;

+ 13 - 11
src/Metalink2RequestGroup.cc

@@ -98,28 +98,32 @@ public:
   }
 };
 
-std::deque<SharedHandle<RequestGroup> >
-Metalink2RequestGroup::generate(const std::string& metalinkFile)
+void
+Metalink2RequestGroup::generate(std::deque<SharedHandle<RequestGroup> >& groups,
+				const std::string& metalinkFile)
 {
   std::deque<SharedHandle<MetalinkEntry> > entries = MetalinkHelper::parseAndQuery(metalinkFile,
 							  _option);
-  return createRequestGroup(entries);
+  createRequestGroup(groups, entries);
 }
 
-std::deque<SharedHandle<RequestGroup> >
-Metalink2RequestGroup::generate(const SharedHandle<BinaryStream>& binaryStream)
+void
+Metalink2RequestGroup::generate(std::deque<SharedHandle<RequestGroup> >& groups,
+				const SharedHandle<BinaryStream>& binaryStream)
 {
   std::deque<SharedHandle<MetalinkEntry> > entries = MetalinkHelper::parseAndQuery(binaryStream,
 							  _option);
-  return createRequestGroup(entries);
+  createRequestGroup(groups, entries);
 }
 
-std::deque<SharedHandle<RequestGroup> >
-Metalink2RequestGroup::createRequestGroup(std::deque<SharedHandle<MetalinkEntry> > entries)
+void
+Metalink2RequestGroup::createRequestGroup
+(std::deque<SharedHandle<RequestGroup> >& groups,
+ std::deque<SharedHandle<MetalinkEntry> > entries)
 {
   if(entries.size() == 0) {
     _logger->notice(EX_NO_RESULT_WITH_YOUR_PREFS);
-    return std::deque<SharedHandle<RequestGroup> >();
+    return;
   }
   std::deque<int32_t> selectIndexes = Util::parseIntRange(_option->get(PREF_SELECT_FILE)).flush();
   bool useIndex;
@@ -128,7 +132,6 @@ Metalink2RequestGroup::createRequestGroup(std::deque<SharedHandle<MetalinkEntry>
   } else {
     useIndex = false;
   }
-  std::deque<SharedHandle<RequestGroup> > groups;
   unsigned int count = 0;
   for(std::deque<SharedHandle<MetalinkEntry> >::iterator itr = entries.begin(); itr != entries.end();
       itr++, ++count) {
@@ -235,7 +238,6 @@ Metalink2RequestGroup::createRequestGroup(std::deque<SharedHandle<MetalinkEntry>
 #endif // ENABLE_BITTORRENT
     groups.push_back(rg);
   }
-  return groups;
 }
 
 } // namespace aria2

+ 7 - 4
src/Metalink2RequestGroup.h

@@ -54,16 +54,19 @@ private:
 
   Logger* _logger;
 
-  std::deque<SharedHandle<RequestGroup> >
-  createRequestGroup(std::deque<SharedHandle<MetalinkEntry> > entries);
+  void
+  createRequestGroup(std::deque<SharedHandle<RequestGroup> >& groups,
+		     std::deque<SharedHandle<MetalinkEntry> > entries);
 public:
   Metalink2RequestGroup(const Option* option);
 
   ~Metalink2RequestGroup();
 
-  std::deque<SharedHandle<RequestGroup> > generate(const std::string& metalinkFile);
+  void generate(std::deque<SharedHandle<RequestGroup> >& groups,
+		const std::string& metalinkFile);
 
-  std::deque<SharedHandle<RequestGroup> > generate(const SharedHandle<BinaryStream>& binaryStream);
+  void generate(std::deque<SharedHandle<RequestGroup> >& groups,
+		const SharedHandle<BinaryStream>& binaryStream);
 };
 
 } // namespace aria2

+ 4 - 4
src/MetalinkPostDownloadHandler.cc

@@ -54,8 +54,9 @@ MetalinkPostDownloadHandler::MetalinkPostDownloadHandler()
 
 MetalinkPostDownloadHandler::~MetalinkPostDownloadHandler() {}
 
-std::deque<SharedHandle<RequestGroup> >
-MetalinkPostDownloadHandler::getNextRequestGroups(RequestGroup* requestGroup)
+void MetalinkPostDownloadHandler::getNextRequestGroups
+(std::deque<SharedHandle<RequestGroup> >& groups,
+ RequestGroup* requestGroup)
 {
   const Option* op = requestGroup->getOption();
   _logger->debug("Generating RequestGroups for Metalink file %s",
@@ -63,9 +64,8 @@ MetalinkPostDownloadHandler::getNextRequestGroups(RequestGroup* requestGroup)
   SharedHandle<DiskAdaptor> diskAdaptor = requestGroup->getPieceStorage()->getDiskAdaptor();
   try {
     diskAdaptor->openExistingFile();
-    std::deque<SharedHandle<RequestGroup> > rgs = Metalink2RequestGroup(op).generate(diskAdaptor);
+    Metalink2RequestGroup(op).generate(groups, diskAdaptor);
     diskAdaptor->closeFile();
-    return rgs;
   } catch(Exception& e) {
     diskAdaptor->closeFile();
     throw;

+ 3 - 2
src/MetalinkPostDownloadHandler.h

@@ -46,8 +46,9 @@ public:
 
   virtual ~MetalinkPostDownloadHandler();
 
-  virtual std::deque<SharedHandle<RequestGroup> >
-  getNextRequestGroups(RequestGroup* requestGroup);
+  virtual void
+  getNextRequestGroups(std::deque<SharedHandle<RequestGroup> >& groups,
+		       RequestGroup* requestGroup);
 };
 
 typedef SharedHandle<MetalinkPostDownloadHandler> MetalinkPostDownloadHandlerHandle;

+ 3 - 2
src/PostDownloadHandler.h

@@ -46,8 +46,9 @@ public:
 
   virtual ~PostDownloadHandler() {}
 
-  virtual std::deque<SharedHandle<RequestGroup> >
-  getNextRequestGroups(RequestGroup* requestGroup) = 0;
+  virtual void
+  getNextRequestGroups(std::deque<SharedHandle<RequestGroup> >& groups,
+		       RequestGroup* requestGroup) = 0;
 };
 
 typedef SharedHandle<PostDownloadHandler> PostDownloadHandlerHandle;

+ 4 - 4
src/RequestGroup.cc

@@ -706,22 +706,22 @@ void RequestGroup::preDownloadProcessing()
   return;
 }
 
-RequestGroups RequestGroup::postDownloadProcessing()
+void RequestGroup::postDownloadProcessing
+(std::deque<SharedHandle<RequestGroup> >& groups)
 {
   _logger->debug("Finding PostDownloadHandler for path %s.", getFilePath().c_str());
   try {
     for(PostDownloadHandlers::const_iterator itr = _postDownloadHandlers.begin();
 	itr != _postDownloadHandlers.end(); ++itr) {
       if((*itr)->canHandle(this)) {
-	return (*itr)->getNextRequestGroups(this);
+	(*itr)->getNextRequestGroups(groups, this);
+	return;
       }
     }
   } catch(RecoverableException& ex) {
     _logger->error(EX_EXCEPTION_CAUGHT, ex);
-    return RequestGroups();
   }
   _logger->debug("No PostDownloadHandler found.");
-  return RequestGroups();
 }
 
 void RequestGroup::initializePreDownloadHandler()

+ 1 - 1
src/RequestGroup.h

@@ -283,7 +283,7 @@ public:
 
   void releaseRuntimeResource();
 
-  std::deque<SharedHandle<RequestGroup> > postDownloadProcessing();
+  void postDownloadProcessing(std::deque<SharedHandle<RequestGroup> >& groups);
 
   void addPostDownloadHandler(const SharedHandle<PostDownloadHandler>& handler);
 

+ 2 - 1
src/RequestGroupMan.cc

@@ -117,7 +117,8 @@ void RequestGroupMan::removeStoppedGroup()
 	  } else {
 	    (*itr)->getProgressInfoFile()->save();
 	  }
-	  RequestGroups nextGroups = (*itr)->postDownloadProcessing();
+	  RequestGroups nextGroups;
+	  (*itr)->postDownloadProcessing(nextGroups);
 	  if(nextGroups.size() > 0) {
 	    _logger->debug("Adding %u RequestGroups as a result of PostDownloadHandler.", nextGroups.size());
 	    std::copy(nextGroups.rbegin(), nextGroups.rend(), std::front_inserter(_reservedGroups));

+ 3 - 4
src/main.cc

@@ -190,7 +190,8 @@ int32_t downloadBitTorrent(Option* op, const std::deque<std::string>& uri)
 #ifdef ENABLE_METALINK
 int32_t downloadMetalink(Option* op)
 {
-  RequestGroups groups = Metalink2RequestGroup(op).generate(op->get(PREF_METALINK_FILE));
+  RequestGroups groups;
+  Metalink2RequestGroup(op).generate(groups, op->get(PREF_METALINK_FILE));
   if(groups.empty()) {
     throw FatalException("No files to download.");
   }
@@ -234,9 +235,7 @@ public:
 #ifdef ENABLE_METALINK
     else if(_detector.guessMetalinkFile(uri)) {
       try {
-	std::deque<SharedHandle<RequestGroup> > metalinkGroups =
-	  Metalink2RequestGroup(_op).generate(uri);
-	_requestGroups.insert(_requestGroups.end(), metalinkGroups.begin(), metalinkGroups.end());
+	Metalink2RequestGroup(_op).generate(_requestGroups, uri);
       } catch(RecoverableException& e) {
 	// error occurred while parsing metalink file.
 	// We simply ignore it.

+ 2 - 1
test/BtPostDownloadHandlerTest.cc

@@ -71,7 +71,8 @@ void BtPostDownloadHandlerTest::testGetNextRequestGroups()
   rg.initPieceStorage();
 
   BtPostDownloadHandler handler;
-  std::deque<SharedHandle<RequestGroup> > groups = handler.getNextRequestGroups(&rg);
+  std::deque<SharedHandle<RequestGroup> > groups;
+  handler.getNextRequestGroups(groups, &rg);
   CPPUNIT_ASSERT_EQUAL((size_t)1, groups.size());
   SharedHandle<BtContext> btctx
     (dynamic_pointer_cast<BtContext>(groups.front()->getDownloadContext()));

+ 2 - 2
test/Metalink2RequestGroupTest.cc

@@ -32,8 +32,8 @@ CPPUNIT_TEST_SUITE_REGISTRATION( Metalink2RequestGroupTest );
 
 void Metalink2RequestGroupTest::testGenerate()
 {
-  std::deque<SharedHandle<RequestGroup> > groups =
-    Metalink2RequestGroup(_option.get()).generate("test.xml");
+  std::deque<SharedHandle<RequestGroup> > groups;
+  Metalink2RequestGroup(_option.get()).generate(groups, "test.xml");
   // first file
   {
     SharedHandle<RequestGroup> rg = groups[0];

+ 2 - 1
test/MetalinkPostDownloadHandlerTest.cc

@@ -70,7 +70,8 @@ void MetalinkPostDownloadHandlerTest::testGetNextRequestGroups()
   rg.initPieceStorage();
 
   MetalinkPostDownloadHandler handler;
-  RequestGroups groups = handler.getNextRequestGroups(&rg);
+  RequestGroups groups;
+  handler.getNextRequestGroups(groups, &rg);
 #ifdef ENABLE_BITTORRENT
   CPPUNIT_ASSERT_EQUAL((size_t)6/* 5 + 1 torrent file download */, groups.size());
 #else