diff Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp @ 1702:bc40b6450261

"patient" GET argument
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 27 Nov 2020 13:57:28 +0100
parents b5a8bf32d969
children 76c590a62755
line wrap: on
line diff
--- a/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp	Fri Nov 27 12:21:26 2020 +0100
+++ b/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp	Fri Nov 27 13:57:28 2020 +0100
@@ -277,12 +277,22 @@
     }
   }
 
-  void FetchInternal(const std::string& studyInstanceUid,
+  void FetchInternal(const std::string& patientId,
+                     const std::string& studyInstanceUid,
                      const std::string& seriesInstanceUid)
   {
     // Firstly, load the study
     Orthanc::DicomMap filter;
-    filter.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, studyInstanceUid, false);
+
+    if (!patientId.empty())
+    {
+      filter.SetValue(Orthanc::DICOM_TAG_PATIENT_ID, patientId, false);
+    }
+
+    if (!studyInstanceUid.empty())
+    {
+      filter.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, studyInstanceUid, false);
+    }
 
     std::set<Orthanc::DicomTag> tags;
     tags.insert(Orthanc::DICOM_TAG_STUDY_DESCRIPTION);  // Necessary for Orthanc DICOMweb plugin
@@ -305,7 +315,7 @@
 
     pending_ += 2;
   }
-
+  
 
   class PdfInfo : public Orthanc::IDynamicObject
   {
@@ -378,18 +388,33 @@
   
   void FetchAllStudies()
   {
-    FetchInternal("", "");
+    FetchInternal("", "", "");
+  }
+  
+  void FetchPatient(const std::string& patientId)
+  {
+    if (!patientId.empty())
+    {
+      FetchInternal(patientId, "", "");
+    }
   }
   
   void FetchStudy(const std::string& studyInstanceUid)
   {
-    FetchInternal(studyInstanceUid, "");
+    if (!studyInstanceUid.empty())
+    {
+      FetchInternal("", studyInstanceUid, "");
+    }
   }
   
   void FetchSeries(const std::string& studyInstanceUid,
                    const std::string& seriesInstanceUid)
   {
-    FetchInternal(studyInstanceUid, seriesInstanceUid);
+    if (!studyInstanceUid.empty() &&
+        !seriesInstanceUid.empty())
+    {
+      FetchInternal("", studyInstanceUid, seriesInstanceUid);
+    }
   }
 
   size_t GetStudiesCount() const
@@ -2775,6 +2800,16 @@
   }
 
   EMSCRIPTEN_KEEPALIVE
+  void FetchPatient(const char* patientId)
+  {
+    try
+    {
+      GetResourcesLoader().FetchPatient(patientId);
+    }
+    EXTERN_CATCH_EXCEPTIONS;
+  }
+
+  EMSCRIPTEN_KEEPALIVE
   void FetchStudy(const char* studyInstanceUid)
   {
     try