mirror of https://github.com/kiwix/libkiwix.git
Introduce readLanguagesFromFeed()
Added a new function to read languages stored in an OPDS feed
This commit is contained in:
parent
7feb89c30e
commit
a28c2973e9
|
@ -26,6 +26,8 @@
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
namespace kiwix {
|
namespace kiwix {
|
||||||
|
typedef std::pair<std::string, std::string> LangNameCodePair;
|
||||||
|
typedef std::vector<LangNameCodePair> FeedLanguages;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the current directory.
|
* Return the current directory.
|
||||||
|
@ -226,5 +228,12 @@ std::string getBestPublicIp();
|
||||||
*/
|
*/
|
||||||
std::string beautifyFileSize(uint64_t number);
|
std::string beautifyFileSize(uint64_t number);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load languages stored in an OPDS stream.
|
||||||
|
*
|
||||||
|
* @param content the OPDS stream.
|
||||||
|
* @return vector containing pairs of language code and their corresponding full language name.
|
||||||
|
*/
|
||||||
|
FeedLanguages readLanguagesFromFeed(const std::string& content);
|
||||||
}
|
}
|
||||||
#endif // KIWIX_TOOLS_H
|
#endif // KIWIX_TOOLS_H
|
||||||
|
|
|
@ -17,6 +17,7 @@ kiwix_sources = [
|
||||||
'tools/regexTools.cpp',
|
'tools/regexTools.cpp',
|
||||||
'tools/stringTools.cpp',
|
'tools/stringTools.cpp',
|
||||||
'tools/networkTools.cpp',
|
'tools/networkTools.cpp',
|
||||||
|
'tools/opdsParsingTools.cpp',
|
||||||
'tools/otherTools.cpp',
|
'tools/otherTools.cpp',
|
||||||
'tools/archiveTools.cpp',
|
'tools/archiveTools.cpp',
|
||||||
'kiwixserve.cpp',
|
'kiwixserve.cpp',
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
#include "tools.h"
|
||||||
|
#include <pugixml.hpp>
|
||||||
|
|
||||||
|
namespace kiwix
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
#define VALUE(name) entryNode.child(name).child_value()
|
||||||
|
FeedLanguages parseLanguages(const pugi::xml_document& doc)
|
||||||
|
{
|
||||||
|
pugi::xml_node feedNode = doc.child("feed");
|
||||||
|
FeedLanguages langs;
|
||||||
|
|
||||||
|
for (pugi::xml_node entryNode = feedNode.child("entry"); entryNode;
|
||||||
|
entryNode = entryNode.next_sibling("entry")) {
|
||||||
|
auto title = VALUE("title");
|
||||||
|
auto code = VALUE("dc:language");
|
||||||
|
langs.push_back({code, title});
|
||||||
|
}
|
||||||
|
|
||||||
|
return langs;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // unnamed namespace
|
||||||
|
|
||||||
|
FeedLanguages readLanguagesFromFeed(const std::string& content)
|
||||||
|
{
|
||||||
|
pugi::xml_document doc;
|
||||||
|
pugi::xml_parse_result result
|
||||||
|
= doc.load_buffer((void*)content.data(), content.size());
|
||||||
|
|
||||||
|
if (result) {
|
||||||
|
auto langs = parseLanguages(doc);
|
||||||
|
return langs;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FeedLanguages();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace kiwix
|
Loading…
Reference in New Issue