diff Sources/Plugin.cpp @ 6:e8e7ba4371e3

fix access to OHIF study list
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sat, 17 Jun 2023 17:45:05 +0200
parents 8c1fe0ca24f5
children eab054ee7537
line wrap: on
line diff
--- a/Sources/Plugin.cpp	Fri Jun 16 15:51:40 2023 +0200
+++ b/Sources/Plugin.cpp	Sat Jun 17 17:45:05 2023 +0200
@@ -345,7 +345,11 @@
   OrthancPluginSetHttpHeader(context, output, "Cross-Origin-Opener-Policy", "same-origin");
   OrthancPluginSetHttpHeader(context, output, "Cross-Origin-Resource-Policy", "same-origin");
 
-  const std::string uri = request->groups[0];
+  std::string uri;
+  if (request->groupsCount > 0)
+  {
+    uri = request->groups[0];
+  }
 
   if (uri == "app-config.js")
   {
@@ -362,8 +366,12 @@
     std::string s = (user + "\n" + system);
     OrthancPluginAnswerBuffer(context, output, s.c_str(), s.size(), "application/json");
   }
-  else if (uri == "viewer")
-  {  
+  else if (uri == "" ||      // Study list
+           uri == "tmtv" ||  // Total metabolic tumor volume
+           uri == "viewer")  // Default viewer (including MPR)
+  {
+    // Those correspond to the different modes of the OHIF platform:
+    // https://v3-docs.ohif.org/platform/modes/
     cache_.Answer(context, output, "index.html");
   }
   else 
@@ -545,27 +553,6 @@
 }
 
 
-static OrthancPluginErrorCode RedirectRoot(OrthancPluginRestOutput* output,
-                                           const char* url,
-                                           const OrthancPluginHttpRequest* request)
-{
-  OrthancPluginContext* context = OrthancPlugins::GetGlobalContext();
-
-  if (request->method != OrthancPluginHttpMethod_Get)
-  {
-    OrthancPluginSendMethodNotAllowed(context, output, "GET");
-  }
-  else
-  {
-    // TODO - Is there a better way to go to the list of studies in DICOMweb?
-    // TODO - What if not using DICOMweb?
-    OrthancPluginRedirect(context, output, "ohif/viewer?StudyInstanceUIDs=");
-  }
-
-  return OrthancPluginErrorCode_Success;
-}
-
-
 OrthancPluginErrorCode OnChangeCallback(OrthancPluginChangeType changeType,
                                         OrthancPluginResourceType resourceType,
                                         const char* resourceId)
@@ -644,9 +631,16 @@
     routerBasename_ = configuration.GetStringValue("RouterBasename", "/ohif");
     useDicomWeb_ = configuration.GetBooleanValue("DicomWeb", false);
 
+    // Make sure that the router basename ends with a trailing slash
+    if (routerBasename_.empty() ||
+        routerBasename_[routerBasename_.size() - 1] != '/')
+    {
+      routerBasename_ += "/";
+    }
+
     OrthancPluginSetDescription(context, "OHIF plugin for Orthanc.");
 
-    OrthancPluginRegisterRestCallback(context, "/ohif", RedirectRoot);
+    OrthancPlugins::RegisterRestCallback<ServeFile>("/ohif", true);
     OrthancPlugins::RegisterRestCallback<ServeFile>("/ohif/(.*)", true);
     OrthancPlugins::RegisterRestCallback<GetOhifStudy>("/ohif-source/(.*)", true);