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/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();