Mercurial > hg > orthanc-stone
diff Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp @ 1665:f62f685e0eb2
avoid loading instance metadata on RTSTRUCT to avoid JSON parsing that freezes the browser
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 19 Nov 2020 15:39:30 +0100 |
parents | fc883105ee11 |
children | 1e6d3289b1ad |
line wrap: on
line diff
--- a/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Thu Nov 19 12:15:21 2020 +0100 +++ b/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Thu Nov 19 15:39:30 2020 +0100 @@ -1857,16 +1857,28 @@ observer_->SignalFrameUpdated(*this, cursor_->GetCurrentIndex(), frames_->GetFramesCount(), DisplayedFrameQuality_None); } - + if (frames_->GetFramesCount() != 0) { - const std::string& sopInstanceUid = frames_->GetInstanceOfFrame(cursor_->GetCurrentIndex()).GetSopInstanceUid(); - + const OrthancStone::DicomInstanceParameters& centralInstance = frames_->GetInstanceOfFrame(cursor_->GetCurrentIndex()); + + /** + * Avoid loading metadata if we know that this cannot be a + * "true" image with pixel data. Retrieving instance metadata on + * RTSTRUCT can lead to very large JSON whose parsing will + * freeze the browser for several seconds. + **/ + const OrthancStone::SopClassUid uid = centralInstance.GetSopClassUid(); + if (uid != OrthancStone::SopClassUid_EncapsulatedPdf && + uid != OrthancStone::SopClassUid_RTDose && + uid != OrthancStone::SopClassUid_RTPlan && + uid != OrthancStone::SopClassUid_RTStruct && + GetSeriesThumbnailType(uid) != OrthancStone::SeriesThumbnailType_Video) { // Fetch the default windowing for the central instance const std::string uri = ("studies/" + frames_->GetStudyInstanceUid() + "/series/" + frames_->GetSeriesInstanceUid() + - "/instances/" + sopInstanceUid + "/metadata"); + "/instances/" + centralInstance.GetSopInstanceUid() + "/metadata"); loader_->ScheduleGetDicomWeb( boost::make_shared<OrthancStone::LoadedDicomResources>(Orthanc::DICOM_TAG_SOP_INSTANCE_UID), @@ -2423,7 +2435,7 @@ { int main(int argc, char const *argv[]) { - printf("OK\n"); + printf("Initializing Stone\n"); Orthanc::InitializeFramework("", true); Orthanc::Logging::EnableInfoLevel(true); //Orthanc::Logging::EnableTraceLevel(true);