diff --git a/include/book.h b/include/book.h index e3cb750ad..dacab0776 100644 --- a/include/book.h +++ b/include/book.h @@ -80,6 +80,7 @@ class Book const std::string& getTitle() const { return m_title; } const std::string& getDescription() const { return m_description; } const std::string& getLanguage() const { return m_language; } + const std::vector getLanguages() const; const std::string& getCreator() const { return m_creator; } const std::string& getPublisher() const { return m_publisher; } const std::string& getDate() const { return m_date; } diff --git a/src/book.cpp b/src/book.cpp index 56f96c738..316645ccf 100644 --- a/src/book.cpp +++ b/src/book.cpp @@ -286,4 +286,9 @@ std::string Book::getCategoryFromTags() const } } +const std::vector Book::getLanguages() const +{ + return kiwix::split(m_language, ","); +} + } diff --git a/src/library.cpp b/src/library.cpp index 632b86e3a..1ca875cfb 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -388,8 +388,7 @@ Library::AttributeCounts Library::getBooksLanguagesWithCounts() const for (const auto& pair: mp_impl->m_books) { const auto& book = pair.second; if (book.getOrigId().empty()) { - const std::string commaSeparatedLangList = book.getLanguage(); - for ( const auto& lang : kiwix::split(commaSeparatedLangList, ",") ) { + for ( const auto& lang : book.getLanguages() ) { ++langsWithCounts[lang]; } } diff --git a/test/book.cpp b/test/book.cpp index 8b1a29ee6..9b7200ae2 100644 --- a/test/book.cpp +++ b/test/book.cpp @@ -195,3 +195,22 @@ TEST(BookTest, getHumanReadableIdFromPath) #endif EXPECT_EQ("3plus2", path2HumanReadableId("3+2.zim")); } + +TEST(BookTest, getLanguages) +{ + typedef std::vector Langs; + + { + const kiwix::Book book = makeBook(R"(id="abcd" language="fra")"); + + EXPECT_EQ(book.getLanguage(), "fra"); + EXPECT_EQ(book.getLanguages(), Langs{ "fra" }); + } + + { + const kiwix::Book book = makeBook(R"(id="abcd" language="eng,ong,ing")"); + + EXPECT_EQ(book.getLanguage(), "eng,ong,ing"); + EXPECT_EQ(book.getLanguages(), Langs({ "eng", "ong", "ing" })); + } +}