# HG changeset patch # User Sebastien Jodogne # Date 1606842102 -3600 # Node ID 0257339b08849aca174fc56ddfe4f3719800d870 # Parent c8d0ffb3047d5b2bac4b9a84378e3e12e0cc060b new method ParseDicomFromWadoCommand::IsSameCommand() diff -r c8d0ffb3047d -r 0257339b0884 OrthancStone/Sources/Loaders/SeriesFramesLoader.cpp --- a/OrthancStone/Sources/Loaders/SeriesFramesLoader.cpp Tue Dec 01 17:43:31 2020 +0100 +++ b/OrthancStone/Sources/Loaders/SeriesFramesLoader.cpp Tue Dec 01 18:01:42 2020 +0100 @@ -444,7 +444,9 @@ const std::map empty; std::unique_ptr command( - new ParseDicomFromWadoCommand(source, sopInstanceUid, source.CreateDicomWebCommand(uri, empty, empty, NULL))); + new ParseDicomFromWadoCommand(source, sopInstanceUid, false /* no server-side transcoding */, + Orthanc::DicomTransferSyntax_LittleEndianExplicit /* dummy value */, + source.CreateDicomWebCommand(uri, empty, empty, NULL))); command->AcquirePayload(payload.release()); { diff -r c8d0ffb3047d -r 0257339b0884 OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.cpp --- a/OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.cpp Tue Dec 01 17:43:31 2020 +0100 +++ b/OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.cpp Tue Dec 01 18:01:42 2020 +0100 @@ -30,16 +30,20 @@ { ParseDicomFromWadoCommand::ParseDicomFromWadoCommand(const DicomSource& source, const std::string& sopInstanceUid, + bool transcode, + Orthanc::DicomTransferSyntax transferSyntax, IOracleCommand* restCommand) : source_(source), sopInstanceUid_(sopInstanceUid), + transcode_(transcode), + transferSyntax_(transferSyntax), restCommand_(restCommand) { if (restCommand == NULL) { throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); } - + if (restCommand_->GetType() != Type_Http && restCommand_->GetType() != Type_OrthancRestApi) { @@ -51,10 +55,46 @@ IOracleCommand* ParseDicomFromWadoCommand::Clone() const { assert(restCommand_.get() != NULL); - return new ParseDicomFromWadoCommand(source_, sopInstanceUid_, restCommand_->Clone()); + return new ParseDicomFromWadoCommand(source_, sopInstanceUid_, transcode_, transferSyntax_, restCommand_->Clone()); } + Orthanc::DicomTransferSyntax ParseDicomFromWadoCommand::GetTranscodeTransferSyntax() const + { + if (transcode_) + { + return transferSyntax_; + } + else + { + // "IsTranscode()" should have been called + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); + } + } + + + bool ParseDicomFromWadoCommand::IsSameCommand(const ParseDicomFromWadoCommand& other) const + { + if (source_.IsSameSource(other.source_) && + sopInstanceUid_ == other.sopInstanceUid_ && + transcode_ == other.transcode_) + { + if (transcode_) + { + return transferSyntax_ == other.transferSyntax_; + } + else + { + return true; + } + } + else + { + return false; + } + } + + const IOracleCommand& ParseDicomFromWadoCommand::GetRestCommand() const { assert(restCommand_.get() != NULL); @@ -94,7 +134,7 @@ source.CreateDicomWebCommand(uri, arguments, headers, NULL)); std::unique_ptr command( - new ParseDicomFromWadoCommand(source, sopInstanceUid, rest.release())); + new ParseDicomFromWadoCommand(source, sopInstanceUid, transcode, transferSyntax, rest.release())); if (protection.get() != NULL) { diff -r c8d0ffb3047d -r 0257339b0884 OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.h --- a/OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.h Tue Dec 01 17:43:31 2020 +0100 +++ b/OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.h Tue Dec 01 18:01:42 2020 +0100 @@ -36,11 +36,15 @@ private: DicomSource source_; std::string sopInstanceUid_; + bool transcode_; + Orthanc::DicomTransferSyntax transferSyntax_; std::unique_ptr restCommand_; public: ParseDicomFromWadoCommand(const DicomSource& source, const std::string& sopInstanceUid, + bool transcode, + Orthanc::DicomTransferSyntax transferSyntax, IOracleCommand* restCommand); virtual Type GetType() const ORTHANC_OVERRIDE @@ -59,6 +63,15 @@ { return sopInstanceUid_; } + + bool IsTranscode() const + { + return transcode_; + } + + Orthanc::DicomTransferSyntax GetTranscodeTransferSyntax() const; + + bool IsSameCommand(const ParseDicomFromWadoCommand& other) const; const IOracleCommand& GetRestCommand() const; diff -r c8d0ffb3047d -r 0257339b0884 TODO --- a/TODO Tue Dec 01 17:43:31 2020 +0100 +++ b/TODO Tue Dec 01 18:01:42 2020 +0100 @@ -60,6 +60,7 @@ * Speedup RT-STRUCT projection in sagittal + coronal views * Speedup RT-STRUCT loading +* "ParseDicomFromOrthanc": new command -----------------