Mercurial > hg > orthanc
diff OrthancServer/Scheduler/ModifyInstanceCommand.cpp @ 1099:060e8918d7a4
More fault-tolerant commands in Lua scripts
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 07 Aug 2014 10:02:22 +0200 |
parents | 187ed107a59f |
children | 6e7e5ed91c2d |
line wrap: on
line diff
--- a/OrthancServer/Scheduler/ModifyInstanceCommand.cpp Tue Aug 05 16:18:45 2014 +0200 +++ b/OrthancServer/Scheduler/ModifyInstanceCommand.cpp Thu Aug 07 10:02:22 2014 +0200 @@ -44,24 +44,32 @@ { LOG(INFO) << "Modifying resource " << *it; - std::auto_ptr<ParsedDicomFile> modified; - + try { - ServerContext::DicomCacheLocker lock(context_, *it); - modified.reset(lock.GetDicom().Clone()); - } + std::auto_ptr<ParsedDicomFile> modified; - modification_.Apply(*modified); + { + ServerContext::DicomCacheLocker lock(context_, *it); + modified.reset(lock.GetDicom().Clone()); + } + + modification_.Apply(*modified); - DicomInstanceToStore toStore; - toStore.SetParsedDicomFile(*modified); - // TODO other metadata - toStore.AddMetadata(ResourceType_Instance, MetadataType_ModifiedFrom, *it); + DicomInstanceToStore toStore; + toStore.SetParsedDicomFile(*modified); + // TODO other metadata + toStore.AddMetadata(ResourceType_Instance, MetadataType_ModifiedFrom, *it); + + std::string modifiedId; + context_.Store(modifiedId, toStore); - std::string modifiedId; - context_.Store(modifiedId, toStore); - - outputs.push_back(modifiedId); + // Only chain with other commands if this command succeeds + outputs.push_back(modifiedId); + } + catch (OrthancException& e) + { + LOG(ERROR) << "Unable to modify instance " << *it << " in a Lua script: " << e.What(); + } } return true;