comparison OrthancExplorer/query-retrieve.js @ 2119:e0517f25919e

Improved robustness of Orthanc Explorer wrt. query/retrieve (maybe fix issue #24)
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sun, 06 Nov 2016 11:39:04 +0100
parents aaf368280f5a
children 3eefb84ac0bd
comparison
equal deleted inserted replaced
2118:9cf176bc21ad 2119:e0517f25919e
115 async: false, 115 async: false,
116 error: function() { 116 error: function() {
117 alert('Error during query (C-Find)'); 117 alert('Error during query (C-Find)');
118 }, 118 },
119 success: function(result) { 119 success: function(result) {
120 window.location.assign('explorer.html#query-retrieve-2?server=' + server + '&uuid=' + result['ID']); 120 ChangePage('query-retrieve-2', {
121 'server' : server,
122 'uuid' : result['ID']
123 });
121 } 124 }
122 }); 125 });
123 126
124 return false; 127 return false;
125 }); 128 });
126
127
128
129 function Retrieve(url)
130 {
131 $.ajax({
132 url: '../system',
133 dataType: 'json',
134 async: false,
135 success: function(system) {
136 $('<div>').simpledialog2({
137 mode: 'button',
138 headerText: 'Target',
139 headerClose: true,
140 buttonPrompt: 'Enter Application Entity Title (AET):',
141 buttonInput: true,
142 buttonInputDefault: system['DicomAet'],
143 buttons : {
144 'OK': {
145 click: function () {
146 var aet = $.mobile.sdLastInput;
147 if (aet.length == 0)
148 aet = system['DicomAet'];
149
150 $.ajax({
151 url: url,
152 type: 'POST',
153 async: true, // Necessary to block UI
154 dataType: 'text',
155 data: aet,
156 beforeSend: function() {
157 $.blockUI({ message: $('#info-retrieve') });
158 },
159 complete: function(s) {
160 $.unblockUI();
161 },
162 error: function() {
163 alert('Error during retrieve');
164 }
165 });
166 }
167 }
168 }
169 });
170 }
171 });
172 }
173
174 129
175 130
176 131
177 $('#query-retrieve-2').live('pagebeforeshow', function() { 132 $('#query-retrieve-2').live('pagebeforeshow', function() {
178 if ($.mobile.pageData) { 133 if ($.mobile.pageData) {
179 var uri = '../queries/' + $.mobile.pageData.uuid + '/answers'; 134 var pageData = DeepCopy($.mobile.pageData);
135
136 var uri = '../queries/' + pageData.uuid + '/answers';
180 137
181 $.ajax({ 138 $.ajax({
182 url: uri, 139 url: uri,
183 dataType: 'json', 140 dataType: 'json',
184 async: false, 141 async: false,
190 $.ajax({ 147 $.ajax({
191 url: uri + '/' + answers[i] + '/content?simplify', 148 url: uri + '/' + answers[i] + '/content?simplify',
192 dataType: 'json', 149 dataType: 'json',
193 async: false, 150 async: false,
194 success: function(study) { 151 success: function(study) {
195 var series = '#query-retrieve-3?server=' + $.mobile.pageData.server + '&uuid=' + study['StudyInstanceUID']; 152 var series = '#query-retrieve-3?server=' + pageData.server + '&uuid=' + study['StudyInstanceUID'];
196 var info = $('<a>').attr('href', series).html( 153 var info = $('<a>').attr('href', series).html(
197 ('<h3>{0} - {1}</h3>' + 154 ('<h3>{0} - {1}</h3>' +
198 '<p>Accession number: <b>{2}</b></p>' + 155 '<p>Accession number: <b>{2}</b></p>' +
199 '<p>Birth date: <b>{3}</b></p>' + 156 '<p>Birth date: <b>{3}</b></p>' +
200 '<p>Patient sex: <b>{4}</b></p>' + 157 '<p>Patient sex: <b>{4}</b></p>' +
206 FormatDicomDate(study['PatientBirthDate']), 163 FormatDicomDate(study['PatientBirthDate']),
207 study['PatientSex'], 164 study['PatientSex'],
208 study['StudyDescription'], 165 study['StudyDescription'],
209 FormatDicomDate(study['StudyDate']))); 166 FormatDicomDate(study['StudyDate'])));
210 167
211 var studyUri = uri + '/' + answers[i] + '/retrieve'; 168 var answerId = answers[i];
212 var retrieve = $('<a>').text('Retrieve').click(function() { 169 var retrieve = $('<a>').text('Retrieve all study').click(function() {
213 Retrieve(studyUri); 170 ChangePage('query-retrieve-4', {
171 'query' : pageData.uuid,
172 'answer' : answerId,
173 'server' : pageData.server
174 });
214 }); 175 });
215 176
216 target.append($('<li>').append(info).append(retrieve)); 177 target.append($('<li>').append(info).append(retrieve));
217 } 178 }
218 }); 179 });
225 }); 186 });
226 187
227 188
228 $('#query-retrieve-3').live('pagebeforeshow', function() { 189 $('#query-retrieve-3').live('pagebeforeshow', function() {
229 if ($.mobile.pageData) { 190 if ($.mobile.pageData) {
191 var pageData = DeepCopy($.mobile.pageData);
192
230 var query = { 193 var query = {
231 'Level' : 'Series', 194 'Level' : 'Series',
232 'Query' : { 195 'Query' : {
233 'Modality' : '*', 196 'Modality' : '*',
234 'ProtocolName' : '*', 197 'ProtocolName' : '*',
235 'SeriesDescription' : '*', 198 'SeriesDescription' : '*',
236 'SeriesInstanceUID' : '*', 199 'SeriesInstanceUID' : '*',
237 'StudyInstanceUID' : $.mobile.pageData.uuid 200 'StudyInstanceUID' : pageData.uuid
238 } 201 }
239 }; 202 };
240 203
241 $.ajax({ 204 $.ajax({
242 url: '../modalities/' + $.mobile.pageData.server + '/query', 205 url: '../modalities/' + pageData.server + '/query',
243 type: 'POST', 206 type: 'POST',
244 data: JSON.stringify(query), 207 data: JSON.stringify(query),
245 dataType: 'json', 208 dataType: 'json',
246 async: false, 209 async: false,
247 error: function() { 210 error: function() {
248 alert('Error during query (C-Find)'); 211 alert('Error during query (C-Find)');
249 }, 212 },
250 success: function(answer) { 213 success: function(answer) {
214 var queryUuid = answer['ID'];
251 var uri = '../queries/' + answer['ID'] + '/answers'; 215 var uri = '../queries/' + answer['ID'] + '/answers';
252 216
253 $.ajax({ 217 $.ajax({
254 url: uri, 218 url: uri,
255 dataType: 'json', 219 dataType: 'json',
273 series['SeriesDescription'], 237 series['SeriesDescription'],
274 series['Modality'], 238 series['Modality'],
275 series['ProtocolName'] 239 series['ProtocolName']
276 )); 240 ));
277 241
278 var seriesUri = uri + '/' + answers[i] + '/retrieve'; 242 var answerId = answers[i];
279 var retrieve = $('<a>').text('Retrieve').click(function() { 243 info.click(function() {
280 Retrieve(seriesUri); 244 ChangePage('query-retrieve-4', {
245 'query' : queryUuid,
246 'study' : pageData.uuid,
247 'answer' : answerId,
248 'server' : pageData.server
249 });
281 }); 250 });
282 251
283 target.append($('<li>').append(info).append(retrieve)); 252 target.append($('<li>').attr('data-icon', 'arrow-d').append(info));
284 } 253 }
285 }); 254 });
286 } 255 }
287 256
288 target.listview('refresh'); 257 target.listview('refresh');
290 }); 259 });
291 } 260 }
292 }); 261 });
293 } 262 }
294 }); 263 });
264
265
266
267 $('#query-retrieve-4').live('pagebeforeshow', function() {
268 if ($.mobile.pageData) {
269 var pageData = DeepCopy($.mobile.pageData);
270 var uri = '../queries/' + pageData.query + '/answers/' + pageData.answer + '/retrieve';
271
272 $.ajax({
273 url: '../system',
274 dataType: 'json',
275 async: false,
276 cache: false,
277 success: function(system) {
278 $('#retrieve-target').val(system['DicomAet']);
279
280 $('#retrieve-form').submit(function(event) {
281 event.preventDefault();
282
283 var aet = $('#retrieve-target').val();
284 if (aet.length == 0) {
285 aet = system['DicomAet'];
286 }
287
288 $.ajax({
289 url: uri,
290 type: 'POST',
291 async: true, // Necessary to block UI
292 dataType: 'text',
293 data: aet,
294 beforeSend: function() {
295 $.blockUI({ message: $('#info-retrieve') });
296 },
297 complete: function(s) {
298 $.unblockUI();
299 },
300 success: function() {
301 if (pageData.study) {
302 // Go back to the list of series
303 ChangePage('query-retrieve-3', {
304 'server' : pageData.server,
305 'uuid' : pageData.study
306 });
307 } else {
308 // Go back to the list of studies
309 ChangePage('query-retrieve-2', {
310 'server' : pageData.server,
311 'uuid' : pageData.query
312 });
313 }
314 },
315 error: function() {
316 alert('Error during retrieve');
317 }
318 });
319 });
320 }
321 });
322 }
323 });