diff --git a/ChangeLog b/ChangeLog index b813d196a..17afe53e4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +kiwix-lib 3.0.1 +=============== + + * Small fix about parsing the opdsStream. + kiwix-lib 3.0.0 =============== diff --git a/include/common/stringTools.h b/include/common/stringTools.h index 1c8a29bf5..ad04dc1a2 100644 --- a/include/common/stringTools.h +++ b/include/common/stringTools.h @@ -71,5 +71,13 @@ std::string to_string(T value) oss << value; return oss.str(); } + +template +T extractFromString(const std::string& str) { + std::istringstream iss(str); + T ret; + iss >> ret; + return ret; +} } //namespace kiwix #endif diff --git a/include/manager.h b/include/manager.h index 0e980b341..718bfb3a0 100644 --- a/include/manager.h +++ b/include/manager.h @@ -196,7 +196,10 @@ class Manager std::string writableLibraryPath; - std::vector bookIdList; + bool m_hasSearchResult = false; + uint64_t m_totalBooks = 0; + uint64_t m_startIndex = 0; + uint64_t m_itemsPerPage = 0; protected: kiwix::LibraryManipulator* manipulator; diff --git a/meson.build b/meson.build index f621784ba..f696cccaa 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('kiwix-lib', 'cpp', - version : '3.0.0', + version : '3.0.1', license : 'GPL', default_options : ['c_std=c11', 'cpp_std=c++11', 'werror=true']) diff --git a/src/downloader.cpp b/src/downloader.cpp index 2f9a70cd1..778ad3fb8 100644 --- a/src/downloader.cpp +++ b/src/downloader.cpp @@ -72,12 +72,12 @@ void Download::updateStatus(bool follow) } catch (InvalidRPCNode& e) { } } m_status = status; - m_totalLength = structNode.getMember("totalLength").getValue().getAsI(); - m_completedLength = structNode.getMember("completedLength").getValue().getAsI(); - m_downloadSpeed = structNode.getMember("downloadSpeed").getValue().getAsI(); + m_totalLength = extractFromString(structNode.getMember("totalLength").getValue().getAsS()); + m_completedLength = extractFromString(structNode.getMember("completedLength").getValue().getAsS()); + m_downloadSpeed = extractFromString(structNode.getMember("downloadSpeed").getValue().getAsS()); try { auto verifiedLengthValue = structNode.getMember("verifiedLength").getValue(); - m_verifiedLength = verifiedLengthValue.getAsI(); + m_verifiedLength = extractFromString(verifiedLengthValue.getAsS()); } catch (InvalidRPCNode& e) { m_verifiedLength = 0; } auto filesMember = structNode.getMember("files"); auto fileStruct = filesMember.getValue().getArray().getValue(0).getStruct(); diff --git a/src/manager.cpp b/src/manager.cpp index 582d8ec49..4fb0637e2 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -95,6 +95,15 @@ bool Manager::parseOpdsDom(const pugi::xml_document& doc, const std::string& url { pugi::xml_node libraryNode = doc.child("feed"); + try { + m_totalBooks = strtoull(libraryNode.child("totalResults").child_value(), 0, 0); + m_startIndex = strtoull(libraryNode.child("startIndex").child_value(), 0, 0); + m_itemsPerPage = strtoull(libraryNode.child("itemsPerPage").child_value(), 0, 0); + m_hasSearchResult = true; + } catch(...) { + m_hasSearchResult = false; + } + for (pugi::xml_node entryNode = libraryNode.child("entry"); entryNode; entryNode = entryNode.next_sibling("entry")) { kiwix::Book book;