Jelajahi Sumber

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

	Added max-concurrent-downloads option to changeGlobalOption
	xml-rpc method.  Rewritten loop conditional in
	RequestGroupMan::fillRequestGroupFromReserver().
	* src/RequestGroupMan.cc
	* src/RequestGroupMan.h
	* src/XmlRpcMethod.cc
	* src/XmlRpcMethodImpl.cc
Tatsuhiro Tsujikawa 16 tahun lalu
induk
melakukan
a9189ee7d9
5 mengubah file dengan 26 tambahan dan 3 penghapusan
  1. 10 0
      ChangeLog
  2. 6 3
      src/RequestGroupMan.cc
  3. 5 0
      src/RequestGroupMan.h
  4. 1 0
      src/XmlRpcMethod.cc
  5. 4 0
      src/XmlRpcMethodImpl.cc

+ 10 - 0
ChangeLog

@@ -1,3 +1,13 @@
+2009-05-30  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Added max-concurrent-downloads option to changeGlobalOption
+	xml-rpc method.  Rewritten loop conditional in
+	RequestGroupMan::fillRequestGroupFromReserver().
+	* src/RequestGroupMan.cc
+	* src/RequestGroupMan.h
+	* src/XmlRpcMethod.cc
+	* src/XmlRpcMethodImpl.cc
+	
 2009-05-30  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Documented position parameter in man page.

+ 6 - 3
src/RequestGroupMan.cc

@@ -405,11 +405,14 @@ static void createInitialCommand(const SharedHandle<RequestGroup>& requestGroup,
 
 void RequestGroupMan::fillRequestGroupFromReserver(DownloadEngine* e)
 {
-  RequestGroups temp;
   removeStoppedGroup(e);
+  if(_maxSimultaneousDownloads <= _requestGroups.size()) {
+    return;
+  }
+  RequestGroups temp;
   unsigned int count = 0;
-  for(int num = _maxSimultaneousDownloads-_requestGroups.size();
-      num > 0 && !_reservedGroups.empty(); --num) {
+  size_t num = _maxSimultaneousDownloads-_requestGroups.size();
+  while(count < num && !_reservedGroups.empty()) {
     RequestGroupHandle groupToAdd = _reservedGroups.front();
     _reservedGroups.pop_front();
     try {

+ 5 - 0
src/RequestGroupMan.h

@@ -230,6 +230,11 @@ public:
   {
     return _maxOverallUploadSpeedLimit;
   }
+
+  void setMaxSimultaneousDownloads(unsigned int max)
+  {
+    _maxSimultaneousDownloads = max;
+  }
 };
 
 typedef SharedHandle<RequestGroupMan> RequestGroupManHandle;

+ 1 - 0
src/XmlRpcMethod.cc

@@ -134,6 +134,7 @@ const std::vector<std::string>& listChangeableGlobalOptions()
   static const std::string OPTIONS[] = {
     PREF_MAX_OVERALL_UPLOAD_LIMIT,
     PREF_MAX_OVERALL_DOWNLOAD_LIMIT,
+    PREF_MAX_CONCURRENT_DOWNLOADS,
   };
   static std::vector<std::string> options
     (&OPTIONS[0], &OPTIONS[arrayLength(OPTIONS)]);

+ 4 - 0
src/XmlRpcMethodImpl.cc

@@ -560,6 +560,10 @@ BDE ChangeGlobalOptionXmlRpcMethod::process
     e->_requestGroupMan->setMaxOverallUploadSpeedLimit
       (option->getAsInt(PREF_MAX_OVERALL_UPLOAD_LIMIT));
   }
+  if(option->defined(PREF_MAX_CONCURRENT_DOWNLOADS)) {
+    e->_requestGroupMan->setMaxSimultaneousDownloads
+      (option->getAsInt(PREF_MAX_CONCURRENT_DOWNLOADS));
+  }
   return BDE_OK;
 }