# HG changeset patch # User Sebastien Jodogne # Date 1499786671 -7200 # Node ID 563bf878407a7f2f45afbcbcc39f78d6410027cd # Parent 6925272458569ed48bc67cddd4b58f7d8b5bdb94 Argument "Since" in URI "/tools/find" (related to issue 53) diff -r 692527245856 -r 563bf878407a NEWS --- a/NEWS Mon Jul 10 11:31:48 2017 +0200 +++ b/NEWS Tue Jul 11 17:24:31 2017 +0200 @@ -1,6 +1,11 @@ Pending changes in the mainline =============================== +REST API +-------- + +* Argument "Since" in URI "/tools/find" (related to issue 53) + Plugins ------- diff -r 692527245856 -r 563bf878407a OrthancServer/OrthancRestApi/OrthancRestResources.cpp --- a/OrthancServer/OrthancRestApi/OrthancRestResources.cpp Mon Jul 10 11:31:48 2017 +0200 +++ b/OrthancServer/OrthancRestApi/OrthancRestResources.cpp Tue Jul 11 17:24:31 2017 +0200 @@ -1154,7 +1154,8 @@ request["Level"].type() == Json::stringValue && request["Query"].type() == Json::objectValue && (!request.isMember("CaseSensitive") || request["CaseSensitive"].type() == Json::booleanValue) && - (!request.isMember("Limit") || request["Limit"].type() == Json::intValue)) + (!request.isMember("Limit") || request["Limit"].type() == Json::intValue) && + (!request.isMember("Since") || request["Since"].type() == Json::intValue)) { bool expand = false; if (request.isMember("Expand")) @@ -1180,6 +1181,18 @@ limit = static_cast(tmp); } + size_t since = 0; + if (request.isMember("Since")) + { + int tmp = request["Since"].asInt(); + if (tmp < 0) + { + throw OrthancException(ErrorCode_ParameterOutOfRange); + } + + since = static_cast(tmp); + } + std::string level = request["Level"].asString(); LookupResource query(StringToResourceType(level.c_str())); @@ -1198,8 +1211,9 @@ } std::list resources; - context.Apply(resources, query, limit); - AnswerListOfResources(call.GetOutput(), context.GetIndex(), resources, query.GetLevel(), expand); + context.Apply(resources, query, since, limit); + AnswerListOfResources(call.GetOutput(), context.GetIndex(), + resources, query.GetLevel(), expand); } else { diff -r 692527245856 -r 563bf878407a OrthancServer/ServerContext.cpp --- a/OrthancServer/ServerContext.cpp Mon Jul 10 11:31:48 2017 +0200 +++ b/OrthancServer/ServerContext.cpp Tue Jul 11 17:24:31 2017 +0200 @@ -601,9 +601,10 @@ } - bool ServerContext::Apply(std::list& result, + void ServerContext::Apply(std::list& result, const ::Orthanc::LookupResource& lookup, - size_t maxResults) + size_t since, + size_t limit) { result.clear(); @@ -612,6 +613,7 @@ assert(resources.size() == instances.size()); + size_t skipped = 0; for (size_t i = 0; i < instances.size(); i++) { Json::Value dicom; @@ -619,10 +621,14 @@ if (lookup.IsMatch(dicom)) { - if (maxResults != 0 && - result.size() >= maxResults) + if (skipped < since) { - return false; // too many results + skipped++; + } + else if (limit != 0 && + result.size() >= limit) + { + return; // too many results } else { @@ -630,8 +636,6 @@ } } } - - return true; // finished } } diff -r 692527245856 -r 563bf878407a OrthancServer/ServerContext.h --- a/OrthancServer/ServerContext.h Mon Jul 10 11:31:48 2017 +0200 +++ b/OrthancServer/ServerContext.h Tue Jul 11 17:24:31 2017 +0200 @@ -258,9 +258,10 @@ void Stop(); - bool Apply(std::list& result, + void Apply(std::list& result, const ::Orthanc::LookupResource& lookup, - size_t maxResults); + size_t since, + size_t limit); /**