comparison Framework/Deprecated/Loaders/OrthancSeriesVolumeProgressiveLoader.cpp @ 1310:9bea7e15b519 broker

- first pass at changes to cope with the refactoring of the loading system - global loader-related data accessible through ILoadersContext::ILock - many changes in legacy loaders (CT, RTSTRUCT, DOSE) + loader cache - NOT FINISHED! there are shared_from_this calls in ctors! this will crash!
author Benjamin Golinvaux <bgo@osimis.io>
date Mon, 09 Mar 2020 14:53:22 +0100
parents 257f2c9a02ac
children 9b126de2cde2
comparison
equal deleted inserted replaced
1309:1f877e0846fe 1310:9bea7e15b519
19 **/ 19 **/
20 20
21 21
22 #include "OrthancSeriesVolumeProgressiveLoader.h" 22 #include "OrthancSeriesVolumeProgressiveLoader.h"
23 23
24 #include "../../Loaders/ILoadersContext.h"
24 #include "../../Loaders/BasicFetchingItemsSorter.h" 25 #include "../../Loaders/BasicFetchingItemsSorter.h"
25 #include "../../Loaders/BasicFetchingStrategy.h" 26 #include "../../Loaders/BasicFetchingStrategy.h"
26 #include "../../Toolbox/GeometryToolbox.h" 27 #include "../../Toolbox/GeometryToolbox.h"
27 #include "../../Volumes/DicomVolumeImageMPRSlicer.h" 28 #include "../../Volumes/DicomVolumeImageMPRSlicer.h"
28 29
29 #include <Core/Images/ImageProcessing.h> 30 #include <Core/Images/ImageProcessing.h>
30 #include <Core/OrthancException.h> 31 #include <Core/OrthancException.h>
31 32
32 namespace Deprecated 33 namespace Deprecated
33 { 34 {
35 using OrthancStone::ILoadersContext;
36
34 class OrthancSeriesVolumeProgressiveLoader::ExtractedSlice : public OrthancStone::DicomVolumeImageMPRSlicer::Slice 37 class OrthancSeriesVolumeProgressiveLoader::ExtractedSlice : public OrthancStone::DicomVolumeImageMPRSlicer::Slice
35 { 38 {
36 private: 39 private:
37 const OrthancSeriesVolumeProgressiveLoader& that_; 40 const OrthancSeriesVolumeProgressiveLoader& that_;
38 41
300 tmp->SetExpectedPixelFormat(slice.GetExpectedPixelFormat()); 303 tmp->SetExpectedPixelFormat(slice.GetExpectedPixelFormat());
301 command.reset(tmp.release()); 304 command.reset(tmp.release());
302 } 305 }
303 306
304 command->AcquirePayload(new Orthanc::SingleValueObject<unsigned int>(sliceIndex)); 307 command->AcquirePayload(new Orthanc::SingleValueObject<unsigned int>(sliceIndex));
305 308
306 boost::shared_ptr<IObserver> observer(GetSharedObserver()); 309 {
307 oracle_.Schedule(observer, command.release()); 310 std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(loadersContext_.Lock());
311 boost::shared_ptr<IObserver> observer(GetSharedObserver());
312 lock->Schedule(observer, 0, command.release()); // TODO: priority!
313 }
308 } 314 }
309 else 315 else
310 { 316 {
311 // loading is finished! 317 // loading is finished!
312 volumeImageReadyInHighQuality_ = true; 318 volumeImageReadyInHighQuality_ = true;
428 434
429 SetSliceContent(GetSliceIndexPayload(message.GetOrigin()), message.GetImage(), quality); 435 SetSliceContent(GetSliceIndexPayload(message.GetOrigin()), message.GetImage(), quality);
430 } 436 }
431 437
432 438
433 OrthancSeriesVolumeProgressiveLoader::OrthancSeriesVolumeProgressiveLoader(const boost::shared_ptr<OrthancStone::DicomVolumeImage>& volume, 439 OrthancSeriesVolumeProgressiveLoader::OrthancSeriesVolumeProgressiveLoader(
434 OrthancStone::IOracle& oracle, 440 OrthancStone::ILoadersContext& loadersContext,
435 OrthancStone::IObservable& oracleObservable) : 441 const boost::shared_ptr<OrthancStone::DicomVolumeImage>& volume)
436 oracle_(oracle), 442 : loadersContext_(loadersContext)
437 active_(false), 443 , active_(false)
438 simultaneousDownloads_(4), 444 , simultaneousDownloads_(4)
439 volume_(volume), 445 , volume_(volume)
440 sorter_(new OrthancStone::BasicFetchingItemsSorter::Factory), 446 , sorter_(new OrthancStone::BasicFetchingItemsSorter::Factory)
441 volumeImageReadyInHighQuality_(false) 447 , volumeImageReadyInHighQuality_(false)
442 { 448 {
443 // TODO => Move this out of constructor 449 std::auto_ptr<OrthancStone::ILoadersContext::ILock> lock(loadersContext.Lock());
444 Register<OrthancStone::OrthancRestApiCommand::SuccessMessage> 450
445 (oracleObservable, &OrthancSeriesVolumeProgressiveLoader::LoadGeometry); 451 // TODO => Move this out of constructor WHY?
446 452 Register<OrthancStone::OrthancRestApiCommand::SuccessMessage>(
447 Register<OrthancStone::GetOrthancImageCommand::SuccessMessage> 453 lock->GetOracleObservable(),
448 (oracleObservable, &OrthancSeriesVolumeProgressiveLoader::LoadBestQualitySliceContent); 454 &OrthancSeriesVolumeProgressiveLoader::LoadGeometry);
449 455
450 Register<OrthancStone::GetOrthancWebViewerJpegCommand::SuccessMessage> 456 Register<OrthancStone::GetOrthancImageCommand::SuccessMessage>(
451 (oracleObservable, &OrthancSeriesVolumeProgressiveLoader::LoadJpegSliceContent); 457 lock->GetOracleObservable(),
458 &OrthancSeriesVolumeProgressiveLoader::LoadBestQualitySliceContent);
459
460 Register<OrthancStone::GetOrthancWebViewerJpegCommand::SuccessMessage>(
461 lock->GetOracleObservable(),
462 &OrthancSeriesVolumeProgressiveLoader::LoadJpegSliceContent);
452 } 463 }
453 464
454 OrthancSeriesVolumeProgressiveLoader::~OrthancSeriesVolumeProgressiveLoader() 465 OrthancSeriesVolumeProgressiveLoader::~OrthancSeriesVolumeProgressiveLoader()
455 { 466 {
456 LOG(TRACE) << "OrthancSeriesVolumeProgressiveLoader::~OrthancSeriesVolumeProgressiveLoader()"; 467 LOG(TRACE) << "OrthancSeriesVolumeProgressiveLoader::~OrthancSeriesVolumeProgressiveLoader()";
487 { 498 {
488 active_ = true; 499 active_ = true;
489 500
490 std::unique_ptr<OrthancStone::OrthancRestApiCommand> command(new OrthancStone::OrthancRestApiCommand); 501 std::unique_ptr<OrthancStone::OrthancRestApiCommand> command(new OrthancStone::OrthancRestApiCommand);
491 command->SetUri("/series/" + seriesId + "/instances-tags"); 502 command->SetUri("/series/" + seriesId + "/instances-tags");
492 503 {
493 // LOG(TRACE) << "OrthancSeriesVolumeProgressiveLoader::LoadSeries about to call oracle_.Schedule"; 504 std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(loadersContext_.Lock());
494 boost::shared_ptr<IObserver> observer(GetSharedObserver()); 505 boost::shared_ptr<IObserver> observer(GetSharedObserver());
495 oracle_.Schedule(observer, command.release()); 506 lock->Schedule(observer, 0, command.release()); //TODO: priority!
496 // LOG(TRACE) << "OrthancSeriesVolumeProgressiveLoader::LoadSeries called oracle_.Schedule"; 507 }
497 } 508 }
498 } 509 }
499 510
500 511
501 OrthancStone::IVolumeSlicer::IExtractedSlice* 512 OrthancStone::IVolumeSlicer::IExtractedSlice*