diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index c0148c24..3634ef79 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -703,14 +703,8 @@ InternalServer::search_catalog(const RequestContext& request, opdsDumper.setTitle("Search result for " + q); std::vector bookIdsToDump = mp_library->filter(filter); const auto totalResults = bookIdsToDump.size(); - size_t count(10); - size_t startIndex(0); - try { - count = extractFromString(request.get_argument("count")); - } catch (...) {} - try { - startIndex = extractFromString(request.get_argument("start")); - } catch (...) {} + const size_t count = request.get_optional_param("count", 10UL); + const size_t startIndex = request.get_optional_param("start", 0UL); const auto s = std::min(startIndex, totalResults); bookIdsToDump.erase(bookIdsToDump.begin(), bookIdsToDump.begin()+s); if (count>0 && bookIdsToDump.size() > count) { diff --git a/src/server/request_context.h b/src/server/request_context.h index 7cb8f3da..3dd446af 100644 --- a/src/server/request_context.h +++ b/src/server/request_context.h @@ -74,6 +74,15 @@ class RequestContext { return v; } + template + T get_optional_param(const std::string& name, T default_value) const + { + try { + return get_argument(name); + } catch (...) {} + return default_value; + } + RequestMethod get_method() const; std::string get_url() const;