diff OrthancServer/Sources/ServerContext.cpp @ 5427:111e21b4f8bc

fix transcoded instance caching
author Alain Mazy <am@osimis.io>
date Fri, 17 Nov 2023 08:22:17 +0100
parents c65e036d649b
children 4be5f117aa0d
line wrap: on
line diff
--- a/OrthancServer/Sources/ServerContext.cpp	Thu Nov 16 16:09:04 2023 +0100
+++ b/OrthancServer/Sources/ServerContext.cpp	Fri Nov 17 08:22:17 2023 +0100
@@ -1165,10 +1165,19 @@
 
 
   void ServerContext::ReadDicom(std::string& dicom,
+                                std::string& attachmentId,
                                 const std::string& instancePublicId)
   {
     int64_t revision;
-    ReadAttachment(dicom, revision, instancePublicId, FileContentType_Dicom, true /* uncompress */);
+    ReadAttachment(dicom, revision, attachmentId, instancePublicId, FileContentType_Dicom, true /* uncompress */);
+  }
+
+
+  void ServerContext::ReadDicom(std::string& dicom,
+                                const std::string& instancePublicId)
+  {
+    std::string attachmentId;
+    ReadDicom(dicom, attachmentId, instancePublicId);    
   }
 
   void ServerContext::ReadDicomForHeader(std::string& dicom,
@@ -1236,6 +1245,7 @@
 
   void ServerContext::ReadAttachment(std::string& result,
                                      int64_t& revision,
+                                     std::string& attachmentId,
                                      const std::string& instancePublicId,
                                      FileContentType content,
                                      bool uncompressIfNeeded,
@@ -1250,7 +1260,8 @@
     }
 
     assert(attachment.GetContentType() == content);
-
+    attachmentId = attachment.GetUuid();
+    
     {
       std::unique_ptr<StorageAccessor> accessor;
       
@@ -1951,11 +1962,12 @@
   bool ServerContext::TranscodeWithCache(std::string& target,
                                          const std::string& source,
                                          const std::string& sourceInstanceId,
+                                         const std::string& attachmentId,
                                          DicomTransferSyntax targetSyntax)
   {
     StorageCache::Accessor cacheAccessor(storageCache_);
 
-    if (!cacheAccessor.FetchTranscodedInstance(target, sourceInstanceId, targetSyntax))
+    if (!cacheAccessor.FetchTranscodedInstance(target, attachmentId, targetSyntax))
     {
       IDicomTranscoder::DicomImage sourceDicom;
       sourceDicom.SetExternalBuffer(source);
@@ -1966,7 +1978,7 @@
 
       if (Transcode(targetDicom, sourceDicom, syntaxes, true))
       {
-        cacheAccessor.AddTranscodedInstance(sourceInstanceId, targetSyntax, reinterpret_cast<const char*>(targetDicom.GetBufferData()), targetDicom.GetBufferSize());
+        cacheAccessor.AddTranscodedInstance(attachmentId, targetSyntax, reinterpret_cast<const char*>(targetDicom.GetBufferData()), targetDicom.GetBufferSize());
         target = std::string(reinterpret_cast<const char*>(targetDicom.GetBufferData()), targetDicom.GetBufferSize());
         return true;
       }