diff OrthancServer/OrthancMoveRequestHandler.cpp @ 3160:fc9a4a2dad63

merge
author Alain Mazy <alain@mazy.be>
date Thu, 24 Jan 2019 10:55:19 +0100
parents 8a9eb767280c
children 8ea7c4546c3a
line wrap: on
line diff
--- a/OrthancServer/OrthancMoveRequestHandler.cpp	Thu Jan 24 10:54:47 2019 +0100
+++ b/OrthancServer/OrthancMoveRequestHandler.cpp	Thu Jan 24 10:55:19 2019 +0100
@@ -34,12 +34,14 @@
 #include "PrecompiledHeadersServer.h"
 #include "OrthancMoveRequestHandler.h"
 
-#include "OrthancConfiguration.h"
 #include "../../Core/DicomParsing/FromDcmtkBridge.h"
 #include "../Core/DicomFormat/DicomArray.h"
 #include "../Core/Logging.h"
+#include "OrthancConfiguration.h"
+#include "ServerContext.h"
 #include "ServerJobs/DicomModalityStoreJob.h"
 
+
 namespace Orthanc
 {
   namespace
@@ -123,6 +125,7 @@
       ServerContext&                        context_;
       std::auto_ptr<DicomModalityStoreJob>  job_;
       size_t                                position_;
+      size_t                                countInstances_;
       
     public:
       AsynchronousMove(ServerContext& context,
@@ -154,6 +157,8 @@
         std::list<std::string> tmp;
         context_.GetIndex().GetChildInstances(tmp, publicId);
 
+        countInstances_ = tmp.size();
+
         job_->Reserve(tmp.size());
 
         for (std::list<std::string>::iterator it = tmp.begin(); it != tmp.end(); ++it)
@@ -164,20 +169,23 @@
 
       virtual unsigned int GetSubOperationCount() const
       {
-        return 1;
+        return countInstances_;
       }
 
       virtual Status DoNext()
       {
+        if (position_ >= countInstances_)
+        {
+          return Status_Failure;
+        }
+        
         if (position_ == 0)
         {
           context_.GetJobsEngine().GetRegistry().Submit(job_.release(), 0 /* priority */);
-          return Status_Success;
         }
-        else
-        {
-          return Status_Failure;
-        }
+        
+        position_ ++;
+        return Status_Success;
       }
     };
   }
@@ -226,7 +234,7 @@
 
     const std::string& content = value.GetContent();
 
-    std::list<std::string> ids;
+    std::vector<std::string> ids;
     context_.GetIndex().LookupIdentifierExact(ids, level, tag, content);
 
     if (ids.size() != 1)
@@ -235,7 +243,7 @@
     }
     else
     {
-      publicId = ids.front();
+      publicId = ids[0];
       return true;
     }
   }