Mercurial > hg > orthanc-webviewer
annotate Plugin/Plugin.cpp @ 240:40a433acf26a
fix because of post-1.7.0
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 25 May 2020 12:52:17 +0200 |
parents | cce89307af28 |
children | 7097d0eaac76 |
rev | line source |
---|---|
0 | 1 /** |
2 * Orthanc - A Lightweight, RESTful DICOM Store | |
122 | 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
0 | 4 * Department, University Hospital of Liege, Belgium |
226
aee499712ac4
upgrade to year 2020
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
218
diff
changeset
|
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium |
0 | 6 * |
7 * This program is free software: you can redistribute it and/or | |
8 * modify it under the terms of the GNU Affero General Public License | |
9 * as published by the Free Software Foundation, either version 3 of | |
10 * the License, or (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, but | |
13 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Affero General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Affero General Public License | |
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 **/ | |
20 | |
21 | |
191
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
22 #include "ViewerToolbox.h" |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
23 #include "ViewerPrefetchPolicy.h" |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
24 #include "DecodedImageAdapter.h" |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
25 #include "SeriesInformationAdapter.h" |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
26 |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
27 #include <Core/DicomFormat/DicomMap.h> |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
28 #include <Core/OrthancException.h> |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
29 #include <Core/SystemToolbox.h> |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
30 #include <Core/Toolbox.h> |
230
cce89307af28
replacing GdcmDecoder/OrthancImageWrapper.h by OrthancPluginCppWrapper.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
228
diff
changeset
|
31 #include <Plugins/Samples/Common/OrthancPluginCppWrapper.h> |
191
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
32 #include <Plugins/Samples/GdcmDecoder/GdcmDecoderCache.h> |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
33 |
0 | 34 #include <boost/thread.hpp> |
35 #include <boost/lexical_cast.hpp> | |
36 #include <EmbeddedResources.h> | |
4
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
37 #include <boost/filesystem.hpp> |
0 | 38 |
39 | |
228
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
40 /** |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
41 * We force the redefinition of the "ORTHANC_PLUGINS_API" macro, that |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
42 * was left empty with gcc until Orthanc SDK 1.5.7 (no "default" |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
43 * visibility). This causes the version script, if run from "Holy |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
44 * Build Box", to make private the 4 global functions of the plugin. |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
45 **/ |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
46 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
47 #undef ORTHANC_PLUGINS_API |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
48 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
49 #ifdef WIN32 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
50 # define ORTHANC_PLUGINS_API __declspec(dllexport) |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
51 #elif __GNUC__ >= 4 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
52 # define ORTHANC_PLUGINS_API __attribute__ ((visibility ("default"))) |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
53 #else |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
54 # define ORTHANC_PLUGINS_API |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
55 #endif |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
56 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
57 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
58 |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
59 static OrthancPluginContext* context_ = NULL; |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
60 static bool restrictTransferSyntaxes_ = false; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
61 static std::set<std::string> enabledTransferSyntaxes_; |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
62 |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
63 |
0 | 64 class CacheContext |
65 { | |
66 private: | |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
67 class DynamicString : public Orthanc::IDynamicObject |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
68 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
69 private: |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
70 std::string value_; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
71 |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
72 public: |
197 | 73 explicit DynamicString(const char* value) : value_(value) |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
74 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
75 } |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
76 |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
77 const std::string& GetValue() const |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
78 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
79 return value_; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
80 } |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
81 }; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
82 |
58 | 83 Orthanc::FilesystemStorage storage_; |
84 Orthanc::SQLite::Connection db_; | |
85 | |
227
e4def26f0fd3
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
86 std::unique_ptr<OrthancPlugins::CacheManager> cache_; |
e4def26f0fd3
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
87 std::unique_ptr<OrthancPlugins::CacheScheduler> scheduler_; |
0 | 88 |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
89 Orthanc::SharedMessageQueue newInstances_; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
90 bool stop_; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
91 boost::thread newInstancesThread_; |
102 | 92 OrthancPlugins::GdcmDecoderCache decoder_; |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
93 |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
94 static void NewInstancesThread(CacheContext* cache) |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
95 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
96 while (!cache->stop_) |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
97 { |
227
e4def26f0fd3
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
98 std::unique_ptr<Orthanc::IDynamicObject> obj(cache->newInstances_.Dequeue(100)); |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
99 if (obj.get() != NULL) |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
100 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
101 const std::string& instanceId = dynamic_cast<DynamicString&>(*obj).GetValue(); |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
102 |
100
f5b1a9267da0
remove unused classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
99
diff
changeset
|
103 // On the reception of a new instance, indalidate the parent series of the instance |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
104 std::string uri = "/instances/" + std::string(instanceId); |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
105 Json::Value instance; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
106 if (OrthancPlugins::GetJsonFromOrthanc(instance, context_, uri)) |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
107 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
108 std::string seriesId = instance["ParentSeries"].asString(); |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
109 cache->GetScheduler().Invalidate(OrthancPlugins::CacheBundle_SeriesInformation, seriesId); |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
110 } |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
111 } |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
112 } |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
113 } |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
114 |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
115 |
0 | 116 public: |
197 | 117 explicit CacheContext(const std::string& path) : storage_(path), stop_(false) |
0 | 118 { |
119 boost::filesystem::path p(path); | |
58 | 120 db_.Open((p / "cache.db").string()); |
0 | 121 |
147
70d1fe6d6309
Avoid hard crash if not enough memory
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
143
diff
changeset
|
122 cache_.reset(new OrthancPlugins::CacheManager(context_, db_, storage_)); |
0 | 123 //cache_->SetSanityCheckEnabled(true); // For debug |
124 | |
125 scheduler_.reset(new OrthancPlugins::CacheScheduler(*cache_, 100)); | |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
126 |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
127 newInstancesThread_ = boost::thread(NewInstancesThread, this); |
0 | 128 } |
129 | |
58 | 130 ~CacheContext() |
131 { | |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
132 stop_ = true; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
133 if (newInstancesThread_.joinable()) |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
134 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
135 newInstancesThread_.join(); |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
136 } |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
137 |
58 | 138 scheduler_.reset(NULL); |
139 cache_.reset(NULL); | |
140 } | |
141 | |
0 | 142 OrthancPlugins::CacheScheduler& GetScheduler() |
143 { | |
144 return *scheduler_; | |
145 } | |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
146 |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
147 void SignalNewInstance(const char* instanceId) |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
148 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
149 newInstances_.Enqueue(new DynamicString(instanceId)); |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
150 } |
102 | 151 |
152 OrthancPlugins::GdcmDecoderCache& GetDecoder() | |
153 { | |
154 return decoder_; | |
155 } | |
0 | 156 }; |
157 | |
158 | |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
159 |
0 | 160 static CacheContext* cache_ = NULL; |
161 | |
162 | |
163 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
164 static OrthancPluginErrorCode OnChangeCallback(OrthancPluginChangeType changeType, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
165 OrthancPluginResourceType resourceType, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
166 const char* resourceId) |
0 | 167 { |
168 try | |
169 { | |
170 if (changeType == OrthancPluginChangeType_NewInstance && | |
171 resourceType == OrthancPluginResourceType_Instance) | |
172 { | |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
173 cache_->SignalNewInstance(resourceId); |
0 | 174 } |
175 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
176 return OrthancPluginErrorCode_Success; |
0 | 177 } |
178 catch (std::runtime_error& e) | |
179 { | |
180 OrthancPluginLogError(context_, e.what()); | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
181 return OrthancPluginErrorCode_Success; // Ignore error |
0 | 182 } |
183 } | |
184 | |
185 | |
186 | |
187 template <enum OrthancPlugins::CacheBundle bundle> | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
188 static OrthancPluginErrorCode ServeCache(OrthancPluginRestOutput* output, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
189 const char* url, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
190 const OrthancPluginHttpRequest* request) |
0 | 191 { |
192 try | |
193 { | |
194 if (request->method != OrthancPluginHttpMethod_Get) | |
195 { | |
196 OrthancPluginSendMethodNotAllowed(context_, output, "GET"); | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
197 return OrthancPluginErrorCode_Success; |
0 | 198 } |
199 | |
200 const std::string id = request->groups[0]; | |
201 std::string content; | |
202 | |
203 if (cache_->GetScheduler().Access(content, bundle, id)) | |
204 { | |
205 OrthancPluginAnswerBuffer(context_, output, content.c_str(), content.size(), "application/json"); | |
206 } | |
207 else | |
208 { | |
209 OrthancPluginSendHttpStatusCode(context_, output, 404); | |
210 } | |
211 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
212 return OrthancPluginErrorCode_Success; |
0 | 213 } |
214 catch (Orthanc::OrthancException& e) | |
215 { | |
216 OrthancPluginLogError(context_, e.What()); | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
217 return OrthancPluginErrorCode_Plugin; |
0 | 218 } |
219 catch (std::runtime_error& e) | |
220 { | |
221 OrthancPluginLogError(context_, e.what()); | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
222 return OrthancPluginErrorCode_Plugin; |
0 | 223 } |
224 catch (boost::bad_lexical_cast&) | |
225 { | |
226 OrthancPluginLogError(context_, "Bad lexical cast"); | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
227 return OrthancPluginErrorCode_Plugin; |
0 | 228 } |
229 } | |
230 | |
231 | |
232 | |
233 | |
234 #if ORTHANC_STANDALONE == 0 | |
99
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
235 static OrthancPluginErrorCode ServeWebViewer(OrthancPluginRestOutput* output, |
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
236 const char* url, |
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
237 const OrthancPluginHttpRequest* request) |
0 | 238 { |
239 if (request->method != OrthancPluginHttpMethod_Get) | |
240 { | |
241 OrthancPluginSendMethodNotAllowed(context_, output, "GET"); | |
99
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
242 return OrthancPluginErrorCode_Success; |
0 | 243 } |
244 | |
245 const std::string path = std::string(WEB_VIEWER_PATH) + std::string(request->groups[0]); | |
246 const char* mime = OrthancPlugins::GetMimeType(path); | |
247 | |
248 std::string s; | |
99
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
249 try |
0 | 250 { |
160 | 251 Orthanc::SystemToolbox::ReadFile(s, path); |
0 | 252 const char* resource = s.size() ? s.c_str() : NULL; |
253 OrthancPluginAnswerBuffer(context_, output, resource, s.size(), mime); | |
254 } | |
99
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
255 catch (Orthanc::OrthancException&) |
0 | 256 { |
257 std::string s = "Inexistent file in served folder: " + path; | |
258 OrthancPluginLogError(context_, s.c_str()); | |
259 OrthancPluginSendHttpStatusCode(context_, output, 404); | |
260 } | |
261 | |
99
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
262 return OrthancPluginErrorCode_Success; |
0 | 263 } |
264 #endif | |
265 | |
266 | |
267 | |
31 | 268 template <enum Orthanc::EmbeddedResources::DirectoryResourceId folder> |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
269 static OrthancPluginErrorCode ServeEmbeddedFolder(OrthancPluginRestOutput* output, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
270 const char* url, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
271 const OrthancPluginHttpRequest* request) |
0 | 272 { |
273 if (request->method != OrthancPluginHttpMethod_Get) | |
274 { | |
275 OrthancPluginSendMethodNotAllowed(context_, output, "GET"); | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
276 return OrthancPluginErrorCode_Success; |
0 | 277 } |
278 | |
279 std::string path = "/" + std::string(request->groups[0]); | |
280 const char* mime = OrthancPlugins::GetMimeType(path); | |
281 | |
282 try | |
283 { | |
284 std::string s; | |
31 | 285 Orthanc::EmbeddedResources::GetDirectoryResource(s, folder, path.c_str()); |
0 | 286 |
287 const char* resource = s.size() ? s.c_str() : NULL; | |
288 OrthancPluginAnswerBuffer(context_, output, resource, s.size(), mime); | |
289 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
290 return OrthancPluginErrorCode_Success; |
0 | 291 } |
292 catch (std::runtime_error&) | |
293 { | |
294 std::string s = "Unknown static resource in plugin: " + std::string(request->groups[0]); | |
295 OrthancPluginLogError(context_, s.c_str()); | |
296 OrthancPluginSendHttpStatusCode(context_, output, 404); | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
297 return OrthancPluginErrorCode_Success; |
0 | 298 } |
299 } | |
300 | |
301 | |
302 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
303 static OrthancPluginErrorCode IsStableSeries(OrthancPluginRestOutput* output, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
304 const char* url, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
305 const OrthancPluginHttpRequest* request) |
19 | 306 { |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
307 try |
19 | 308 { |
309 if (request->method != OrthancPluginHttpMethod_Get) | |
310 { | |
311 OrthancPluginSendMethodNotAllowed(context_, output, "GET"); | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
312 return OrthancPluginErrorCode_Success; |
19 | 313 } |
314 | |
315 const std::string id = request->groups[0]; | |
316 Json::Value series; | |
317 | |
318 if (OrthancPlugins::GetJsonFromOrthanc(series, context_, "/series/" + id) && | |
319 series.type() == Json::objectValue) | |
320 { | |
321 bool value = (series["IsStable"].asBool() || | |
322 series["Status"].asString() == "Complete"); | |
323 std::string answer = value ? "true" : "false"; | |
324 OrthancPluginAnswerBuffer(context_, output, answer.c_str(), answer.size(), "application/json"); | |
325 } | |
326 else | |
327 { | |
328 OrthancPluginSendHttpStatusCode(context_, output, 404); | |
329 } | |
330 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
331 return OrthancPluginErrorCode_Success; |
19 | 332 } |
333 catch (Orthanc::OrthancException& e) | |
334 { | |
335 OrthancPluginLogError(context_, e.What()); | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
336 return OrthancPluginErrorCode_Plugin; |
19 | 337 } |
338 catch (std::runtime_error& e) | |
339 { | |
340 OrthancPluginLogError(context_, e.what()); | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
341 return OrthancPluginErrorCode_Plugin; |
19 | 342 } |
343 catch (boost::bad_lexical_cast&) | |
344 { | |
345 OrthancPluginLogError(context_, "Bad lexical cast"); | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
346 return OrthancPluginErrorCode_Plugin; |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
347 } |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
348 } |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
349 |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
350 |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
351 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
352 static bool ExtractTransferSyntax(std::string& transferSyntax, |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
353 const void* dicom, |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
354 const uint32_t size) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
355 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
356 Orthanc::DicomMap header; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
357 if (!Orthanc::DicomMap::ParseDicomMetaInformation(header, reinterpret_cast<const char*>(dicom), size)) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
358 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
359 return false; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
360 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
361 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
362 const Orthanc::DicomValue* tag = header.TestAndGetValue(0x0002, 0x0010); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
363 if (tag == NULL || |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
364 tag->IsNull() || |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
365 tag->IsBinary()) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
366 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
367 return false; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
368 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
369 else |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
370 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
371 // Stripping spaces should not be required, as this is a UI value |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
372 // representation whose stripping is supported by the Orthanc |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
373 // core, but let's be careful... |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
374 transferSyntax = Orthanc::Toolbox::StripSpaces(tag->GetContent()); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
375 return true; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
376 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
377 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
378 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
379 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
380 static bool IsTransferSyntaxEnabled(const void* dicom, |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
381 const uint32_t size) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
382 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
383 std::string formattedSize; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
384 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
385 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
386 char tmp[16]; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
387 sprintf(tmp, "%0.1fMB", static_cast<float>(size) / (1024.0f * 1024.0f)); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
388 formattedSize.assign(tmp); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
389 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
390 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
391 if (!restrictTransferSyntaxes_) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
392 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
393 std::string s = "Decoding one DICOM instance of " + formattedSize + " using GDCM"; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
394 OrthancPluginLogInfo(context_, s.c_str()); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
395 return true; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
396 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
397 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
398 std::string transferSyntax; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
399 if (!ExtractTransferSyntax(transferSyntax, dicom, size)) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
400 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
401 std::string s = ("Cannot extract the transfer syntax of this instance of " + |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
402 formattedSize + ", will use GDCM to decode it"); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
403 OrthancPluginLogInfo(context_, s.c_str()); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
404 return true; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
405 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
406 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
407 if (enabledTransferSyntaxes_.find(transferSyntax) != enabledTransferSyntaxes_.end()) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
408 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
409 // Decoding for this transfer syntax is enabled |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
410 std::string s = ("Using GDCM to decode this instance of " + |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
411 formattedSize + " with transfer syntax " + transferSyntax); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
412 OrthancPluginLogInfo(context_, s.c_str()); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
413 return true; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
414 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
415 else |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
416 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
417 std::string s = ("Won't use GDCM to decode this instance of " + |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
418 formattedSize + ", as its transfer syntax " + transferSyntax + " is disabled"); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
419 OrthancPluginLogInfo(context_, s.c_str()); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
420 return false; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
421 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
422 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
423 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
424 |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
425 static OrthancPluginErrorCode DecodeImageCallback(OrthancPluginImage** target, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
426 const void* dicom, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
427 const uint32_t size, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
428 uint32_t frameIndex) |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
429 { |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
430 try |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
431 { |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
432 if (!IsTransferSyntaxEnabled(dicom, size)) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
433 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
434 *target = NULL; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
435 return OrthancPluginErrorCode_Success; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
436 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
437 |
227
e4def26f0fd3
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
438 std::unique_ptr<OrthancPlugins::OrthancImageWrapper> image; |
96 | 439 |
440 #if 0 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
441 // Do not use the cache |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
442 OrthancPlugins::GdcmImageDecoder decoder(dicom, size); |
96 | 443 image.reset(new OrthancPlugins::OrthancImageWrapper(context_, decoder, frameIndex)); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
444 #else |
96 | 445 using namespace OrthancPlugins; |
102 | 446 image.reset(cache_->GetDecoder().Decode(context_, dicom, size, frameIndex)); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
447 #endif |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
448 |
96 | 449 *target = image->Release(); |
450 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
451 return OrthancPluginErrorCode_Success; |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
452 } |
114 | 453 catch (Orthanc::OrthancException& e) |
454 { | |
455 *target = NULL; | |
456 | |
457 std::string s = "Cannot decode image using GDCM: " + std::string(e.What()); | |
205
7edc2c82996c
turning misleading error into warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
197
diff
changeset
|
458 OrthancPluginLogWarning(context_, s.c_str()); |
114 | 459 return OrthancPluginErrorCode_Plugin; |
460 } | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
461 catch (std::runtime_error& e) |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
462 { |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
463 *target = NULL; |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
464 |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
465 std::string s = "Cannot decode image using GDCM: " + std::string(e.what()); |
205
7edc2c82996c
turning misleading error into warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
197
diff
changeset
|
466 OrthancPluginLogWarning(context_, s.c_str()); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
467 return OrthancPluginErrorCode_Plugin; |
19 | 468 } |
469 } | |
470 | |
0 | 471 |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
472 void ParseConfiguration(bool& enableGdcm, |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
473 int& decodingThreads, |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
474 boost::filesystem::path& cachePath, |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
475 int& cacheSize) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
476 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
477 /* Read the configuration of the Web viewer */ |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
478 Json::Value configuration; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
479 if (!OrthancPlugins::ReadConfiguration(configuration, context_)) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
480 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
481 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
482 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
483 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
484 // By default, the cache of the Web viewer is located inside the |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
485 // "StorageDirectory" of Orthanc |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
486 cachePath = OrthancPlugins::GetStringValue(configuration, "StorageDirectory", "."); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
487 cachePath /= "WebViewerCache"; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
488 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
489 static const char* CONFIG_WEB_VIEWER = "WebViewer"; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
490 if (configuration.isMember(CONFIG_WEB_VIEWER)) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
491 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
492 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
493 std::string key = "CachePath"; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
494 if (!configuration[CONFIG_WEB_VIEWER].isMember(key)) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
495 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
496 // For backward compatibility with the initial release of the Web viewer |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
497 key = "Cache"; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
498 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
499 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
500 cachePath = OrthancPlugins::GetStringValue(configuration[CONFIG_WEB_VIEWER], key, cachePath.string()); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
501 cacheSize = OrthancPlugins::GetIntegerValue(configuration[CONFIG_WEB_VIEWER], "CacheSize", cacheSize); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
502 decodingThreads = OrthancPlugins::GetIntegerValue(configuration[CONFIG_WEB_VIEWER], "Threads", decodingThreads); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
503 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
504 static const char* CONFIG_ENABLE_GDCM = "EnableGdcm"; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
505 if (configuration[CONFIG_WEB_VIEWER].isMember(CONFIG_ENABLE_GDCM)) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
506 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
507 if (configuration[CONFIG_WEB_VIEWER][CONFIG_ENABLE_GDCM].type() != Json::booleanValue) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
508 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
509 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
510 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
511 else |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
512 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
513 enableGdcm = configuration[CONFIG_WEB_VIEWER][CONFIG_ENABLE_GDCM].asBool(); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
514 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
515 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
516 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
517 if (enableGdcm) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
518 { |
197 | 519 static const char* CONFIG_RESTRICT_TRANSFER_SYNTAXES = "RestrictTransferSyntaxes"; |
520 | |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
521 if (configuration[CONFIG_WEB_VIEWER].isMember(CONFIG_RESTRICT_TRANSFER_SYNTAXES)) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
522 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
523 const Json::Value& config = configuration[CONFIG_WEB_VIEWER][CONFIG_RESTRICT_TRANSFER_SYNTAXES]; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
524 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
525 if (config.type() != Json::arrayValue) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
526 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
527 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
528 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
529 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
530 restrictTransferSyntaxes_ = true; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
531 for (Json::Value::ArrayIndex i = 0; i < config.size(); i++) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
532 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
533 if (config[i].type() != Json::stringValue) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
534 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
535 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
536 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
537 else |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
538 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
539 std::string s = "Web viewer will use GDCM to decode transfer syntax " + config[i].asString(); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
540 enabledTransferSyntaxes_.insert(config[i].asString()); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
541 OrthancPluginLogWarning(context_, s.c_str()); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
542 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
543 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
544 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
545 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
546 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
547 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
548 if (decodingThreads <= 0 || |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
549 cacheSize <= 0) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
550 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
551 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
552 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
553 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
554 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
555 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
556 |
143
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
557 static bool DisplayPerformanceWarning() |
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
558 { |
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
559 (void) DisplayPerformanceWarning; // Disable warning about unused function |
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
560 OrthancPluginLogWarning(context_, "Performance warning in Web viewer: " |
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
561 "Non-release build, runtime debug assertions are turned on"); |
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
562 return true; |
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
563 } |
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
564 |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
565 |
0 | 566 extern "C" |
567 { | |
568 ORTHANC_PLUGINS_API int32_t OrthancPluginInitialize(OrthancPluginContext* context) | |
569 { | |
570 using namespace OrthancPlugins; | |
571 | |
230
cce89307af28
replacing GdcmDecoder/OrthancImageWrapper.h by OrthancPluginCppWrapper.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
228
diff
changeset
|
572 OrthancPlugins::SetGlobalContext(context); |
0 | 573 context_ = context; |
143
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
574 assert(DisplayPerformanceWarning()); |
0 | 575 OrthancPluginLogWarning(context_, "Initializing the Web viewer"); |
576 | |
577 | |
578 /* Check the version of the Orthanc core */ | |
579 if (OrthancPluginCheckVersion(context_) == 0) | |
580 { | |
581 char info[1024]; | |
582 sprintf(info, "Your version of Orthanc (%s) must be above %d.%d.%d to run this plugin", | |
583 context_->orthancVersion, | |
584 ORTHANC_PLUGINS_MINIMAL_MAJOR_NUMBER, | |
585 ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER, | |
586 ORTHANC_PLUGINS_MINIMAL_REVISION_NUMBER); | |
587 OrthancPluginLogError(context_, info); | |
588 return -1; | |
589 } | |
590 | |
591 OrthancPluginSetDescription(context_, "Provides a Web viewer of DICOM series within Orthanc."); | |
592 | |
593 | |
594 /* By default, use half of the available processing cores for the decoding of DICOM images */ | |
595 int decodingThreads = boost::thread::hardware_concurrency() / 2; | |
596 if (decodingThreads == 0) | |
597 { | |
598 decodingThreads = 1; | |
599 } | |
600 | |
127
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
601 /* By default, use GDCM */ |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
602 bool enableGdcm = true; |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
603 |
0 | 604 try |
605 { | |
197 | 606 /* By default, a cache of 100 MB is used */ |
607 int cacheSize = 100; | |
608 | |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
609 boost::filesystem::path cachePath; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
610 ParseConfiguration(enableGdcm, decodingThreads, cachePath, cacheSize); |
0 | 611 |
612 std::string message = ("Web viewer using " + boost::lexical_cast<std::string>(decodingThreads) + | |
613 " threads for the decoding of the DICOM images"); | |
614 OrthancPluginLogWarning(context_, message.c_str()); | |
615 | |
4
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
616 message = "Storing the cache of the Web viewer in folder: " + cachePath.string(); |
0 | 617 OrthancPluginLogWarning(context_, message.c_str()); |
618 | |
619 | |
620 /* Create the cache */ | |
4
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
621 cache_ = new CacheContext(cachePath.string()); |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
622 CacheScheduler& scheduler = cache_->GetScheduler(); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
623 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
624 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
625 /* Look for a change in the versions */ |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
626 std::string orthancVersion("unknown"), webViewerVersion("unknown"); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
627 bool clear = false; |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
628 if (!scheduler.LookupProperty(orthancVersion, CacheProperty_OrthancVersion) || |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
629 orthancVersion != std::string(context_->orthancVersion)) |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
630 { |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
631 std::string s = ("The version of Orthanc has changed from \"" + orthancVersion + "\" to \"" + |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
632 std::string(context_->orthancVersion) + "\": The cache of the Web viewer will be cleared"); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
633 OrthancPluginLogWarning(context_, s.c_str()); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
634 clear = true; |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
635 } |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
636 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
637 if (!scheduler.LookupProperty(webViewerVersion, CacheProperty_WebViewerVersion) || |
206
d1ed9efdea6c
rename ORTHANC_WEBVIEWER_VERSION as ORTHANC_PLUGIN_VERSION
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
638 webViewerVersion != std::string(ORTHANC_PLUGIN_VERSION)) |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
639 { |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
640 std::string s = ("The version of the Web viewer plugin has changed from \"" + webViewerVersion + "\" to \"" + |
206
d1ed9efdea6c
rename ORTHANC_WEBVIEWER_VERSION as ORTHANC_PLUGIN_VERSION
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
641 std::string(ORTHANC_PLUGIN_VERSION) + "\": The cache of the Web viewer will be cleared"); |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
642 OrthancPluginLogWarning(context_, s.c_str()); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
643 clear = true; |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
644 } |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
645 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
646 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
647 /* Clear the cache if needed */ |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
648 if (clear) |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
649 { |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
650 OrthancPluginLogWarning(context_, "Clearing the cache of the Web viewer"); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
651 scheduler.Clear(); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
652 scheduler.SetProperty(CacheProperty_OrthancVersion, context_->orthancVersion); |
206
d1ed9efdea6c
rename ORTHANC_WEBVIEWER_VERSION as ORTHANC_PLUGIN_VERSION
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
653 scheduler.SetProperty(CacheProperty_WebViewerVersion, ORTHANC_PLUGIN_VERSION); |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
654 } |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
655 else |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
656 { |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
657 OrthancPluginLogInfo(context_, "No change in the versions, no need to clear the cache of the Web viewer"); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
658 } |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
659 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
660 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
661 /* Configure the cache */ |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
662 scheduler.RegisterPolicy(new ViewerPrefetchPolicy(context_)); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
663 scheduler.Register(CacheBundle_SeriesInformation, |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
664 new SeriesInformationAdapter(context_, scheduler), 1); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
665 scheduler.Register(CacheBundle_DecodedImage, |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
666 new DecodedImageAdapter(context_), decodingThreads); |
4
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
667 |
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
668 |
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
669 /* Set the quotas */ |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
670 scheduler.SetQuota(CacheBundle_SeriesInformation, 1000, 0); // Keep info about 1000 series |
4
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
671 |
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
672 message = "Web viewer using a cache of " + boost::lexical_cast<std::string>(cacheSize) + " MB"; |
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
673 OrthancPluginLogWarning(context_, message.c_str()); |
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
674 |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
675 scheduler.SetQuota(CacheBundle_DecodedImage, 0, static_cast<uint64_t>(cacheSize) * 1024 * 1024); |
0 | 676 } |
677 catch (std::runtime_error& e) | |
678 { | |
679 OrthancPluginLogError(context_, e.what()); | |
680 return -1; | |
681 } | |
682 catch (Orthanc::OrthancException& e) | |
683 { | |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
684 if (e.GetErrorCode() == Orthanc::ErrorCode_BadFileFormat) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
685 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
686 OrthancPluginLogError(context_, "Unable to read the configuration of the Web viewer plugin"); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
687 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
688 else |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
689 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
690 OrthancPluginLogError(context_, e.What()); |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
691 } |
0 | 692 return -1; |
693 } | |
694 | |
695 | |
127
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
696 /* Configure the DICOM decoder */ |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
697 if (enableGdcm) |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
698 { |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
699 // Replace the default decoder of DICOM images that is built in Orthanc |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
700 OrthancPluginLogWarning(context_, "Using GDCM instead of the DICOM decoder that is built in Orthanc"); |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
701 OrthancPluginRegisterDecodeImageCallback(context_, DecodeImageCallback); |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
702 } |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
703 else |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
704 { |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
705 OrthancPluginLogWarning(context_, "Using the DICOM decoder that is built in Orthanc (not using GDCM)"); |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
706 } |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
707 |
5754d39b011d
Option "EnableGdcm" to replace the built-in decoder of Orthanc with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
122
diff
changeset
|
708 |
0 | 709 /* Install the callbacks */ |
218
6318db66448e
Performance: Replaced "OrthancPluginRegisterRestCallback" by "OrthancPluginRegisterRestCallbackNoLock"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
710 OrthancPluginRegisterRestCallbackNoLock(context_, "/web-viewer/series/(.*)", ServeCache<CacheBundle_SeriesInformation>); |
6318db66448e
Performance: Replaced "OrthancPluginRegisterRestCallback" by "OrthancPluginRegisterRestCallbackNoLock"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
711 OrthancPluginRegisterRestCallbackNoLock(context_, "/web-viewer/is-stable-series/(.*)", IsStableSeries); |
6318db66448e
Performance: Replaced "OrthancPluginRegisterRestCallback" by "OrthancPluginRegisterRestCallbackNoLock"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
712 OrthancPluginRegisterRestCallbackNoLock(context_, "/web-viewer/instances/(.*)", ServeCache<CacheBundle_DecodedImage>); |
6318db66448e
Performance: Replaced "OrthancPluginRegisterRestCallback" by "OrthancPluginRegisterRestCallbackNoLock"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
713 OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/libs/(.*)", ServeEmbeddedFolder<Orthanc::EmbeddedResources::JAVASCRIPT_LIBS>); |
0 | 714 |
715 #if ORTHANC_STANDALONE == 1 | |
218
6318db66448e
Performance: Replaced "OrthancPluginRegisterRestCallback" by "OrthancPluginRegisterRestCallbackNoLock"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
716 OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/app/(.*)", ServeEmbeddedFolder<Orthanc::EmbeddedResources::WEB_VIEWER>); |
0 | 717 #else |
218
6318db66448e
Performance: Replaced "OrthancPluginRegisterRestCallback" by "OrthancPluginRegisterRestCallbackNoLock"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
718 OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/app/(.*)", ServeWebViewer); |
0 | 719 #endif |
720 | |
721 OrthancPluginRegisterOnChangeCallback(context, OnChangeCallback); | |
722 | |
723 | |
724 /* Extend the default Orthanc Explorer with custom JavaScript */ | |
725 std::string explorer; | |
31 | 726 Orthanc::EmbeddedResources::GetFileResource(explorer, Orthanc::EmbeddedResources::ORTHANC_EXPLORER); |
0 | 727 OrthancPluginExtendOrthancExplorer(context_, explorer.c_str()); |
728 | |
729 return 0; | |
730 } | |
731 | |
732 | |
733 ORTHANC_PLUGINS_API void OrthancPluginFinalize() | |
734 { | |
735 OrthancPluginLogWarning(context_, "Finalizing the Web viewer"); | |
736 | |
737 if (cache_ != NULL) | |
738 { | |
739 delete cache_; | |
740 cache_ = NULL; | |
741 } | |
742 } | |
743 | |
744 | |
745 ORTHANC_PLUGINS_API const char* OrthancPluginGetName() | |
746 { | |
747 return "web-viewer"; | |
748 } | |
749 | |
750 | |
751 ORTHANC_PLUGINS_API const char* OrthancPluginGetVersion() | |
752 { | |
206
d1ed9efdea6c
rename ORTHANC_WEBVIEWER_VERSION as ORTHANC_PLUGIN_VERSION
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
753 return ORTHANC_PLUGIN_VERSION; |
0 | 754 } |
755 } |