Mercurial > hg > orthanc-webviewer
annotate Plugin/Plugin.cpp @ 315:05bf4ccfdca9
fix deprecated calls
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 22 Mar 2024 15:46:33 +0100 |
parents | 0a1ad7492050 |
children | 591ca447ebf8 |
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 |
303 | 5 * Copyright (C) 2017-2022 Osimis S.A., Belgium |
314
0a1ad7492050
update year to 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
303
diff
changeset
|
6 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
0 | 7 * |
8 * This program is free software: you can redistribute it and/or | |
9 * modify it under the terms of the GNU Affero General Public License | |
10 * as published by the Free Software Foundation, either version 3 of | |
11 * the License, or (at your option) any later version. | |
12 * | |
13 * This program is distributed in the hope that it will be useful, but | |
14 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
16 * Affero General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU Affero General Public License | |
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
20 **/ | |
21 | |
22 | |
275
3a9749b1dfce
link against system-wide Orthanc Framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
271
diff
changeset
|
23 #include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" |
191
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
24 #include "ViewerToolbox.h" |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
25 #include "ViewerPrefetchPolicy.h" |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
26 #include "DecodedImageAdapter.h" |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
27 #include "SeriesInformationAdapter.h" |
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
28 |
266
4e9d30c19b4b
linking against orthanc framework library
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
29 #include <DicomFormat/DicomMap.h> |
287 | 30 #include <Logging.h> |
266
4e9d30c19b4b
linking against orthanc framework library
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
31 #include <OrthancException.h> |
4e9d30c19b4b
linking against orthanc framework library
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
32 #include <SystemToolbox.h> |
4e9d30c19b4b
linking against orthanc framework library
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
33 #include <Toolbox.h> |
191
993dd140bd30
Resort to Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
174
diff
changeset
|
34 |
0 | 35 #include <boost/thread.hpp> |
36 #include <boost/lexical_cast.hpp> | |
37 #include <EmbeddedResources.h> | |
4
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
38 #include <boost/filesystem.hpp> |
0 | 39 |
315
05bf4ccfdca9
fix deprecated calls
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
314
diff
changeset
|
40 #define ORTHANC_PLUGIN_NAME "web-viewer" |
05bf4ccfdca9
fix deprecated calls
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
314
diff
changeset
|
41 |
0 | 42 |
228
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
43 /** |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
44 * 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
|
45 * 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
|
46 * 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
|
47 * 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
|
48 **/ |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
49 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
50 #undef ORTHANC_PLUGINS_API |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
51 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
52 #ifdef WIN32 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
53 # 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
|
54 #elif __GNUC__ >= 4 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
55 # 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
|
56 #else |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
57 # define ORTHANC_PLUGINS_API |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
58 #endif |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
59 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
60 |
0f9d183f685d
fix compilation with Holy Build Box (for LSB)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
227
diff
changeset
|
61 |
0 | 62 class CacheContext |
63 { | |
64 private: | |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
65 class DynamicString : public Orthanc::IDynamicObject |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
66 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
67 private: |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
68 std::string value_; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
69 |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
70 public: |
197 | 71 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
|
72 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
73 } |
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 const std::string& GetValue() const |
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 return value_; |
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 }; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
80 |
58 | 81 Orthanc::FilesystemStorage storage_; |
82 Orthanc::SQLite::Connection db_; | |
83 | |
227
e4def26f0fd3
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
84 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
|
85 std::unique_ptr<OrthancPlugins::CacheScheduler> scheduler_; |
0 | 86 |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
87 Orthanc::SharedMessageQueue newInstances_; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
88 bool stop_; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
89 boost::thread newInstancesThread_; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
90 |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
91 static void NewInstancesThread(CacheContext* cache) |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
92 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
93 while (!cache->stop_) |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
94 { |
227
e4def26f0fd3
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
95 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
|
96 if (obj.get() != NULL) |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
97 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
98 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
|
99 |
100
f5b1a9267da0
remove unused classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
99
diff
changeset
|
100 // 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
|
101 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
|
102 Json::Value instance; |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
103 if (OrthancPlugins::GetJsonFromOrthanc(instance, OrthancPlugins::GetGlobalContext(), uri)) |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
104 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
105 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
|
106 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
|
107 } |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
108 } |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
109 } |
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 |
0 | 113 public: |
197 | 114 explicit CacheContext(const std::string& path) : storage_(path), stop_(false) |
0 | 115 { |
116 boost::filesystem::path p(path); | |
58 | 117 db_.Open((p / "cache.db").string()); |
0 | 118 |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
119 cache_.reset(new OrthancPlugins::CacheManager(OrthancPlugins::GetGlobalContext(), db_, storage_)); |
0 | 120 //cache_->SetSanityCheckEnabled(true); // For debug |
121 | |
122 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
|
123 |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
124 newInstancesThread_ = boost::thread(NewInstancesThread, this); |
0 | 125 } |
126 | |
58 | 127 ~CacheContext() |
128 { | |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
129 stop_ = true; |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
130 if (newInstancesThread_.joinable()) |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
131 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
132 newInstancesThread_.join(); |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
133 } |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
134 |
58 | 135 scheduler_.reset(NULL); |
136 cache_.reset(NULL); | |
137 } | |
138 | |
0 | 139 OrthancPlugins::CacheScheduler& GetScheduler() |
140 { | |
141 return *scheduler_; | |
142 } | |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
143 |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
144 void SignalNewInstance(const char* instanceId) |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
145 { |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
146 newInstances_.Enqueue(new DynamicString(instanceId)); |
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
147 } |
0 | 148 }; |
149 | |
150 | |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
151 |
0 | 152 static CacheContext* cache_ = NULL; |
153 | |
154 | |
155 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
156 static OrthancPluginErrorCode OnChangeCallback(OrthancPluginChangeType changeType, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
157 OrthancPluginResourceType resourceType, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
158 const char* resourceId) |
0 | 159 { |
160 try | |
161 { | |
162 if (changeType == OrthancPluginChangeType_NewInstance && | |
163 resourceType == OrthancPluginResourceType_Instance) | |
164 { | |
75
e15a59a4b4d4
Fix possible deadlock with other plugins in OnChangeCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
165 cache_->SignalNewInstance(resourceId); |
0 | 166 } |
167 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
168 return OrthancPluginErrorCode_Success; |
0 | 169 } |
170 catch (std::runtime_error& e) | |
171 { | |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
172 LOG(ERROR) << e.what(); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
173 return OrthancPluginErrorCode_Success; // Ignore error |
0 | 174 } |
175 } | |
176 | |
177 | |
178 | |
179 template <enum OrthancPlugins::CacheBundle bundle> | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
180 static OrthancPluginErrorCode ServeCache(OrthancPluginRestOutput* output, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
181 const char* url, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
182 const OrthancPluginHttpRequest* request) |
0 | 183 { |
184 try | |
185 { | |
186 if (request->method != OrthancPluginHttpMethod_Get) | |
187 { | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
188 OrthancPluginSendMethodNotAllowed(OrthancPlugins::GetGlobalContext(), output, "GET"); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
189 return OrthancPluginErrorCode_Success; |
0 | 190 } |
191 | |
192 const std::string id = request->groups[0]; | |
193 std::string content; | |
194 | |
195 if (cache_->GetScheduler().Access(content, bundle, id)) | |
196 { | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
197 OrthancPluginAnswerBuffer(OrthancPlugins::GetGlobalContext(), output, content.c_str(), content.size(), "application/json"); |
0 | 198 } |
199 else | |
200 { | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
201 OrthancPluginSendHttpStatusCode(OrthancPlugins::GetGlobalContext(), output, 404); |
0 | 202 } |
203 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
204 return OrthancPluginErrorCode_Success; |
0 | 205 } |
206 catch (Orthanc::OrthancException& e) | |
207 { | |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
208 LOG(ERROR) << e.What(); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
209 return OrthancPluginErrorCode_Plugin; |
0 | 210 } |
211 catch (std::runtime_error& e) | |
212 { | |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
213 LOG(ERROR) << e.what(); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
214 return OrthancPluginErrorCode_Plugin; |
0 | 215 } |
216 catch (boost::bad_lexical_cast&) | |
217 { | |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
218 LOG(ERROR) << "Bad lexical cast"; |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
219 return OrthancPluginErrorCode_Plugin; |
0 | 220 } |
221 } | |
222 | |
223 | |
224 | |
225 | |
226 #if ORTHANC_STANDALONE == 0 | |
99
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
227 static OrthancPluginErrorCode ServeWebViewer(OrthancPluginRestOutput* output, |
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
228 const char* url, |
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
229 const OrthancPluginHttpRequest* request) |
0 | 230 { |
231 if (request->method != OrthancPluginHttpMethod_Get) | |
232 { | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
233 OrthancPluginSendMethodNotAllowed(OrthancPlugins::GetGlobalContext(), output, "GET"); |
99
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
234 return OrthancPluginErrorCode_Success; |
0 | 235 } |
236 | |
237 const std::string path = std::string(WEB_VIEWER_PATH) + std::string(request->groups[0]); | |
238 const char* mime = OrthancPlugins::GetMimeType(path); | |
239 | |
240 std::string s; | |
99
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
241 try |
0 | 242 { |
160 | 243 Orthanc::SystemToolbox::ReadFile(s, path); |
0 | 244 const char* resource = s.size() ? s.c_str() : NULL; |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
245 OrthancPluginAnswerBuffer(OrthancPlugins::GetGlobalContext(), output, resource, s.size(), mime); |
0 | 246 } |
99
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
247 catch (Orthanc::OrthancException&) |
0 | 248 { |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
249 LOG(ERROR) << "Inexistent file in served folder: " << path; |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
250 OrthancPluginSendHttpStatusCode(OrthancPlugins::GetGlobalContext(), output, 404); |
0 | 251 } |
252 | |
99
46ec13a1177c
use of ordered-slices
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
96
diff
changeset
|
253 return OrthancPluginErrorCode_Success; |
0 | 254 } |
255 #endif | |
256 | |
257 | |
258 | |
31 | 259 template <enum Orthanc::EmbeddedResources::DirectoryResourceId folder> |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
260 static OrthancPluginErrorCode ServeEmbeddedFolder(OrthancPluginRestOutput* output, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
261 const char* url, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
262 const OrthancPluginHttpRequest* request) |
0 | 263 { |
264 if (request->method != OrthancPluginHttpMethod_Get) | |
265 { | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
266 OrthancPluginSendMethodNotAllowed(OrthancPlugins::GetGlobalContext(), output, "GET"); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
267 return OrthancPluginErrorCode_Success; |
0 | 268 } |
269 | |
270 std::string path = "/" + std::string(request->groups[0]); | |
271 const char* mime = OrthancPlugins::GetMimeType(path); | |
272 | |
273 try | |
274 { | |
275 std::string s; | |
31 | 276 Orthanc::EmbeddedResources::GetDirectoryResource(s, folder, path.c_str()); |
0 | 277 |
278 const char* resource = s.size() ? s.c_str() : NULL; | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
279 OrthancPluginAnswerBuffer(OrthancPlugins::GetGlobalContext(), output, resource, s.size(), mime); |
0 | 280 |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
281 return OrthancPluginErrorCode_Success; |
0 | 282 } |
283 catch (std::runtime_error&) | |
284 { | |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
285 LOG(ERROR) << "Unknown static resource in plugin: " << request->groups[0]; |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
286 OrthancPluginSendHttpStatusCode(OrthancPlugins::GetGlobalContext(), output, 404); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
287 return OrthancPluginErrorCode_Success; |
0 | 288 } |
289 } | |
290 | |
291 | |
292 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
293 static OrthancPluginErrorCode IsStableSeries(OrthancPluginRestOutput* output, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
294 const char* url, |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
295 const OrthancPluginHttpRequest* request) |
19 | 296 { |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
297 try |
19 | 298 { |
299 if (request->method != OrthancPluginHttpMethod_Get) | |
300 { | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
301 OrthancPluginSendMethodNotAllowed(OrthancPlugins::GetGlobalContext(), output, "GET"); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
302 return OrthancPluginErrorCode_Success; |
19 | 303 } |
304 | |
305 const std::string id = request->groups[0]; | |
306 Json::Value series; | |
307 | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
308 if (OrthancPlugins::GetJsonFromOrthanc(series, OrthancPlugins::GetGlobalContext(), "/series/" + id) && |
19 | 309 series.type() == Json::objectValue) |
310 { | |
311 bool value = (series["IsStable"].asBool() || | |
312 series["Status"].asString() == "Complete"); | |
313 std::string answer = value ? "true" : "false"; | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
314 OrthancPluginAnswerBuffer(OrthancPlugins::GetGlobalContext(), output, answer.c_str(), answer.size(), "application/json"); |
19 | 315 } |
316 else | |
317 { | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
318 OrthancPluginSendHttpStatusCode(OrthancPlugins::GetGlobalContext(), output, 404); |
19 | 319 } |
320 | |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
321 return OrthancPluginErrorCode_Success; |
19 | 322 } |
323 catch (Orthanc::OrthancException& e) | |
324 { | |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
325 LOG(ERROR) << e.What(); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
326 return OrthancPluginErrorCode_Plugin; |
19 | 327 } |
328 catch (std::runtime_error& e) | |
329 { | |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
330 LOG(ERROR) << e.what(); |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
331 return OrthancPluginErrorCode_Plugin; |
19 | 332 } |
333 catch (boost::bad_lexical_cast&) | |
334 { | |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
335 LOG(ERROR) << "Bad lexical cast"; |
95
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
336 return OrthancPluginErrorCode_Plugin; |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
337 } |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
338 } |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
339 |
dbe7c97b6b4a
replace built-in decoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
340 |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
341 |
231
7097d0eaac76
Move the GDCM decoder out of the Orthanc Web viewer plugin as a separate plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
230
diff
changeset
|
342 void ParseConfiguration(int& decodingThreads, |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
343 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
|
344 int& cacheSize) |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
345 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
346 /* 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
|
347 Json::Value configuration; |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
348 if (!OrthancPlugins::ReadConfiguration(configuration, OrthancPlugins::GetGlobalContext())) |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
349 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
350 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
|
351 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
352 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
353 // 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
|
354 // "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
|
355 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
|
356 cachePath /= "WebViewerCache"; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
357 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
358 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
|
359 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
|
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 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
|
363 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
|
364 { |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
365 // 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
|
366 key = "Cache"; |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
367 } |
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 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
|
370 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
|
371 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
|
372 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
373 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
374 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
|
375 cacheSize <= 0) |
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 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
|
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 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
381 |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
382 |
143
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
383 static bool DisplayPerformanceWarning() |
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
384 { |
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
385 (void) DisplayPerformanceWarning; // Disable warning about unused function |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
386 LOG(WARNING) << "Performance warning in Web viewer: " |
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
387 << "Non-release build, runtime debug assertions are turned on"; |
143
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
388 return true; |
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
389 } |
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
390 |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
391 |
0 | 392 extern "C" |
393 { | |
394 ORTHANC_PLUGINS_API int32_t OrthancPluginInitialize(OrthancPluginContext* context) | |
395 { | |
396 using namespace OrthancPlugins; | |
397 | |
230
cce89307af28
replacing GdcmDecoder/OrthancImageWrapper.h by OrthancPluginCppWrapper.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
228
diff
changeset
|
398 OrthancPlugins::SetGlobalContext(context); |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
399 |
286 | 400 #if ORTHANC_FRAMEWORK_VERSION_IS_ABOVE(1, 7, 2) |
265 | 401 Orthanc::Logging::InitializePluginContext(context); |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
402 #else |
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
403 Orthanc::Logging::Initialize(context); |
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
404 #endif |
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
405 |
143
16f8471e3872
Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
133
diff
changeset
|
406 assert(DisplayPerformanceWarning()); |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
407 LOG(WARNING) << "Initializing the Web viewer"; |
0 | 408 |
409 | |
410 /* Check the version of the Orthanc core */ | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
411 if (OrthancPluginCheckVersion(context) == 0) |
0 | 412 { |
413 char info[1024]; | |
414 sprintf(info, "Your version of Orthanc (%s) must be above %d.%d.%d to run this plugin", | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
415 context->orthancVersion, |
0 | 416 ORTHANC_PLUGINS_MINIMAL_MAJOR_NUMBER, |
417 ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER, | |
418 ORTHANC_PLUGINS_MINIMAL_REVISION_NUMBER); | |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
419 OrthancPluginLogError(context, info); |
0 | 420 return -1; |
421 } | |
422 | |
315
05bf4ccfdca9
fix deprecated calls
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
314
diff
changeset
|
423 OrthancPlugins::SetDescription(ORTHANC_PLUGIN_NAME, "Provides a Web viewer of DICOM series within Orthanc."); |
0 | 424 |
425 | |
426 /* By default, use half of the available processing cores for the decoding of DICOM images */ | |
427 int decodingThreads = boost::thread::hardware_concurrency() / 2; | |
428 if (decodingThreads == 0) | |
429 { | |
430 decodingThreads = 1; | |
431 } | |
432 | |
433 try | |
434 { | |
197 | 435 /* By default, a cache of 100 MB is used */ |
436 int cacheSize = 100; | |
437 | |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
438 boost::filesystem::path cachePath; |
231
7097d0eaac76
Move the GDCM decoder out of the Orthanc Web viewer plugin as a separate plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
230
diff
changeset
|
439 ParseConfiguration(decodingThreads, cachePath, cacheSize); |
0 | 440 |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
441 LOG(WARNING) << "Web viewer using " << decodingThreads |
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
442 << " threads for the decoding of the DICOM images"; |
0 | 443 |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
444 LOG(WARNING) << "Storing the cache of the Web viewer in folder: " << cachePath.string(); |
0 | 445 |
446 | |
447 /* Create the cache */ | |
4
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
448 cache_ = new CacheContext(cachePath.string()); |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
449 CacheScheduler& scheduler = cache_->GetScheduler(); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
450 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
451 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
452 /* Look for a change in the versions */ |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
453 std::string orthancVersion("unknown"), webViewerVersion("unknown"); |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
454 bool clear = false; |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
455 if (!scheduler.LookupProperty(orthancVersion, CacheProperty_OrthancVersion) || |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
456 orthancVersion != std::string(context->orthancVersion)) |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
457 { |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
458 LOG(WARNING) << "The version of Orthanc has changed from \"" << orthancVersion |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
459 << "\" to \"" << context->orthancVersion |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
460 << "\": 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
|
461 clear = true; |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
462 } |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
463 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
464 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
|
465 webViewerVersion != std::string(ORTHANC_PLUGIN_VERSION)) |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
466 { |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
467 LOG(WARNING) << "The version of the Web viewer plugin has changed from \"" |
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
468 << webViewerVersion << "\" to \"" << ORTHANC_PLUGIN_VERSION |
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
469 << "\": 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
|
470 clear = true; |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
471 } |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
472 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
473 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
474 /* Clear the cache if needed */ |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
475 if (clear) |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
476 { |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
477 LOG(WARNING) << "Clearing the cache of the Web viewer"; |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
478 scheduler.Clear(); |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
479 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
|
480 scheduler.SetProperty(CacheProperty_WebViewerVersion, ORTHANC_PLUGIN_VERSION); |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
481 } |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
482 else |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
483 { |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
484 LOG(INFO) << "No change in the versions, no need to clear the cache of the Web viewer"; |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
485 } |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
486 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
487 |
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
488 /* Configure the cache */ |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
489 scheduler.RegisterPolicy(new ViewerPrefetchPolicy(context)); |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
490 scheduler.Register(CacheBundle_SeriesInformation, |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
491 new SeriesInformationAdapter(context, scheduler), 1); |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
492 scheduler.Register(CacheBundle_DecodedImage, |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
493 new DecodedImageAdapter(context), decodingThreads); |
4
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
494 |
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
495 |
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
496 /* Set the quotas */ |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
497 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
|
498 |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
499 LOG(WARNING) << "Web viewer using a cache of " << cacheSize << " MB"; |
4
ecefd45026bf
configuration of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
0
diff
changeset
|
500 |
115
c8ca47a67bf3
automatic clearing of the cache
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
114
diff
changeset
|
501 scheduler.SetQuota(CacheBundle_DecodedImage, 0, static_cast<uint64_t>(cacheSize) * 1024 * 1024); |
0 | 502 } |
503 catch (std::runtime_error& e) | |
504 { | |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
505 LOG(ERROR) << e.what(); |
0 | 506 return -1; |
507 } | |
508 catch (Orthanc::OrthancException& e) | |
509 { | |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
510 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
|
511 { |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
512 LOG(ERROR) << "Unable to read the configuration of the Web viewer plugin"; |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
513 } |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
514 else |
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
515 { |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
516 LOG(ERROR) << e.What(); |
133
3251ec958a29
Option "RestrictTransferSyntaxes" saying which transfer syntaxes should be decoded with GDCM
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
127
diff
changeset
|
517 } |
0 | 518 return -1; |
519 } | |
520 | |
521 | |
522 /* Install the callbacks */ | |
271
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
523 OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/series/(.*)", ServeCache<CacheBundle_SeriesInformation>); |
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
524 OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/is-stable-series/(.*)", IsStableSeries); |
d3b58d11e3ec
removed global variable "context_"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
525 OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/instances/(.*)", ServeCache<CacheBundle_DecodedImage>); |
218
6318db66448e
Performance: Replaced "OrthancPluginRegisterRestCallback" by "OrthancPluginRegisterRestCallbackNoLock"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
526 OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/libs/(.*)", ServeEmbeddedFolder<Orthanc::EmbeddedResources::JAVASCRIPT_LIBS>); |
0 | 527 |
528 #if ORTHANC_STANDALONE == 1 | |
218
6318db66448e
Performance: Replaced "OrthancPluginRegisterRestCallback" by "OrthancPluginRegisterRestCallbackNoLock"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
529 OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/app/(.*)", ServeEmbeddedFolder<Orthanc::EmbeddedResources::WEB_VIEWER>); |
0 | 530 #else |
218
6318db66448e
Performance: Replaced "OrthancPluginRegisterRestCallback" by "OrthancPluginRegisterRestCallbackNoLock"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
531 OrthancPluginRegisterRestCallbackNoLock(context, "/web-viewer/app/(.*)", ServeWebViewer); |
0 | 532 #endif |
533 | |
534 OrthancPluginRegisterOnChangeCallback(context, OnChangeCallback); | |
535 | |
536 | |
537 /* Extend the default Orthanc Explorer with custom JavaScript */ | |
538 std::string explorer; | |
31 | 539 Orthanc::EmbeddedResources::GetFileResource(explorer, Orthanc::EmbeddedResources::ORTHANC_EXPLORER); |
315
05bf4ccfdca9
fix deprecated calls
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
314
diff
changeset
|
540 OrthancPlugins::ExtendOrthancExplorer(ORTHANC_PLUGIN_NAME, explorer); |
0 | 541 |
542 return 0; | |
543 } | |
544 | |
545 | |
546 ORTHANC_PLUGINS_API void OrthancPluginFinalize() | |
547 { | |
260
620ed85fb514
replacing OrthancPluginLog...() by LOG(...)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
235
diff
changeset
|
548 LOG(WARNING) << "Finalizing the Web viewer"; |
0 | 549 |
550 if (cache_ != NULL) | |
551 { | |
552 delete cache_; | |
553 cache_ = NULL; | |
554 } | |
265 | 555 |
556 Orthanc::Logging::Finalize(); | |
0 | 557 } |
558 | |
559 | |
560 ORTHANC_PLUGINS_API const char* OrthancPluginGetName() | |
561 { | |
315
05bf4ccfdca9
fix deprecated calls
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
314
diff
changeset
|
562 return ORTHANC_PLUGIN_NAME; |
0 | 563 } |
564 | |
565 | |
566 ORTHANC_PLUGINS_API const char* OrthancPluginGetVersion() | |
567 { | |
206
d1ed9efdea6c
rename ORTHANC_WEBVIEWER_VERSION as ORTHANC_PLUGIN_VERSION
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
568 return ORTHANC_PLUGIN_VERSION; |
0 | 569 } |
570 } |