Hello community, here is the log from the commit of package orthanc-webviewer for openSUSE:Leap:15.2 checked in at 2020-06-02 22:26:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Leap:15.2/orthanc-webviewer (Old) and /work/SRC/openSUSE:Leap:15.2/.orthanc-webviewer.new.3606 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "orthanc-webviewer" Tue Jun 2 22:26:14 2020 rev:3 rq:810647 version:2.6 Changes: -------- --- /work/SRC/openSUSE:Leap:15.2/orthanc-webviewer/orthanc-webviewer.changes 2020-04-23 18:16:58.706541636 +0200 +++ /work/SRC/openSUSE:Leap:15.2/.orthanc-webviewer.new.3606/orthanc-webviewer.changes 2020-06-02 22:26:16.743026885 +0200 @@ -1,0 +2,16 @@ +Wed May 27 15:10:14 UTC 2020 - Axel Braun <[email protected]> + +- version 2.6 +* cachemngr.diff removed +* DecodedImageAdapter.cpp removed +* Move the GDCM decoder out of the Orthanc Web viewer plugin as a + separate plugin: https://book.orthanc-server.com/plugins/gdcm.html +* Performance: Replaced "OrthancPluginRegisterRestCallback" by + "OrthancPluginRegisterRestCallbackNoLock" +* Authorization tokens passed as url search params in Orthanc Explorer + are now transmitted to the viewer and included as headers in every + HTTP request to the Rest API easing the usage of the Authorization + plugin +* Upgrade to Orthanc framework to 1.7.0 + +------------------------------------------------------------------- Old: ---- DecodedImageAdapter.cpp OrthancWebViewer-2.5.tar.gz cachemngr.diff New: ---- OrthancWebViewer-2.6.tar.gz _service ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ orthanc-webviewer.spec ++++++ --- /var/tmp/diff_new_pack.8Xrrs7/_old 2020-06-02 22:26:17.171028224 +0200 +++ /var/tmp/diff_new_pack.8Xrrs7/_new 2020-06-02 22:26:17.175028237 +0200 @@ -2,7 +2,7 @@ # spec file for package orthanc-webviewer # # Copyright (c) 2020 SUSE LLC -# Copyright (c) 2019 Dr. Axel Braun +# Copyright (c) 2019-2020 Dr. Axel Braun # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -21,7 +21,7 @@ Summary: Web Viewer plugin for Orthanc License: AGPL-3.0-or-later Group: Productivity/Graphics/Viewers -Version: 2.5 +Version: 2.6 Release: 0 URL: https://orthanc-server.com Source0: https://www.orthanc-server.com/downloads/get.php?path=/plugin-webviewer/OrthancWebViewer-%{version}.tar.gz @@ -30,14 +30,10 @@ Source3: jsPanel-2.3.3-fixed.zip Source4: pako-0.2.5.zip Source5: js-url-1.8.6.zip -Source6: DecodedImageAdapter.cpp Source11: orthanc-webviewer-readme.SUSE Source12: webviewer.json -Patch0: cachemngr.diff BuildRequires: cmake BuildRequires: gcc-c++ -BuildRequires: gdcm-devel -BuildRequires: gdcm-libgdcm3_0 BuildRequires: googletest-devel BuildRequires: jsoncpp-devel BuildRequires: libboost_date_time-devel >= 1.66 @@ -48,6 +44,7 @@ BuildRequires: libboost_thread-devel >= 1.66 BuildRequires: libuuid-devel BuildRequires: orthanc-devel +BuildRequires: orthanc-gdcm BuildRequires: orthanc-source BuildRequires: sqlite3-devel BuildRequires: unzip @@ -62,10 +59,6 @@ %prep %setup -q -n OrthancWebViewer-%{version} -cp %{S:6} Plugin/. - -%patch0 -p1 - #OrthanPlugin may ask for additional files to be loaded #Putting them into this folder prevents download of sources from the web mkdir ThirdPartyDownloads ++++++ OrthancWebViewer-2.5.tar.gz -> OrthancWebViewer-2.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/.hg_archival.txt new/OrthancWebViewer-2.6/.hg_archival.txt --- old/OrthancWebViewer-2.5/.hg_archival.txt 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/.hg_archival.txt 2020-05-26 09:12:07.000000000 +0200 @@ -1,6 +1,6 @@ repo: 02f7a0400a911dee22d2e761b21b6cab67ede076 -node: 0a8ed9da08696903df46390e537ffb8e017a1531 -branch: OrthancWebViewer-2.5 +node: 8b01b05e2feec9fc26cec50466c357dfe3b3c428 +branch: OrthancWebViewer-2.6 latesttag: null -latesttagdistance: 211 -changessincelatesttag: 215 +latesttagdistance: 238 +changessincelatesttag: 246 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/CMakeLists.txt new/OrthancWebViewer-2.6/CMakeLists.txt --- old/OrthancWebViewer-2.5/CMakeLists.txt 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/CMakeLists.txt 2020-05-26 09:12:07.000000000 +0200 @@ -1,7 +1,7 @@ # Orthanc - A Lightweight, RESTful DICOM Store # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium -# Copyright (C) 2017-2019 Osimis S.A., Belgium +# Copyright (C) 2017-2020 Osimis S.A., Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License @@ -21,13 +21,13 @@ project(OrthancWebViewer) -set(ORTHANC_PLUGIN_VERSION "2.5") +set(ORTHANC_PLUGIN_VERSION "2.6") if (ORTHANC_PLUGIN_VERSION STREQUAL "mainline") - set(ORTHANC_FRAMEWORK_VERSION "mainline") + set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "mainline") set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "hg") else() - set(ORTHANC_FRAMEWORK_VERSION "1.5.5") + set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "1.7.0") set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "web") endif() @@ -36,12 +36,12 @@ set(STATIC_BUILD OFF CACHE BOOL "Static build of the third-party libraries (necessary for Windows)") set(STANDALONE_BUILD ON CACHE BOOL "Standalone build (all the resources are embedded, necessary for releases)") set(ALLOW_DOWNLOADS OFF CACHE BOOL "Allow CMake to download packages") -set(ORTHANC_FRAMEWORK_SOURCE "${ORTHANC_FRAMEWORK_DEFAULT_SOURCE}" CACHE STRING "Source of the Orthanc source code (can be \"hg\", \"archive\", \"web\" or \"path\")") +set(ORTHANC_FRAMEWORK_SOURCE "${ORTHANC_FRAMEWORK_DEFAULT_SOURCE}" CACHE STRING "Source of the Orthanc framework (can be \"hg\", \"archive\", \"web\" or \"path\")") +set(ORTHANC_FRAMEWORK_VERSION "${ORTHANC_FRAMEWORK_DEFAULT_VERSION}" CACHE STRING "Version of the Orthanc framework") set(ORTHANC_FRAMEWORK_ARCHIVE "" CACHE STRING "Path to the Orthanc archive, if ORTHANC_FRAMEWORK_SOURCE is \"archive\"") set(ORTHANC_FRAMEWORK_ROOT "" CACHE STRING "Path to the Orthanc source directory, if ORTHANC_FRAMEWORK_SOURCE is \"path\"") # Advanced parameters to fine-tune linking against system libraries -set(USE_SYSTEM_GDCM ON CACHE BOOL "Use the system version of Grassroot DICOM (GDCM)") set(USE_SYSTEM_ORTHANC_SDK ON CACHE BOOL "Use the system version of the Orthanc plugin SDK") @@ -54,12 +54,13 @@ set(ENABLE_LOCALE OFF) # Disable support for locales (notably in Boost) set(ENABLE_GOOGLE_TEST ON) set(ENABLE_SQLITE ON) +set(ENABLE_MODULE_JOBS OFF CACHE INTERNAL "") +set(ENABLE_MODULE_DICOM OFF CACHE INTERNAL "") include(${ORTHANC_ROOT}/Resources/CMake/OrthancFrameworkConfiguration.cmake) include_directories(${ORTHANC_ROOT}) -include(${CMAKE_SOURCE_DIR}/Resources/CMake/GdcmConfiguration.cmake) include(${CMAKE_SOURCE_DIR}/Resources/CMake/JavaScriptLibraries.cmake) @@ -90,6 +91,7 @@ add_definitions( -DORTHANC_ENABLE_LOGGING_PLUGIN=1 + -DHAS_ORTHANC_EXCEPTION=1 ) EmbedResources( @@ -120,11 +122,6 @@ list(APPEND AUTOGENERATED_SOURCES ${AUTOGENERATED_DIR}/Version.rc) endif() -if (APPLE) - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework CoreFoundation") - SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework CoreFoundation") -endif() - set(CORE_SOURCES ${CMAKE_SOURCE_DIR}/Plugin/Cache/CacheManager.cpp @@ -138,24 +135,14 @@ add_library(OrthancWebViewer SHARED - ${CORE_SOURCES} ${AUTOGENERATED_SOURCES} - ${CMAKE_SOURCE_DIR}/Plugin/Plugin.cpp - - # The following files depend on GDCM ${CMAKE_SOURCE_DIR}/Plugin/DecodedImageAdapter.cpp - ${ORTHANC_ROOT}/Plugins/Samples/GdcmDecoder/GdcmImageDecoder.cpp - ${ORTHANC_ROOT}/Plugins/Samples/GdcmDecoder/GdcmDecoderCache.cpp - ${ORTHANC_ROOT}/Plugins/Samples/GdcmDecoder/OrthancImageWrapper.cpp + ${CMAKE_SOURCE_DIR}/Plugin/Plugin.cpp + ${CORE_SOURCES} + ${ORTHANC_ROOT}/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp ) -if (STATIC_BUILD OR NOT USE_SYSTEM_GDCM) - add_dependencies(OrthancWebViewer GDCM) -endif() - -target_link_libraries(OrthancWebViewer ${GDCM_LIBRARIES}) - message("Setting the version of the library to ${ORTHANC_PLUGIN_VERSION}") add_definitions(-DORTHANC_PLUGIN_VERSION="${ORTHANC_PLUGIN_VERSION}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/NEWS new/OrthancWebViewer-2.6/NEWS --- old/OrthancWebViewer-2.5/NEWS 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/NEWS 2020-05-26 09:12:07.000000000 +0200 @@ -2,11 +2,25 @@ =============================== +Version 2.6 (2020-05-26) +======================== + +* Move the GDCM decoder out of the Orthanc Web viewer plugin as a + separate plugin: https://book.orthanc-server.com/plugins/gdcm.html +* Performance: Replaced "OrthancPluginRegisterRestCallback" by + "OrthancPluginRegisterRestCallbackNoLock" +* Authorization tokens passed as url search params in Orthanc Explorer + are now transmitted to the viewer and included as headers in every + HTTP request to the Rest API easing the usage of the Authorization + plugin +* Upgrade to Orthanc framework to 1.7.0 + + Version 2.5 (2019-02-27) ======================== * Upgrade to GDCM 2.8.8 for static builds -* Upgraded Orthanc framework +* Upgrade to Orthanc framework to 1.5.5 Version 2.4 (2018-04-23) @@ -18,7 +32,7 @@ * Support of rendering RGB48 lookup tables (palette), if Orthanc SDK >= 1.3.1 * Support of OpenBSD * Support of Linux Standard Base -* Resort to Orthanc framework +* Resort to Orthanc framework 1.3.2 * Upgrade to GDCM 2.8.4 for static builds diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/Cache/CacheIndex.h new/OrthancWebViewer-2.6/Plugin/Cache/CacheIndex.h --- old/OrthancWebViewer-2.5/Plugin/Cache/CacheIndex.h 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/Cache/CacheIndex.h 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/Cache/CacheManager.cpp new/OrthancWebViewer-2.6/Plugin/Cache/CacheManager.cpp --- old/OrthancWebViewer-2.5/Plugin/Cache/CacheManager.cpp 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/Cache/CacheManager.cpp 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/Cache/CacheManager.h new/OrthancWebViewer-2.6/Plugin/Cache/CacheManager.h --- old/OrthancWebViewer-2.5/Plugin/Cache/CacheManager.h 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/Cache/CacheManager.h 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License @@ -26,6 +26,8 @@ #include <orthanc/OrthancCPlugin.h> +#include <boost/shared_ptr.hpp> + namespace OrthancPlugins { enum CacheProperty diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/Cache/CacheScheduler.cpp new/OrthancWebViewer-2.6/Plugin/Cache/CacheScheduler.cpp --- old/OrthancWebViewer-2.5/Plugin/Cache/CacheScheduler.cpp 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/Cache/CacheScheduler.cpp 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/Cache/CacheScheduler.h new/OrthancWebViewer-2.6/Plugin/Cache/CacheScheduler.h --- old/OrthancWebViewer-2.5/Plugin/Cache/CacheScheduler.h 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/Cache/CacheScheduler.h 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/Cache/ICacheFactory.h new/OrthancWebViewer-2.6/Plugin/Cache/ICacheFactory.h --- old/OrthancWebViewer-2.5/Plugin/Cache/ICacheFactory.h 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/Cache/ICacheFactory.h 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/Cache/IPrefetchPolicy.h new/OrthancWebViewer-2.6/Plugin/Cache/IPrefetchPolicy.h --- old/OrthancWebViewer-2.5/Plugin/Cache/IPrefetchPolicy.h 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/Cache/IPrefetchPolicy.h 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/DecodedImageAdapter.cpp new/OrthancWebViewer-2.6/Plugin/DecodedImageAdapter.cpp --- old/OrthancWebViewer-2.5/Plugin/DecodedImageAdapter.cpp 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/DecodedImageAdapter.cpp 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License @@ -27,8 +27,6 @@ #include <Core/Images/ImageProcessing.h> #include <Core/OrthancException.h> #include <Core/Toolbox.h> -#include <Plugins/Samples/GdcmDecoder/OrthancImageWrapper.h> -#include <Resources/ThirdParty/base64/base64.h> #include <boost/lexical_cast.hpp> #include <boost/algorithm/string/predicate.hpp> @@ -127,8 +125,7 @@ bool DecodedImageAdapter::Create(std::string& content, const std::string& uri) { - std::string message = "Decoding DICOM instance: " + uri; - OrthancPluginLogInfo(context_, message.c_str()); + LOG(INFO) << "Decoding DICOM instance: " << uri; CompressionType type; uint8_t level; @@ -140,7 +137,6 @@ return false; } - bool ok = false; Json::Value tags; @@ -151,7 +147,9 @@ throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); } - std::auto_ptr<OrthancImageWrapper> image(new OrthancImageWrapper(context_, OrthancPluginDecodeDicomImage(context_, dicom.c_str(), dicom.size(), frameIndex))); + std::unique_ptr<OrthancImage> image( + new OrthancImage(OrthancPluginDecodeDicomImage( + context_, dicom.c_str(), dicom.size(), frameIndex))); Json::Value json; if (GetCornerstoneMetadata(json, tags, *image)) @@ -180,9 +178,7 @@ } else { - char msg[1024]; - sprintf(msg, "Unable to decode the following instance: %s", uri.c_str()); - OrthancPluginLogWarning(context_, msg); + LOG(WARNING) << "Unable to decode the following instance: " << uri; return false; } } @@ -190,14 +186,14 @@ bool DecodedImageAdapter::GetCornerstoneMetadata(Json::Value& result, const Json::Value& tags, - OrthancImageWrapper& image) + OrthancImage& image) { using namespace Orthanc; float windowCenter, windowWidth; Orthanc::ImageAccessor accessor; - accessor.AssignReadOnly(OrthancPlugins::Convert(image.GetFormat()), image.GetWidth(), + accessor.AssignReadOnly(OrthancPlugins::Convert(image.GetPixelFormat()), image.GetWidth(), image.GetHeight(), image.GetPitch(), image.GetBuffer()); switch (accessor.GetFormat()) @@ -310,13 +306,13 @@ bool DecodedImageAdapter::EncodeUsingDeflate(Json::Value& result, - OrthancImageWrapper& image) + OrthancImage& image) { Orthanc::ImageAccessor accessor; - accessor.AssignReadOnly(OrthancPlugins::Convert(image.GetFormat()), image.GetWidth(), + accessor.AssignReadOnly(OrthancPlugins::Convert(image.GetPixelFormat()), image.GetWidth(), image.GetHeight(), image.GetPitch(), image.GetBuffer()); - std::auto_ptr<Orthanc::ImageBuffer> buffer; + std::unique_ptr<Orthanc::ImageBuffer> buffer; Orthanc::ImageAccessor converted; @@ -362,9 +358,11 @@ result["sizeInBytes"] = converted.GetSize(); std::string z; - CompressUsingDeflate(z, image.GetContext(), converted.GetConstBuffer(), converted.GetSize()); - - result["Orthanc"]["PixelData"] = base64_encode(z); + CompressUsingDeflate(z, GetGlobalContext(), converted.GetConstBuffer(), converted.GetSize()); + + std::string s; + Orthanc::Toolbox::EncodeBase64(s, z); + result["Orthanc"]["PixelData"] = s; return true; } @@ -419,14 +417,14 @@ bool DecodedImageAdapter::EncodeUsingJpeg(Json::Value& result, - OrthancImageWrapper& image, + OrthancImage& image, uint8_t quality /* between 0 and 100 */) { Orthanc::ImageAccessor accessor; - accessor.AssignReadOnly(OrthancPlugins::Convert(image.GetFormat()), image.GetWidth(), + accessor.AssignReadOnly(OrthancPlugins::Convert(image.GetPixelFormat()), image.GetWidth(), image.GetHeight(), image.GetPitch(), image.GetBuffer()); - std::auto_ptr<Orthanc::ImageBuffer> buffer; + std::unique_ptr<Orthanc::ImageBuffer> buffer; Orthanc::ImageAccessor converted; @@ -482,9 +480,12 @@ result["sizeInBytes"] = converted.GetSize(); std::string jpeg; - WriteJpegToMemory(jpeg, image.GetContext(), converted, quality); + WriteJpegToMemory(jpeg, GetGlobalContext(), converted, quality); - result["Orthanc"]["PixelData"] = base64_encode(jpeg); + std::string s; + Orthanc::Toolbox::EncodeBase64(s, jpeg); + result["Orthanc"]["PixelData"] = s; + return true; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/DecodedImageAdapter.h new/OrthancWebViewer-2.6/Plugin/DecodedImageAdapter.h --- old/OrthancWebViewer-2.5/Plugin/DecodedImageAdapter.h 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/DecodedImageAdapter.h 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License @@ -27,7 +27,7 @@ #include <stdint.h> #include <json/value.h> -#include <Plugins/Samples/GdcmDecoder/OrthancImageWrapper.h> +#include <Plugins/Samples/Common/OrthancPluginCppWrapper.h> namespace OrthancPlugins @@ -49,13 +49,13 @@ static bool GetCornerstoneMetadata(Json::Value& result, const Json::Value& tags, - OrthancImageWrapper& image); + OrthancImage& image); static bool EncodeUsingDeflate(Json::Value& result, - OrthancImageWrapper& image); + OrthancImage& image); static bool EncodeUsingJpeg(Json::Value& result, - OrthancImageWrapper& image, + OrthancImage& image, uint8_t quality /* between 0 and 100 */); OrthancPluginContext* context_; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/Plugin.cpp new/OrthancWebViewer-2.6/Plugin/Plugin.cpp --- old/OrthancWebViewer-2.5/Plugin/Plugin.cpp 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/Plugin.cpp 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License @@ -28,7 +28,7 @@ #include <Core/OrthancException.h> #include <Core/SystemToolbox.h> #include <Core/Toolbox.h> -#include <Plugins/Samples/GdcmDecoder/GdcmDecoderCache.h> +#include <Plugins/Samples/Common/OrthancPluginCppWrapper.h> #include <boost/thread.hpp> #include <boost/lexical_cast.hpp> @@ -36,9 +36,26 @@ #include <boost/filesystem.hpp> +/** + * We force the redefinition of the "ORTHANC_PLUGINS_API" macro, that + * was left empty with gcc until Orthanc SDK 1.5.7 (no "default" + * visibility). This causes the version script, if run from "Holy + * Build Box", to make private the 4 global functions of the plugin. + **/ + +#undef ORTHANC_PLUGINS_API + +#ifdef WIN32 +# define ORTHANC_PLUGINS_API __declspec(dllexport) +#elif __GNUC__ >= 4 +# define ORTHANC_PLUGINS_API __attribute__ ((visibility ("default"))) +#else +# define ORTHANC_PLUGINS_API +#endif + + + static OrthancPluginContext* context_ = NULL; -static bool restrictTransferSyntaxes_ = false; -static std::set<std::string> enabledTransferSyntaxes_; class CacheContext @@ -63,19 +80,18 @@ Orthanc::FilesystemStorage storage_; Orthanc::SQLite::Connection db_; - std::auto_ptr<OrthancPlugins::CacheManager> cache_; - std::auto_ptr<OrthancPlugins::CacheScheduler> scheduler_; + std::unique_ptr<OrthancPlugins::CacheManager> cache_; + std::unique_ptr<OrthancPlugins::CacheScheduler> scheduler_; Orthanc::SharedMessageQueue newInstances_; bool stop_; boost::thread newInstancesThread_; - OrthancPlugins::GdcmDecoderCache decoder_; static void NewInstancesThread(CacheContext* cache) { while (!cache->stop_) { - std::auto_ptr<Orthanc::IDynamicObject> obj(cache->newInstances_.Dequeue(100)); + std::unique_ptr<Orthanc::IDynamicObject> obj(cache->newInstances_.Dequeue(100)); if (obj.get() != NULL) { const std::string& instanceId = dynamic_cast<DynamicString&>(*obj).GetValue(); @@ -128,11 +144,6 @@ { newInstances_.Enqueue(new DynamicString(instanceId)); } - - OrthancPlugins::GdcmDecoderCache& GetDecoder() - { - return decoder_; - } }; @@ -329,128 +340,7 @@ -static bool ExtractTransferSyntax(std::string& transferSyntax, - const void* dicom, - const uint32_t size) -{ - Orthanc::DicomMap header; - if (!Orthanc::DicomMap::ParseDicomMetaInformation(header, reinterpret_cast<const char*>(dicom), size)) - { - return false; - } - - const Orthanc::DicomValue* tag = header.TestAndGetValue(0x0002, 0x0010); - if (tag == NULL || - tag->IsNull() || - tag->IsBinary()) - { - return false; - } - else - { - // Stripping spaces should not be required, as this is a UI value - // representation whose stripping is supported by the Orthanc - // core, but let's be careful... - transferSyntax = Orthanc::Toolbox::StripSpaces(tag->GetContent()); - return true; - } -} - - -static bool IsTransferSyntaxEnabled(const void* dicom, - const uint32_t size) -{ - std::string formattedSize; - - { - char tmp[16]; - sprintf(tmp, "%0.1fMB", static_cast<float>(size) / (1024.0f * 1024.0f)); - formattedSize.assign(tmp); - } - - if (!restrictTransferSyntaxes_) - { - std::string s = "Decoding one DICOM instance of " + formattedSize + " using GDCM"; - OrthancPluginLogInfo(context_, s.c_str()); - return true; - } - - std::string transferSyntax; - if (!ExtractTransferSyntax(transferSyntax, dicom, size)) - { - std::string s = ("Cannot extract the transfer syntax of this instance of " + - formattedSize + ", will use GDCM to decode it"); - OrthancPluginLogInfo(context_, s.c_str()); - return true; - } - - if (enabledTransferSyntaxes_.find(transferSyntax) != enabledTransferSyntaxes_.end()) - { - // Decoding for this transfer syntax is enabled - std::string s = ("Using GDCM to decode this instance of " + - formattedSize + " with transfer syntax " + transferSyntax); - OrthancPluginLogInfo(context_, s.c_str()); - return true; - } - else - { - std::string s = ("Won't use GDCM to decode this instance of " + - formattedSize + ", as its transfer syntax " + transferSyntax + " is disabled"); - OrthancPluginLogInfo(context_, s.c_str()); - return false; - } -} - - -static OrthancPluginErrorCode DecodeImageCallback(OrthancPluginImage** target, - const void* dicom, - const uint32_t size, - uint32_t frameIndex) -{ - try - { - if (!IsTransferSyntaxEnabled(dicom, size)) - { - *target = NULL; - return OrthancPluginErrorCode_Success; - } - - std::auto_ptr<OrthancPlugins::OrthancImageWrapper> image; - -#if 0 - // Do not use the cache - OrthancPlugins::GdcmImageDecoder decoder(dicom, size); - image.reset(new OrthancPlugins::OrthancImageWrapper(context_, decoder, frameIndex)); -#else - using namespace OrthancPlugins; - image.reset(cache_->GetDecoder().Decode(context_, dicom, size, frameIndex)); -#endif - - *target = image->Release(); - - return OrthancPluginErrorCode_Success; - } - catch (Orthanc::OrthancException& e) - { - *target = NULL; - - std::string s = "Cannot decode image using GDCM: " + std::string(e.What()); - OrthancPluginLogWarning(context_, s.c_str()); - return OrthancPluginErrorCode_Plugin; - } - catch (std::runtime_error& e) - { - *target = NULL; - - std::string s = "Cannot decode image using GDCM: " + std::string(e.what()); - OrthancPluginLogWarning(context_, s.c_str()); - return OrthancPluginErrorCode_Plugin; - } -} - - -void ParseConfiguration(bool& enableGdcm, - int& decodingThreads, +void ParseConfiguration(int& decodingThreads, boost::filesystem::path& cachePath, int& cacheSize) { @@ -480,49 +370,6 @@ cachePath = OrthancPlugins::GetStringValue(configuration[CONFIG_WEB_VIEWER], key, cachePath.string()); cacheSize = OrthancPlugins::GetIntegerValue(configuration[CONFIG_WEB_VIEWER], "CacheSize", cacheSize); decodingThreads = OrthancPlugins::GetIntegerValue(configuration[CONFIG_WEB_VIEWER], "Threads", decodingThreads); - - static const char* CONFIG_ENABLE_GDCM = "EnableGdcm"; - if (configuration[CONFIG_WEB_VIEWER].isMember(CONFIG_ENABLE_GDCM)) - { - if (configuration[CONFIG_WEB_VIEWER][CONFIG_ENABLE_GDCM].type() != Json::booleanValue) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); - } - else - { - enableGdcm = configuration[CONFIG_WEB_VIEWER][CONFIG_ENABLE_GDCM].asBool(); - } - } - - if (enableGdcm) - { - static const char* CONFIG_RESTRICT_TRANSFER_SYNTAXES = "RestrictTransferSyntaxes"; - - if (configuration[CONFIG_WEB_VIEWER].isMember(CONFIG_RESTRICT_TRANSFER_SYNTAXES)) - { - const Json::Value& config = configuration[CONFIG_WEB_VIEWER][CONFIG_RESTRICT_TRANSFER_SYNTAXES]; - - if (config.type() != Json::arrayValue) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); - } - - restrictTransferSyntaxes_ = true; - for (Json::Value::ArrayIndex i = 0; i < config.size(); i++) - { - if (config[i].type() != Json::stringValue) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); - } - else - { - std::string s = "Web viewer will use GDCM to decode transfer syntax " + config[i].asString(); - enabledTransferSyntaxes_.insert(config[i].asString()); - OrthancPluginLogWarning(context_, s.c_str()); - } - } - } - } } if (decodingThreads <= 0 || @@ -549,6 +396,8 @@ { using namespace OrthancPlugins; + OrthancPlugins::SetGlobalContext(context); + Orthanc::Logging::Initialize(context); context_ = context; assert(DisplayPerformanceWarning()); OrthancPluginLogWarning(context_, "Initializing the Web viewer"); @@ -577,16 +426,13 @@ decodingThreads = 1; } - /* By default, use GDCM */ - bool enableGdcm = true; - try { /* By default, a cache of 100 MB is used */ int cacheSize = 100; boost::filesystem::path cachePath; - ParseConfiguration(enableGdcm, decodingThreads, cachePath, cacheSize); + ParseConfiguration(decodingThreads, cachePath, cacheSize); std::string message = ("Web viewer using " + boost::lexical_cast<std::string>(decodingThreads) + " threads for the decoding of the DICOM images"); @@ -672,29 +518,16 @@ } - /* Configure the DICOM decoder */ - if (enableGdcm) - { - // Replace the default decoder of DICOM images that is built in Orthanc - OrthancPluginLogWarning(context_, "Using GDCM instead of the DICOM decoder that is built in Orthanc"); - OrthancPluginRegisterDecodeImageCallback(context_, DecodeImageCallback); - } - else - { - OrthancPluginLogWarning(context_, "Using the DICOM decoder that is built in Orthanc (not using GDCM)"); - } - - /* Install the callbacks */ - OrthancPluginRegisterRestCallback(context_, "/web-viewer/series/(.*)", ServeCache<CacheBundle_SeriesInformation>); - OrthancPluginRegisterRestCallback(context_, "/web-viewer/is-stable-series/(.*)", IsStableSeries); - OrthancPluginRegisterRestCallback(context_, "/web-viewer/instances/(.*)", ServeCache<CacheBundle_DecodedImage>); - OrthancPluginRegisterRestCallback(context, "/web-viewer/libs/(.*)", ServeEmbeddedFolder<Orthanc::EmbeddedResources::JAVASCRIPT_LIBS>); + OrthancPluginRegisterRestCallbackNoLock(context_, "/web-viewer/series/(.*)", ServeCache<CacheBundle_SeriesInformation>); + OrthancPluginRegisterRestCallbackNoLock(context_, "/web-viewer/is-stable-series/(.*)", IsStableSeries); + OrthancPluginRegisterRestCallbackNoLock(context_, "/web-viewer/instances/(.*)", ServeCache<CacheBundle_DecodedImage>); + OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/libs/(.*)", ServeEmbeddedFolder<Orthanc::EmbeddedResources::JAVASCRIPT_LIBS>); #if ORTHANC_STANDALONE == 1 - OrthancPluginRegisterRestCallback(context, "/web-viewer/app/(.*)", ServeEmbeddedFolder<Orthanc::EmbeddedResources::WEB_VIEWER>); + OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/app/(.*)", ServeEmbeddedFolder<Orthanc::EmbeddedResources::WEB_VIEWER>); #else - OrthancPluginRegisterRestCallback(context, "/web-viewer/app/(.*)", ServeWebViewer); + OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/app/(.*)", ServeWebViewer); #endif OrthancPluginRegisterOnChangeCallback(context, OnChangeCallback); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/SeriesInformationAdapter.cpp new/OrthancWebViewer-2.6/Plugin/SeriesInformationAdapter.cpp --- old/OrthancWebViewer-2.5/Plugin/SeriesInformationAdapter.cpp 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/SeriesInformationAdapter.cpp 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/SeriesInformationAdapter.h new/OrthancWebViewer-2.6/Plugin/SeriesInformationAdapter.h --- old/OrthancWebViewer-2.5/Plugin/SeriesInformationAdapter.h 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/SeriesInformationAdapter.h 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/ViewerPrefetchPolicy.cpp new/OrthancWebViewer-2.6/Plugin/ViewerPrefetchPolicy.cpp --- old/OrthancWebViewer-2.5/Plugin/ViewerPrefetchPolicy.cpp 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/ViewerPrefetchPolicy.cpp 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/ViewerPrefetchPolicy.h new/OrthancWebViewer-2.6/Plugin/ViewerPrefetchPolicy.h --- old/OrthancWebViewer-2.5/Plugin/ViewerPrefetchPolicy.h 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/ViewerPrefetchPolicy.h 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/ViewerToolbox.cpp new/OrthancWebViewer-2.6/Plugin/ViewerToolbox.cpp --- old/OrthancWebViewer-2.5/Plugin/ViewerToolbox.cpp 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/ViewerToolbox.cpp 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License @@ -25,7 +25,7 @@ #include <Core/Toolbox.h> // Gain access to ORTHANC_PLUGINS_VERSION_IS_ABOVE if Orthanc SDK <= 1.3.0 -#include <Plugins/Samples/GdcmDecoder/GdcmImageDecoder.h> +#include <Plugins/Samples/Common/OrthancPluginCppWrapper.h> #include <json/reader.h> #include <stdexcept> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Plugin/ViewerToolbox.h new/OrthancWebViewer-2.6/Plugin/ViewerToolbox.h --- old/OrthancWebViewer-2.5/Plugin/ViewerToolbox.h 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Plugin/ViewerToolbox.h 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/README new/OrthancWebViewer-2.6/README --- old/OrthancWebViewer-2.5/README 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/README 2020-05-26 09:12:07.000000000 +0200 @@ -12,16 +12,15 @@ Dependencies ------------ -The Web viewer is based upon the following projects: +The Web viewer is based upon the Cornerstone project, a client-side +JavaScript library to display medical images in Web browsers, by Chris +Hafey <[email protected]>: +https://github.com/chafey/cornerstone -* Cornerstone, a client-side JavaScript library to display medical - images in Web browsers, by Chris Hafey <[email protected]>: - https://github.com/chafey/cornerstone - -* GDCM, an open-source implementation of the DICOM standard with - advanced features for image decoding, by Mathieu Malaterre - <[email protected]>: - http://sourceforge.net/projects/gdcm/ +In releases < 2.6, this plugin was also implementing primitives to +decode DICOM images using GDCM in Orthanc. Starting with release 2.6, +these primitives are available as part of the "orthanc-gdcm" plugin: +http://sourceforge.net/projects/gdcm/ Installation and usage diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Resources/BuildInstructions.txt new/OrthancWebViewer-2.6/Resources/BuildInstructions.txt --- old/OrthancWebViewer-2.5/Resources/BuildInstructions.txt 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Resources/BuildInstructions.txt 2020-05-26 09:12:07.000000000 +0200 @@ -10,7 +10,7 @@ Debian Sid (dynamic linking) ============================ -# sudo apt-get install build-essential unzip cmake libgdcm2-dev libjpeg-dev \ +# sudo apt-get install build-essential unzip cmake libjpeg-dev \ uuid-dev libgtest-dev libpng-dev libsqlite3-dev \ zlib1g-dev libboost-all-dev libjsoncpp-dev diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Resources/CMake/GdcmConfiguration.cmake new/OrthancWebViewer-2.6/Resources/CMake/GdcmConfiguration.cmake --- old/OrthancWebViewer-2.5/Resources/CMake/GdcmConfiguration.cmake 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Resources/CMake/GdcmConfiguration.cmake 1970-01-01 01:00:00.000000000 +0100 @@ -1,134 +0,0 @@ -# Orthanc - A Lightweight, RESTful DICOM Store -# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics -# Department, University Hospital of Liege, Belgium -# Copyright (C) 2017-2019 Osimis S.A., Belgium -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU Affero General Public License -# as published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - - -if (STATIC_BUILD OR NOT USE_SYSTEM_GDCM) - if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR - ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" OR - ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD") - # If using gcc, build GDCM with the "-fPIC" argument to allow its - # embedding into the shared library containing the Orthanc plugin - set(AdditionalFlags "-fPIC") - elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD") - # This definition is necessary to compile - # "Source/MediaStorageAndFileFormat/gdcmFileStreamer.cxx" - set(AdditionalFlags "-Doff64_t=off_t") - endif() - - set(Flags - "-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} ${AdditionalFlags}" - "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} ${AdditionalFlags}" - -DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG} - -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} - -DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE} - -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} - -DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL} - -DCMAKE_CXX_FLAGS_MINSIZEREL=${CMAKE_CXX_FLAGS_MINSIZEREL} - -DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO} - -DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${CMAKE_CXX_FLAGS_RELWITHDEBINFO} - ) - - if (CMAKE_TOOLCHAIN_FILE) - # Take absolute path to the toolchain - get_filename_component(TMP ${CMAKE_TOOLCHAIN_FILE} REALPATH BASE ${CMAKE_SOURCE_DIR}) - list(APPEND Flags -DCMAKE_TOOLCHAIN_FILE=${TMP}) - endif() - - # Don't build manpages (since gdcm 2.8.4) - list(APPEND Flags -DGDCM_BUILD_DOCBOOK_MANPAGES=OFF) - - if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase") - # Trick to disable the compilation of socket++ by gdcm, which is - # incompatible with LSB, but fortunately only required for DICOM - # Networking - list(APPEND Flags -DGDCM_USE_SYSTEM_SOCKETXX=ON) - - # Detect the number of CPU cores to run "make" with as much - # parallelism as possible - include(ProcessorCount) - ProcessorCount(N) - if (NOT N EQUAL 0) - set(MAKE_PARALLEL -j${N}) - endif() - - # For Linux Standard Base, avoid building incompatible target gdcmMEXD (*) - set(BUILD_COMMAND BUILD_COMMAND - ${CMAKE_MAKE_PROGRAM} ${MAKE_PARALLEL} - gdcmMSFF gdcmcharls gdcmDICT gdcmDSED gdcmIOD gdcmjpeg8 - gdcmjpeg12 gdcmjpeg16 gdcmopenjp2 gdcmzlib gdcmCommon gdcmexpat) - endif() - - include(ExternalProject) - externalproject_add(GDCM - URL "http://orthanc.osimis.io/ThirdPartyDownloads/gdcm-2.8.8.tar.gz" - URL_MD5 "740c22b787a8e47e4d748c167e450d8f" - TIMEOUT 60 - CMAKE_ARGS -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} ${Flags} - ${BUILD_COMMAND} # Customize "make", only for Linux Standard Base (*) - INSTALL_COMMAND "" # Skip the install step - ) - - if(MSVC) - set(Suffix ".lib") - set(Prefix "") - else() - set(Suffix ".a") - list(GET CMAKE_FIND_LIBRARY_PREFIXES 0 Prefix) - endif() - - set(GDCM_LIBRARIES - # WARNING: The order of the libraries below *is* important! - ${Prefix}gdcmMSFF${Suffix} - ${Prefix}gdcmcharls${Suffix} - ${Prefix}gdcmDICT${Suffix} - ${Prefix}gdcmDSED${Suffix} - ${Prefix}gdcmIOD${Suffix} - ${Prefix}gdcmjpeg8${Suffix} - ${Prefix}gdcmjpeg12${Suffix} - ${Prefix}gdcmjpeg16${Suffix} - ${Prefix}gdcmopenjp2${Suffix} - ${Prefix}gdcmzlib${Suffix} - ${Prefix}gdcmCommon${Suffix} - ${Prefix}gdcmexpat${Suffix} - - #${Prefix}socketxx${Suffix} - #${Prefix}gdcmMEXD${Suffix} # DICOM Networking, unneeded by Orthanc plugins - #${Prefix}gdcmgetopt${Suffix} - #${Prefix}gdcmuuid${Suffix} - ) - - ExternalProject_Get_Property(GDCM binary_dir) - include_directories(${binary_dir}/Source/Common) - link_directories(${binary_dir}/bin) - - ExternalProject_Get_Property(GDCM source_dir) - include_directories( - ${source_dir}/Source/Common - ${source_dir}/Source/MediaStorageAndFileFormat - ${source_dir}/Source/DataStructureAndEncodingDefinition - ) - -else() - find_package(GDCM REQUIRED) - if (GDCM_FOUND) - include(${GDCM_USE_FILE}) - set(GDCM_LIBRARIES gdcmCommon gdcmMSFF) - else(GDCM_FOUND) - message(FATAL_ERROR "Cannot find GDCM, did you set GDCM_DIR?") - endif(GDCM_FOUND) -endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Resources/CMake/JavaScriptLibraries.cmake new/OrthancWebViewer-2.6/Resources/CMake/JavaScriptLibraries.cmake --- old/OrthancWebViewer-2.5/Resources/CMake/JavaScriptLibraries.cmake 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Resources/CMake/JavaScriptLibraries.cmake 2020-05-26 09:12:07.000000000 +0200 @@ -1,7 +1,7 @@ # Orthanc - A Lightweight, RESTful DICOM Store # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium -# Copyright (C) 2017-2019 Osimis S.A., Belgium +# Copyright (C) 2017-2020 Osimis S.A., Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Resources/Orthanc/DownloadOrthancFramework.cmake new/OrthancWebViewer-2.6/Resources/Orthanc/DownloadOrthancFramework.cmake --- old/OrthancWebViewer-2.5/Resources/Orthanc/DownloadOrthancFramework.cmake 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Resources/Orthanc/DownloadOrthancFramework.cmake 2020-05-26 09:12:07.000000000 +0200 @@ -1,7 +1,7 @@ # Orthanc - A Lightweight, RESTful DICOM Store # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium -# Copyright (C) 2017-2019 Osimis S.A., Belgium +# Copyright (C) 2017-2020 Osimis S.A., Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU General Public License as @@ -66,6 +66,9 @@ if (NOT DEFINED ORTHANC_FRAMEWORK_BRANCH) if (ORTHANC_FRAMEWORK_VERSION STREQUAL "mainline") set(ORTHANC_FRAMEWORK_BRANCH "default") + set(ORTHANC_FRAMEWORK_MAJOR 999) + set(ORTHANC_FRAMEWORK_MINOR 999) + set(ORTHANC_FRAMEWORK_REVISION 999) else() set(ORTHANC_FRAMEWORK_BRANCH "Orthanc-${ORTHANC_FRAMEWORK_VERSION}") @@ -103,9 +106,37 @@ set(ORTHANC_FRAMEWORK_MD5 "404baef5d4c43e7c5d9410edda8ef5a5") elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.5.5") set(ORTHANC_FRAMEWORK_MD5 "cfc437e0687ae4bd725fd93dc1f08bc4") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.5.6") + set(ORTHANC_FRAMEWORK_MD5 "3c29de1e289b5472342947168f0105c0") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.5.7") + set(ORTHANC_FRAMEWORK_MD5 "e1b76f01116d9b5d4ac8cc39980560e3") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.5.8") + set(ORTHANC_FRAMEWORK_MD5 "82323e8c49a667f658a3639ea4dbc336") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.6.0") + set(ORTHANC_FRAMEWORK_MD5 "eab428d6e53f61e847fa360bb17ebe25") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.6.1") + set(ORTHANC_FRAMEWORK_MD5 "3971f5de96ba71dc9d3f3690afeaa7c0") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.7.0") + set(ORTHANC_FRAMEWORK_MD5 "ce5f689e852b01d3672bd3d2f952a5ef") + + # Below this point are development snapshots that were used to + # release some plugin, before an official release of the Orthanc + # framework was available. Here is the command to be used to + # generate a proper archive: + # + # $ hg archive /tmp/Orthanc-`hg id -i | sed 's/\+//'`.tar.gz + # + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "ae0e3fd609df") + # DICOMweb 1.1 (framework pre-1.6.0) + set(ORTHANC_FRAMEWORK_MD5 "7e09e9b530a2f527854f0b782d7e0645") endif() endif() endif() +else() + message("Using the Orthanc framework from a path of the filesystem. Assuming mainline version.") + set(ORTHANC_FRAMEWORK_MAJOR 999) + set(ORTHANC_FRAMEWORK_MINOR 999) + set(ORTHANC_FRAMEWORK_REVISION 999) endif() @@ -189,7 +220,7 @@ else() message("Forking the Orthanc source repository using Mercurial") execute_process( - COMMAND ${ORTHANC_FRAMEWORK_HG} clone "https://bitbucket.org/sjodogne/orthanc" + COMMAND ${ORTHANC_FRAMEWORK_HG} clone "https://hg.orthanc-server.com/orthanc/" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} RESULT_VARIABLE Failure ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Resources/Orthanc/LinuxStandardBaseToolchain.cmake new/OrthancWebViewer-2.6/Resources/Orthanc/LinuxStandardBaseToolchain.cmake --- old/OrthancWebViewer-2.5/Resources/Orthanc/LinuxStandardBaseToolchain.cmake 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Resources/Orthanc/LinuxStandardBaseToolchain.cmake 2020-05-26 09:12:07.000000000 +0200 @@ -1,11 +1,19 @@ -# LSB_CC=gcc-4.8 LSB_CXX=g++-4.8 cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../Resources/LinuxStandardBaseToolchain.cmake -DUSE_LEGACY_JSONCPP=ON -DUSE_LEGACY_LIBICU=ON -DBOOST_LOCALE_BACKEND=icu +# +# Full build, as used on the BuildBot CIS: +# +# $ LSB_CC=gcc-4.8 LSB_CXX=g++-4.8 cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../Resources/LinuxStandardBaseToolchain.cmake -DUSE_LEGACY_JSONCPP=ON -DUSE_LEGACY_LIBICU=ON -DBOOST_LOCALE_BACKEND=icu -DENABLE_PKCS11=ON -G Ninja +# +# Or, more lightweight version (without libp11 and ICU): +# +# $ LSB_CC=gcc-4.8 LSB_CXX=g++-4.8 cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../Resources/LinuxStandardBaseToolchain.cmake -DUSE_LEGACY_JSONCPP=ON -G Ninja +# INCLUDE(CMakeForceCompiler) -SET(LSB_PATH $ENV{LSB_PATH}) -SET(LSB_CC $ENV{LSB_CC}) -SET(LSB_CXX $ENV{LSB_CXX}) -SET(LSB_TARGET_VERSION "4.0") +SET(LSB_PATH $ENV{LSB_PATH} CACHE STRING "") +SET(LSB_CC $ENV{LSB_CC} CACHE STRING "") +SET(LSB_CXX $ENV{LSB_CXX} CACHE STRING "") +SET(LSB_TARGET_VERSION "4.0" CACHE STRING "") IF ("${LSB_PATH}" STREQUAL "") SET(LSB_PATH "/opt/lsb") @@ -31,7 +39,12 @@ # which compilers to use for C and C++ SET(CMAKE_C_COMPILER ${LSB_PATH}/bin/lsbcc) -CMAKE_FORCE_CXX_COMPILER(${LSB_PATH}/bin/lsbc++ GNU) + +if (${CMAKE_VERSION} VERSION_LESS "3.6.0") + CMAKE_FORCE_CXX_COMPILER(${LSB_PATH}/bin/lsbc++ GNU) +else() + SET(CMAKE_CXX_COMPILER ${LSB_PATH}/bin/lsbc++) +endif() # here is the target environment located SET(CMAKE_FIND_ROOT_PATH ${LSB_PATH}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Resources/OrthancExplorer.js new/OrthancWebViewer-2.6/Resources/OrthancExplorer.js --- old/OrthancWebViewer-2.5/Resources/OrthancExplorer.js 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Resources/OrthancExplorer.js 2020-05-26 09:12:07.000000000 +0200 @@ -11,8 +11,16 @@ b.insertBefore($('#series-delete').parent().parent()); b.click(function() { if ($.mobile.pageData) { - var series = $.mobile.pageData.uuid; - window.open('../web-viewer/app/viewer.html?series=' + series); + var urlSearchParams = { + "series" : $.mobile.pageData.uuid + }; + if ("authorizationTokens" in window) { + for (var token in authorizationTokens) { + urlSearchParams[token] = authorizationTokens[token]; + } + } + + window.open('../web-viewer/app/viewer.html?' + $.param(urlSearchParams)); } }); }); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Resources/SyncOrthancFolder.py new/OrthancWebViewer-2.6/Resources/SyncOrthancFolder.py --- old/OrthancWebViewer-2.5/Resources/SyncOrthancFolder.py 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/Resources/SyncOrthancFolder.py 2020-05-26 09:12:07.000000000 +0200 @@ -12,7 +12,7 @@ TARGET = os.path.join(os.path.dirname(__file__), 'Orthanc') PLUGIN_SDK_VERSION = '0.9.5' -REPOSITORY = 'https://bitbucket.org/sjodogne/orthanc/raw' +REPOSITORY = 'https://hg.orthanc-server.com/orthanc/raw-file' FILES = [ 'DownloadOrthancFramework.cmake', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Resources/holy-build-box-compile.sh new/OrthancWebViewer-2.6/Resources/holy-build-box-compile.sh --- old/OrthancWebViewer-2.5/Resources/holy-build-box-compile.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/OrthancWebViewer-2.6/Resources/holy-build-box-compile.sh 2020-05-26 09:12:07.000000000 +0200 @@ -0,0 +1,36 @@ +#!/bin/bash + +## +## This script compiles cross-distribution Linux binaries thanks to +## Holy Build Box: https://github.com/phusion/holy-build-box +## +## The ideal solution would be to use Linux Standard Base +## (LSB). Unfortunately, the LSB C++ compiler is a pre-4.8 gcc that +## does not feature full C++11 capabilities, which prevents compiling +## GDCM >= 3.0. +## + +set -ex + +if [ "$1" != "Debug" -a "$1" != "Release" ]; then + echo "Please provide build type: Debug or Release" + exit -1 +fi + +if [ -t 1 ]; then + # TTY is available => use interactive mode + DOCKER_FLAGS='-i' +fi + +ROOT_DIR=`dirname $(readlink -f $0)`/.. + +mkdir -p ${ROOT_DIR}/holy-build-box + +docker run -t ${DOCKER_FLAGS} --rm \ + --user $(id -u):$(id -g) \ + -v ${ROOT_DIR}:/source:ro \ + -v ${ROOT_DIR}/holy-build-box:/target:rw \ + phusion/holy-build-box-64:2.0.1 \ + bash /source/Resources/holy-build-box-internal.sh $1 + +ls -lR ${ROOT_DIR}/holy-build-box/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/Resources/holy-build-box-internal.sh new/OrthancWebViewer-2.6/Resources/holy-build-box-internal.sh --- old/OrthancWebViewer-2.5/Resources/holy-build-box-internal.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/OrthancWebViewer-2.6/Resources/holy-build-box-internal.sh 2020-05-26 09:12:07.000000000 +0200 @@ -0,0 +1,42 @@ +#!/bin/bash +set -e + +# Activate Holy Build Box environment. +source /hbb_exe/activate + +set -x + +mkdir /tmp/build +cd /tmp/build + +# Holy Build Box defines LDFLAGS as "-L/hbb_exe/lib +# -static-libstdc++". The "-L/hbb_exe/lib" option results in linking +# errors "undefined reference" to `std::__once_callable', +# 'std::__once_call' and '__once_proxy'. +export LDFLAGS=-static-libstdc++ +unset LDPATHFLAGS +unset SHLIB_LDFLAGS +unset LD_LIBRARY_PATH +unset LIBRARY_PATH + +mkdir /tmp/source-writeable + +cp -r /source/CMakeLists.txt /tmp/source-writeable/ +cp -r /source/Plugin /tmp/source-writeable/ +cp -r /source/Resources /tmp/source-writeable/ +cp -r /source/UnitTestsSources /tmp/source-writeable/ +cp -r /source/WebApplication /tmp/source-writeable/ + +cmake /tmp/source-writeable \ + -DCMAKE_BUILD_TYPE=$1 -DSTATIC_BUILD=ON \ + -DORTHANC_FRAMEWORK_SOURCE=web \ + -DORTHANC_FRAMEWORK_VERSION=1.6.1 \ + -DCMAKE_INSTALL_PREFIX=/target + +make -j`nproc` + +if [ "$1" == "Release" ]; then + strip ./libOrthancWebViewer.so +fi + +make install diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/UnitTestsSources/UnitTestsMain.cpp new/OrthancWebViewer-2.6/UnitTestsSources/UnitTestsMain.cpp --- old/OrthancWebViewer-2.5/UnitTestsSources/UnitTestsMain.cpp 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/UnitTestsSources/UnitTestsMain.cpp 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OrthancWebViewer-2.5/WebApplication/viewer.js new/OrthancWebViewer-2.6/WebApplication/viewer.js --- old/OrthancWebViewer-2.5/WebApplication/viewer.js 2019-02-27 17:20:45.000000000 +0100 +++ new/OrthancWebViewer-2.6/WebApplication/viewer.js 2020-05-26 09:12:07.000000000 +0200 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License @@ -23,6 +23,7 @@ var compression = 'jpeg95'; var isFirst = true; //var compression = 'deflate'; +var unsupportedMessage = 'Error: The Orthanc core does not support the decoding of this image. Make sure that you have properly installed a suitable decoder plugin (e.g. the official GDCM decoder plugin).'; // Prevent the access to IE @@ -32,6 +33,31 @@ } +function GetAuthorizationTokensFromUrl() { + var urlVariables = window.location.search.substring(1).split('&'); + var dict = {}; + + for (var i = 0; i < urlVariables.length; i++) { + var split = urlVariables[i].split('='); + + if (split.length == 2 && (split[0] == "token" || split[0] == "auth-token" || split[0] == "authorization")) { + dict[split[0]] = split[1]; + } + } + return dict; +}; + +var authorizationTokens = GetAuthorizationTokensFromUrl(); + +/* Copy the authoziation toekn from the url search parameters into HTTP headers in every request to the Rest API. +Thanks to this behaviour, you may specify a ?token=xxx in your url and this will be passed +as the "token" header in every request to the API allowing you to use the authorization plugin */ +$.ajaxSetup( + { + headers : authorizationTokens + } +); + function ResizeCornerstone() { $('#dicomImage').height($(window).height() - $('#slider').parent().height()); @@ -358,7 +384,7 @@ result = image; }, error: function() { - alert('Error: This image is not supported by the Web viewer.'); + alert(unsupportedMessage); return null; } }); @@ -405,7 +431,7 @@ } }, failure: function() { - alert('Error: This image is not supported by the Web viewer.'); + alert(unsupportedMessage); } }); ++++++ _service ++++++ <services> <service name="download_files" mode="localonly" /> </services>
