Mercurial > hg > orthanc
annotate OrthancServer/Sources/OrthancRestApi/OrthancRestArchive.cpp @ 5431:4be5f117aa0d
metrics
author | Alain Mazy <am@osimis.io> |
---|---|
date | Tue, 21 Nov 2023 10:32:42 +0100 |
parents | c65e036d649b |
children | 59e3b6f8c5be |
rev | line source |
---|---|
751
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Orthanc - A Lightweight, RESTful DICOM Store |
1900 | 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
1288
6e7e5ed91c2d
upgrade to year 2015
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1121
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
5185
0ea402b4d901
upgrade to year 2023
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5169
diff
changeset
|
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium |
0ea402b4d901
upgrade to year 2023
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5169
diff
changeset
|
6 * Copyright (C) 2021-2023 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
751
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 * This program is free software: you can redistribute it and/or |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * modify it under the terms of the GNU General Public License as |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * published by the Free Software Foundation, either version 3 of the |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * License, or (at your option) any later version. |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, but |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 * WITHOUT ANY WARRANTY; without even the implied warranty of |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 * General Public License for more details. |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 **/ |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 |
831
84513f2ee1f3
pch for unit tests and server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
824
diff
changeset
|
23 #include "../PrecompiledHeadersServer.h" |
751
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 #include "OrthancRestApi.h" |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
26 #include "../../../OrthancFramework/Sources/Compression/ZipWriter.h" |
4045 | 27 #include "../../../OrthancFramework/Sources/HttpServer/FilesystemHttpSender.h" |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
28 #include "../../../OrthancFramework/Sources/Logging.h" |
4045 | 29 #include "../../../OrthancFramework/Sources/OrthancException.h" |
30 #include "../../../OrthancFramework/Sources/SerializationToolbox.h" | |
3181
6fd38327e777
Fix issue #130 (Orthanc failed to start when /tmp partition was full)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3161
diff
changeset
|
31 #include "../OrthancConfiguration.h" |
3095
beeeb6096f27
removing dependencies upon ServerContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
32 #include "../ServerContext.h" |
2632 | 33 #include "../ServerJobs/ArchiveJob.h" |
751
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
34 |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
35 #include <boost/filesystem/fstream.hpp> |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
36 |
3095
beeeb6096f27
removing dependencies upon ServerContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3060
diff
changeset
|
37 |
751
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 namespace Orthanc |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
39 { |
2966 | 40 static const char* const KEY_RESOURCES = "Resources"; |
41 static const char* const KEY_EXTENDED = "Extended"; | |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
42 static const char* const KEY_TRANSCODE = "Transcode"; |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
43 |
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
44 static const char* const CONFIG_LOADER_THREADS = "ZipLoaderThreads"; |
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
45 |
2966 | 46 static void AddResourcesOfInterestFromArray(ArchiveJob& job, |
47 const Json::Value& resources) | |
1774
784a6b92d2f1
start of refactoring the creation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1623
diff
changeset
|
48 { |
2966 | 49 if (resources.type() != Json::arrayValue) |
1774
784a6b92d2f1
start of refactoring the creation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1623
diff
changeset
|
50 { |
2966 | 51 throw OrthancException(ErrorCode_BadFileFormat, |
52 "Expected a list of strings (Orthanc identifiers)"); | |
53 } | |
54 | |
55 for (Json::Value::ArrayIndex i = 0; i < resources.size(); i++) | |
56 { | |
57 if (resources[i].type() != Json::stringValue) | |
1774
784a6b92d2f1
start of refactoring the creation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1623
diff
changeset
|
58 { |
2966 | 59 throw OrthancException(ErrorCode_BadFileFormat, |
60 "Expected a list of strings (Orthanc identifiers)"); | |
61 } | |
62 else | |
63 { | |
5169
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
64 job.AddResource(resources[i].asString(), false, ResourceType_Patient /* dummy value */); |
1774
784a6b92d2f1
start of refactoring the creation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1623
diff
changeset
|
65 } |
2966 | 66 } |
67 } | |
1774
784a6b92d2f1
start of refactoring the creation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1623
diff
changeset
|
68 |
2966 | 69 |
70 static void AddResourcesOfInterest(ArchiveJob& job /* inout */, | |
71 const Json::Value& body /* in */) | |
72 { | |
73 if (body.type() == Json::arrayValue) | |
74 { | |
75 AddResourcesOfInterestFromArray(job, body); | |
76 } | |
77 else if (body.type() == Json::objectValue) | |
78 { | |
79 if (body.isMember(KEY_RESOURCES)) | |
80 { | |
81 AddResourcesOfInterestFromArray(job, body[KEY_RESOURCES]); | |
82 } | |
83 else | |
84 { | |
85 throw OrthancException(ErrorCode_BadFileFormat, | |
86 "Missing field " + std::string(KEY_RESOURCES) + | |
87 " in the JSON body"); | |
88 } | |
1778
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
89 } |
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
90 else |
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
91 { |
2966 | 92 throw OrthancException(ErrorCode_BadFileFormat); |
93 } | |
94 } | |
95 | |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
96 |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
97 static void GetJobParameters(bool& synchronous, /* out */ |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
98 bool& extended, /* out */ |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
99 bool& transcode, /* out */ |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
100 DicomTransferSyntax& syntax, /* out */ |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
101 int& priority, /* out */ |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
102 unsigned int& loaderThreads, /* out */ |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
103 const Json::Value& body, /* in */ |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
104 const bool defaultExtended /* in */) |
2966 | 105 { |
106 synchronous = OrthancRestApi::IsSynchronousJobRequest | |
107 (true /* synchronous by default */, body); | |
108 | |
2970
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
109 priority = OrthancRestApi::GetJobRequestPriority(body); |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
110 |
2966 | 111 if (body.type() == Json::objectValue && |
112 body.isMember(KEY_EXTENDED)) | |
113 { | |
114 extended = SerializationToolbox::ReadBoolean(body, KEY_EXTENDED); | |
115 } | |
116 else | |
117 { | |
118 extended = defaultExtended; | |
1778
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
119 } |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
120 |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
121 if (body.type() == Json::objectValue && |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
122 body.isMember(KEY_TRANSCODE)) |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
123 { |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
124 transcode = true; |
5426
c65e036d649b
StorageCache is now storing transcoded instances + added ?transcode=... option to the /file route.
Alain Mazy <am@osimis.io>
parents:
5403
diff
changeset
|
125 syntax = Orthanc::GetTransferSyntax(SerializationToolbox::ReadString(body, KEY_TRANSCODE)); |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
126 } |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
127 else |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
128 { |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
129 transcode = false; |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
130 } |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
131 |
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
132 { |
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
133 OrthancConfiguration::ReaderLock lock; |
4902
df86d2505df8
Orthanc 1.9.8 is now known as Orthanc 1.10.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4892
diff
changeset
|
134 loaderThreads = lock.GetConfiguration().GetUnsignedIntegerParameter(CONFIG_LOADER_THREADS, 0); // New in Orthanc 1.10.0 |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
135 } |
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
136 |
1778
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
137 } |
1774
784a6b92d2f1
start of refactoring the creation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1623
diff
changeset
|
138 |
1778
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
139 |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
140 namespace |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
141 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
142 class SynchronousZipChunk : public IDynamicObject |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
143 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
144 private: |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
145 std::string chunk_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
146 bool done_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
147 |
4690 | 148 explicit SynchronousZipChunk(bool done) : |
149 done_(done) | |
150 { | |
151 } | |
152 | |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
153 public: |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
154 static SynchronousZipChunk* CreateDone() |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
155 { |
4690 | 156 return new SynchronousZipChunk(true); |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
157 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
158 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
159 static SynchronousZipChunk* CreateChunk(const std::string& chunk) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
160 { |
4690 | 161 std::unique_ptr<SynchronousZipChunk> item(new SynchronousZipChunk(false)); |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
162 item->chunk_ = chunk; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
163 return item.release(); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
164 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
165 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
166 bool IsDone() const |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
167 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
168 return done_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
169 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
170 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
171 void SwapString(std::string& target) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
172 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
173 if (done_) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
174 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
175 throw OrthancException(ErrorCode_BadSequenceOfCalls); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
176 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
177 else |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
178 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
179 target.swap(chunk_); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
180 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
181 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
182 }; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
183 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
184 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
185 class SynchronousZipStream : public ZipWriter::IOutputStream |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
186 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
187 private: |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
188 boost::shared_ptr<SharedMessageQueue> queue_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
189 uint64_t archiveSize_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
190 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
191 public: |
4690 | 192 explicit SynchronousZipStream(const boost::shared_ptr<SharedMessageQueue>& queue) : |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
193 queue_(queue), |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
194 archiveSize_(0) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
195 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
196 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
197 |
4690 | 198 virtual uint64_t GetArchiveSize() const ORTHANC_OVERRIDE |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
199 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
200 return archiveSize_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
201 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
202 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
203 virtual void Write(const std::string& chunk) ORTHANC_OVERRIDE |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
204 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
205 if (queue_.unique()) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
206 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
207 throw OrthancException(ErrorCode_NetworkProtocol, |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
208 "HTTP client has disconnected while creating an archive in synchronous mode"); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
209 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
210 else |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
211 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
212 queue_->Enqueue(SynchronousZipChunk::CreateChunk(chunk)); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
213 archiveSize_ += chunk.size(); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
214 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
215 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
216 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
217 virtual void Close() ORTHANC_OVERRIDE |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
218 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
219 queue_->Enqueue(SynchronousZipChunk::CreateDone()); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
220 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
221 }; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
222 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
223 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
224 class SynchronousZipSender : public IHttpStreamAnswer |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
225 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
226 private: |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
227 ServerContext& context_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
228 std::string jobId_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
229 boost::shared_ptr<SharedMessageQueue> queue_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
230 std::string filename_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
231 bool done_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
232 std::string chunk_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
233 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
234 public: |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
235 SynchronousZipSender(ServerContext& context, |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
236 const std::string& jobId, |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
237 const boost::shared_ptr<SharedMessageQueue>& queue, |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
238 const std::string& filename) : |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
239 context_(context), |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
240 jobId_(jobId), |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
241 queue_(queue), |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
242 filename_(filename), |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
243 done_(false) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
244 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
245 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
246 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
247 virtual HttpCompression SetupHttpCompression(bool gzipAllowed, |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
248 bool deflateAllowed) ORTHANC_OVERRIDE |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
249 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
250 // This function is not called by HttpOutput::AnswerWithoutBuffering() |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
251 throw OrthancException(ErrorCode_InternalError); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
252 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
253 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
254 virtual bool HasContentFilename(std::string& filename) ORTHANC_OVERRIDE |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
255 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
256 filename = filename_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
257 return true; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
258 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
259 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
260 virtual std::string GetContentType() ORTHANC_OVERRIDE |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
261 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
262 return EnumerationToString(MimeType_Zip); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
263 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
264 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
265 virtual uint64_t GetContentLength() ORTHANC_OVERRIDE |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
266 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
267 throw OrthancException(ErrorCode_InternalError); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
268 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
269 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
270 virtual bool ReadNextChunk() ORTHANC_OVERRIDE |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
271 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
272 for (;;) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
273 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
274 std::unique_ptr<IDynamicObject> obj(queue_->Dequeue(100)); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
275 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
276 if (obj.get() == NULL) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
277 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
278 // Check that the job is still active, which indicates |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
279 // that more data might still be returned |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
280 JobState state; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
281 if (context_.GetJobsEngine().GetRegistry().GetState(state, jobId_) && |
4690 | 282 (state == JobState_Pending || |
283 state == JobState_Running || | |
284 state == JobState_Success)) | |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
285 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
286 continue; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
287 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
288 else |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
289 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
290 return false; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
291 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
292 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
293 else |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
294 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
295 SynchronousZipChunk& item = dynamic_cast<SynchronousZipChunk&>(*obj); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
296 if (item.IsDone()) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
297 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
298 done_ = true; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
299 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
300 else |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
301 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
302 item.SwapString(chunk_); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
303 done_ = false; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
304 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
305 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
306 return !done_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
307 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
308 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
309 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
310 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
311 virtual const char* GetChunkContent() ORTHANC_OVERRIDE |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
312 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
313 if (done_) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
314 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
315 throw OrthancException(ErrorCode_InternalError); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
316 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
317 else |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
318 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
319 return (chunk_.empty() ? NULL : chunk_.c_str()); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
320 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
321 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
322 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
323 virtual size_t GetChunkSize() ORTHANC_OVERRIDE |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
324 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
325 if (done_) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
326 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
327 throw OrthancException(ErrorCode_InternalError); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
328 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
329 else |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
330 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
331 return chunk_.size(); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
332 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
333 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
334 }; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
335 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
336 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
337 class SynchronousTemporaryStream : public ZipWriter::IOutputStream |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
338 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
339 private: |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
340 boost::shared_ptr<TemporaryFile> temp_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
341 boost::filesystem::ofstream file_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
342 uint64_t archiveSize_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
343 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
344 public: |
4690 | 345 explicit SynchronousTemporaryStream(const boost::shared_ptr<TemporaryFile>& temp) : |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
346 temp_(temp), |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
347 archiveSize_(0) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
348 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
349 file_.open(temp_->GetPath(), std::ofstream::out | std::ofstream::binary); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
350 if (!file_.good()) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
351 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
352 throw OrthancException(ErrorCode_CannotWriteFile); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
353 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
354 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
355 |
4690 | 356 virtual uint64_t GetArchiveSize() const ORTHANC_OVERRIDE |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
357 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
358 return archiveSize_; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
359 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
360 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
361 virtual void Write(const std::string& chunk) ORTHANC_OVERRIDE |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
362 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
363 if (!chunk.empty()) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
364 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
365 try |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
366 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
367 file_.write(chunk.c_str(), chunk.size()); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
368 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
369 if (!file_.good()) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
370 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
371 file_.close(); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
372 throw OrthancException(ErrorCode_CannotWriteFile); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
373 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
374 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
375 catch (boost::filesystem::filesystem_error&) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
376 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
377 throw OrthancException(ErrorCode_CannotWriteFile); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
378 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
379 catch (...) // To catch "std::system_error&" in C++11 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
380 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
381 throw OrthancException(ErrorCode_CannotWriteFile); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
382 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
383 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
384 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
385 archiveSize_ += chunk.size(); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
386 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
387 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
388 virtual void Close() ORTHANC_OVERRIDE |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
389 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
390 try |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
391 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
392 file_.close(); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
393 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
394 catch (boost::filesystem::filesystem_error&) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
395 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
396 throw OrthancException(ErrorCode_CannotWriteFile); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
397 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
398 catch (...) // To catch "std::system_error&" in C++11 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
399 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
400 throw OrthancException(ErrorCode_CannotWriteFile); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
401 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
402 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
403 }; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
404 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
405 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
406 |
2969
2c16c29b287d
preparing for asynchronous generation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
407 static void SubmitJob(RestApiOutput& output, |
2630
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
408 ServerContext& context, |
3712
2a170a8f1faf
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3640
diff
changeset
|
409 std::unique_ptr<ArchiveJob>& job, |
2970
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
410 int priority, |
2969
2c16c29b287d
preparing for asynchronous generation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
411 bool synchronous, |
2630
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
412 const std::string& filename) |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
413 { |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
414 if (job.get() == NULL) |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
415 { |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
416 throw OrthancException(ErrorCode_NullPointer); |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
417 } |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
418 |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
419 job->SetDescription("REST API"); |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
420 |
2969
2c16c29b287d
preparing for asynchronous generation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
421 if (synchronous) |
2630
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
422 { |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
423 bool streaming; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
424 |
3181
6fd38327e777
Fix issue #130 (Orthanc failed to start when /tmp partition was full)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3161
diff
changeset
|
425 { |
6fd38327e777
Fix issue #130 (Orthanc failed to start when /tmp partition was full)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3161
diff
changeset
|
426 OrthancConfiguration::ReaderLock lock; |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
427 streaming = lock.GetConfiguration().GetBooleanParameter("SynchronousZipStream", true); // New in Orthanc 1.9.4 |
3181
6fd38327e777
Fix issue #130 (Orthanc failed to start when /tmp partition was full)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3161
diff
changeset
|
428 } |
6fd38327e777
Fix issue #130 (Orthanc failed to start when /tmp partition was full)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3161
diff
changeset
|
429 |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
430 if (streaming) |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
431 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
432 LOG(INFO) << "Streaming a ZIP archive"; |
5116 | 433 boost::shared_ptr<SharedMessageQueue> queue(new SharedMessageQueue); |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
434 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
435 job->AcquireSynchronousTarget(new SynchronousZipStream(queue)); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
436 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
437 std::string jobId; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
438 context.GetJobsEngine().GetRegistry().Submit(jobId, job.release(), priority); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
439 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
440 SynchronousZipSender sender(context, jobId, queue, filename); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
441 output.AnswerWithoutBuffering(sender); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
442 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
443 // If we reach this line, this means that |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
444 // "SynchronousZipSender::ReadNextChunk()" has returned "false" |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
445 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
446 else |
2969
2c16c29b287d
preparing for asynchronous generation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
447 { |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
448 // This was the only behavior in Orthanc <= 1.9.3 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
449 LOG(INFO) << "Not streaming a ZIP archive (use of a temporary file)"; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
450 boost::shared_ptr<TemporaryFile> tmp; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
451 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
452 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
453 OrthancConfiguration::ReaderLock lock; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
454 tmp.reset(lock.GetConfiguration().CreateTemporaryFile()); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
455 } |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
456 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
457 job->AcquireSynchronousTarget(new SynchronousTemporaryStream(tmp)); |
2630
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
458 |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
459 Json::Value publicContent; |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
460 context.GetJobsEngine().GetRegistry().SubmitAndWait |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
461 (publicContent, job.release(), priority); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
462 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
463 { |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
464 // The archive is now created: Prepare the sending of the ZIP file |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
465 FilesystemHttpSender sender(tmp->GetPath(), MimeType_Zip); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
466 sender.SetContentFilename(filename); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
467 |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
468 // Send the ZIP |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
469 output.AnswerStream(sender); |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
470 } |
2969
2c16c29b287d
preparing for asynchronous generation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
471 } |
2630
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
472 } |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
473 else |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
474 { |
2976
cb5d75143da0
Asynchronous generation of ZIP archives and DICOM medias
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2970
diff
changeset
|
475 OrthancRestApi::SubmitGenericJob(output, context, job.release(), false, priority); |
2969
2c16c29b287d
preparing for asynchronous generation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2966
diff
changeset
|
476 } |
2630
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
477 } |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
478 |
4416
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
479 |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
480 static void DocumentPostArguments(RestApiPostCall& call, |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
481 bool isMedia, |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
482 bool defaultExtended) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
483 { |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
484 call.GetDocumentation() |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
485 .SetRequestField("Synchronous", RestApiCallDocumentation::Type_Boolean, |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
486 "If `true`, create the archive in synchronous mode, which means that the HTTP answer will directly " |
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
487 "contain the ZIP file. This is the default, easy behavior. However, if global configuration option " |
4751 | 488 "\"SynchronousZipStream\" is set to \"false\", asynchronous transfers should be preferred for " |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
489 "large amount of data, as the creation of the temporary file might lead to network timeouts.", false) |
4416
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
490 .SetRequestField("Asynchronous", RestApiCallDocumentation::Type_Boolean, |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
491 "If `true`, create the archive in asynchronous mode, which means that a job is submitted to create " |
4674
cdab941fe17d
ZIP archive/media generated in synchronous mode are now streamed by default
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4437
diff
changeset
|
492 "the archive in background.", false) |
4416
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
493 .SetRequestField(KEY_TRANSCODE, RestApiCallDocumentation::Type_String, |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
494 "If present, the DICOM files in the archive will be transcoded to the provided " |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
495 "transfer syntax: https://book.orthanc-server.com/faq/transcoding.html", false) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
496 .SetRequestField("Priority", RestApiCallDocumentation::Type_Number, |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
497 "In asynchronous mode, the priority of the job. The lower the value, the higher the priority.", false) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
498 .AddAnswerType(MimeType_Zip, "In synchronous mode, the ZIP file containing the archive") |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
499 .AddAnswerType(MimeType_Json, "In asynchronous mode, information about the job that has been submitted to " |
4417
a4518adede59
openapi for plugins and jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4416
diff
changeset
|
500 "generate the archive: https://book.orthanc-server.com/users/advanced-rest.html#jobs") |
a4518adede59
openapi for plugins and jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4416
diff
changeset
|
501 .SetAnswerField("ID", RestApiCallDocumentation::Type_String, "Identifier of the job") |
a4518adede59
openapi for plugins and jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4416
diff
changeset
|
502 .SetAnswerField("Path", RestApiCallDocumentation::Type_String, "Path to access the job in the REST API"); |
4416
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
503 |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
504 if (isMedia) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
505 { |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
506 call.GetDocumentation().SetRequestField( |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
507 KEY_EXTENDED, RestApiCallDocumentation::Type_Boolean, "If `true`, will include additional " |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
508 "tags such as `SeriesDescription`, leading to a so-called *extended DICOMDIR*. Default value is " + |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
509 std::string(defaultExtended ? "`true`" : "`false`") + ".", false); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
510 } |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
511 } |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
512 |
2630
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
513 |
2970
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
514 template <bool IS_MEDIA, |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
515 bool DEFAULT_IS_EXTENDED /* only makes sense for media (i.e. not ZIP archives) */ > |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
516 static void CreateBatch(RestApiPostCall& call) |
1778
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
517 { |
4416
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
518 if (call.IsDocumentation()) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
519 { |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
520 DocumentPostArguments(call, IS_MEDIA, DEFAULT_IS_EXTENDED); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
521 std::string m = (IS_MEDIA ? "DICOMDIR media" : "ZIP archive"); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
522 call.GetDocumentation() |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
523 .SetTag("System") |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
524 .SetSummary("Create " + m) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
525 .SetDescription("Create a " + m + " containing the DICOM resources (patients, studies, series, or instances) " |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
526 "whose Orthanc identifiers are provided in the body") |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
527 .SetRequestField("Resources", RestApiCallDocumentation::Type_JsonListOfStrings, |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
528 "The list of Orthanc identifiers of interest.", false); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
529 return; |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
530 } |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
531 |
2630
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
532 ServerContext& context = OrthancRestApi::GetContext(call); |
1774
784a6b92d2f1
start of refactoring the creation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1623
diff
changeset
|
533 |
2966 | 534 Json::Value body; |
535 if (call.ParseJsonRequest(body)) | |
1778
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
536 { |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
537 bool synchronous, extended, transcode; |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
538 DicomTransferSyntax transferSyntax; |
2970
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
539 int priority; |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
540 unsigned int loaderThreads; |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
541 GetJobParameters(synchronous, extended, transcode, transferSyntax, |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
542 priority, loaderThreads, body, DEFAULT_IS_EXTENDED); |
2966 | 543 |
5401
fc604681e6be
When exporting a study archive, make sure to use the PatientName from the study and not from the patient in case of PatientID collision
Alain Mazy <am@osimis.io>
parents:
5185
diff
changeset
|
544 std::unique_ptr<ArchiveJob> job(new ArchiveJob(context, IS_MEDIA, extended, ResourceType_Patient)); |
2966 | 545 AddResourcesOfInterest(*job, body); |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
546 |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
547 if (transcode) |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
548 { |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
549 job->SetTranscode(transferSyntax); |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
550 } |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
551 |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
552 job->SetLoaderThreads(loaderThreads); |
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
553 |
2970
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
554 SubmitJob(call.GetOutput(), context, job, priority, synchronous, "Archive.zip"); |
2966 | 555 } |
556 else | |
557 { | |
558 throw OrthancException(ErrorCode_BadFileFormat, | |
559 "Expected a list of resources to archive in the body"); | |
1774
784a6b92d2f1
start of refactoring the creation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1623
diff
changeset
|
560 } |
2630
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
561 } |
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
562 |
1774
784a6b92d2f1
start of refactoring the creation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1623
diff
changeset
|
563 |
5169
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
564 template <ResourceType LEVEL, |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
565 bool IS_MEDIA> |
2970
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
566 static void CreateSingleGet(RestApiGetCall& call) |
1778
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
567 { |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
568 static const char* const TRANSCODE = "transcode"; |
4987
48b53ac404d9
New option "filename" in "/.../{id}/archive" and "/.../{id}/media"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4902
diff
changeset
|
569 static const char* const FILENAME = "filename"; |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
570 |
4416
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
571 if (call.IsDocumentation()) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
572 { |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
573 ResourceType t = StringToResourceType(call.GetFullUri()[0].c_str()); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
574 std::string r = GetResourceTypeText(t, false /* plural */, false /* upper case */); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
575 std::string m = (IS_MEDIA ? "DICOMDIR media" : "ZIP archive"); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
576 call.GetDocumentation() |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
577 .SetTag(GetResourceTypeText(t, true /* plural */, true /* upper case */)) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
578 .SetSummary("Create " + m) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
579 .SetDescription("Synchronously create a " + m + " containing the DICOM " + r + |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
580 " whose Orthanc identifier is provided in the URL. This flavor is synchronous, " |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
581 "which might *not* be desirable to archive large amount of data, as it might " |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
582 "lead to network timeouts. Prefer the asynchronous version using `POST` method.") |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
583 .SetUriArgument("id", "Orthanc identifier of the " + r + " of interest") |
4987
48b53ac404d9
New option "filename" in "/.../{id}/archive" and "/.../{id}/media"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4902
diff
changeset
|
584 .SetHttpGetArgument(FILENAME, RestApiCallDocumentation::Type_String, |
48b53ac404d9
New option "filename" in "/.../{id}/archive" and "/.../{id}/media"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4902
diff
changeset
|
585 "Filename to set in the \"Content-Disposition\" HTTP header " |
48b53ac404d9
New option "filename" in "/.../{id}/archive" and "/.../{id}/media"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4902
diff
changeset
|
586 "(including file extension)", false) |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
587 .SetHttpGetArgument(TRANSCODE, RestApiCallDocumentation::Type_String, |
4416
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
588 "If present, the DICOM files in the archive will be transcoded to the provided " |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
589 "transfer syntax: https://book.orthanc-server.com/faq/transcoding.html", false) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
590 .AddAnswerType(MimeType_Zip, "ZIP file containing the archive"); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
591 if (IS_MEDIA) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
592 { |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
593 call.GetDocumentation().SetHttpGetArgument( |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
594 "extended", RestApiCallDocumentation::Type_String, |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
595 "If present, will include additional tags such as `SeriesDescription`, leading to a so-called *extended DICOMDIR*", false); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
596 } |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
597 return; |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
598 } |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
599 |
2630
00327e989458
creating archives/medias is now a job
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2629
diff
changeset
|
600 ServerContext& context = OrthancRestApi::GetContext(call); |
1778
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
601 |
4987
48b53ac404d9
New option "filename" in "/.../{id}/archive" and "/.../{id}/media"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4902
diff
changeset
|
602 const std::string id = call.GetUriComponent("id", ""); |
48b53ac404d9
New option "filename" in "/.../{id}/archive" and "/.../{id}/media"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4902
diff
changeset
|
603 const std::string filename = call.GetArgument(FILENAME, id + ".zip"); // New in Orthanc 1.11.0 |
1778
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
604 |
2970
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
605 bool extended; |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
606 if (IS_MEDIA) |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
607 { |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
608 extended = call.HasArgument("extended"); |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
609 } |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
610 else |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
611 { |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
612 extended = false; |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
613 } |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
614 |
5403
05cb668c5f3f
fix to keep backward behaviour when exporting a series archive
Alain Mazy <am@osimis.io>
parents:
5401
diff
changeset
|
615 std::unique_ptr<ArchiveJob> job(new ArchiveJob(context, IS_MEDIA, extended, (LEVEL == ResourceType_Patient ? ResourceType_Patient : ResourceType_Study))); // use patient info from study except when exporting a patient |
5169
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
616 job->AddResource(id, true, LEVEL); |
1778
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
617 |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
618 if (call.HasArgument(TRANSCODE)) |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
619 { |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
620 job->SetTranscode(GetTransferSyntax(call.GetArgument(TRANSCODE, ""))); |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
621 } |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
622 |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
623 { |
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
624 OrthancConfiguration::ReaderLock lock; |
4902
df86d2505df8
Orthanc 1.9.8 is now known as Orthanc 1.10.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4892
diff
changeset
|
625 unsigned int loaderThreads = lock.GetConfiguration().GetUnsignedIntegerParameter(CONFIG_LOADER_THREADS, 0); // New in Orthanc 1.10.0 |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
626 job->SetLoaderThreads(loaderThreads); |
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
627 } |
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
628 |
2970
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
629 SubmitJob(call.GetOutput(), context, job, 0 /* priority */, |
4987
48b53ac404d9
New option "filename" in "/.../{id}/archive" and "/.../{id}/media"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4902
diff
changeset
|
630 true /* synchronous */, filename); |
1778
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
631 } |
776573e592da
create media refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1777
diff
changeset
|
632 |
1774
784a6b92d2f1
start of refactoring the creation of archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1623
diff
changeset
|
633 |
5169
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
634 template <ResourceType LEVEL, |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
635 bool IS_MEDIA> |
2978 | 636 static void CreateSinglePost(RestApiPostCall& call) |
637 { | |
4416
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
638 if (call.IsDocumentation()) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
639 { |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
640 DocumentPostArguments(call, IS_MEDIA, false /* not extended by default */); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
641 ResourceType t = StringToResourceType(call.GetFullUri()[0].c_str()); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
642 std::string r = GetResourceTypeText(t, false /* plural */, false /* upper case */); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
643 std::string m = (IS_MEDIA ? "DICOMDIR media" : "ZIP archive"); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
644 call.GetDocumentation() |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
645 .SetTag(GetResourceTypeText(t, true /* plural */, true /* upper case */)) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
646 .SetSummary("Create " + m) |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
647 .SetDescription("Create a " + m + " containing the DICOM " + r + |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
648 " whose Orthanc identifier is provided in the URL") |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
649 .SetUriArgument("id", "Orthanc identifier of the " + r + " of interest"); |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
650 return; |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
651 } |
0b27841950d5
openapi about creation of zip/media archives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4045
diff
changeset
|
652 |
2978 | 653 ServerContext& context = OrthancRestApi::GetContext(call); |
654 | |
655 std::string id = call.GetUriComponent("id", ""); | |
656 | |
657 Json::Value body; | |
658 if (call.ParseJsonRequest(body)) | |
659 { | |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
660 bool synchronous, extended, transcode; |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
661 DicomTransferSyntax transferSyntax; |
2978 | 662 int priority; |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
663 unsigned int loaderThreads; |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
664 GetJobParameters(synchronous, extended, transcode, transferSyntax, |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
665 priority, loaderThreads, body, false /* by default, not extented */); |
2978 | 666 |
5401
fc604681e6be
When exporting a study archive, make sure to use the PatientName from the study and not from the patient in case of PatientID collision
Alain Mazy <am@osimis.io>
parents:
5185
diff
changeset
|
667 std::unique_ptr<ArchiveJob> job(new ArchiveJob(context, IS_MEDIA, extended, LEVEL)); |
5169
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
668 job->AddResource(id, true, LEVEL); |
3913
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
669 |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
670 if (transcode) |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
671 { |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
672 job->SetTranscode(transferSyntax); |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
673 } |
6ddad3e0b569
transcoding ZIP archive and media
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3712
diff
changeset
|
674 |
4797
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
675 job->SetLoaderThreads(loaderThreads); |
4e765c18ace7
enable using multiple threads to load instances when generating zip archive/media
Alain Mazy <am@osimis.io>
parents:
4751
diff
changeset
|
676 |
2978 | 677 SubmitJob(call.GetOutput(), context, job, priority, synchronous, id + ".zip"); |
678 } | |
679 else | |
680 { | |
681 throw OrthancException(ErrorCode_BadFileFormat); | |
682 } | |
683 } | |
684 | |
685 | |
751
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
686 void OrthancRestApi::RegisterArchive() |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
687 { |
5169
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
688 Register("/patients/{id}/archive", CreateSingleGet<ResourceType_Patient, false /* ZIP */>); |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
689 Register("/patients/{id}/archive", CreateSinglePost<ResourceType_Patient, false /* ZIP */>); |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
690 Register("/patients/{id}/media", CreateSingleGet<ResourceType_Patient, true /* media */>); |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
691 Register("/patients/{id}/media", CreateSinglePost<ResourceType_Patient, true /* media */>); |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
692 Register("/series/{id}/archive", CreateSingleGet<ResourceType_Series, false /* ZIP */>); |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
693 Register("/series/{id}/archive", CreateSinglePost<ResourceType_Series, false /* ZIP */>); |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
694 Register("/series/{id}/media", CreateSingleGet<ResourceType_Series, true /* media */>); |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
695 Register("/series/{id}/media", CreateSinglePost<ResourceType_Series, true /* media */>); |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
696 Register("/studies/{id}/archive", CreateSingleGet<ResourceType_Study, false /* ZIP */>); |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
697 Register("/studies/{id}/archive", CreateSinglePost<ResourceType_Study, false /* ZIP */>); |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
698 Register("/studies/{id}/media", CreateSingleGet<ResourceType_Study, true /* media */>); |
8b74aa4f3515
enforce the existence of the patient/study/instance while creating its archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5116
diff
changeset
|
699 Register("/studies/{id}/media", CreateSinglePost<ResourceType_Study, true /* media */>); |
2978 | 700 |
2970
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
701 Register("/tools/create-archive", |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
702 CreateBatch<false /* ZIP */, false /* extended makes no sense in ZIP */>); |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
703 Register("/tools/create-media", |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
704 CreateBatch<true /* media */, false /* not extended by default */>); |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
705 Register("/tools/create-media-extended", |
eea66afed0db
remove redundancies
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2969
diff
changeset
|
706 CreateBatch<true /* media */, true /* extended by default */>); |
751
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
707 } |
5197fd35333c
refactoring of OrthancRestApi
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
708 } |