mirror of
https://github.com/kiwix/libkiwix.git
synced 2025-06-27 21:39:37 +00:00
Preliminary version of /catalog/v2/languages
This commit is contained in:
committed by
Matthieu Gautier
parent
64b55dbdc7
commit
5f90f5ee2a
@ -22,6 +22,7 @@
|
||||
|
||||
#include "kiwixlib-resources.h"
|
||||
#include <mustache.hpp>
|
||||
#include <unicode/locid.h>
|
||||
|
||||
#include "tools/stringTools.h"
|
||||
#include "tools/otherTools.h"
|
||||
@ -83,6 +84,24 @@ BookData getBookData(const Library* library, const std::vector<std::string>& boo
|
||||
return bookData;
|
||||
}
|
||||
|
||||
struct LangInfo {
|
||||
std::string selfName, englishName;
|
||||
};
|
||||
|
||||
std::map<std::string, LangInfo> langMap = {
|
||||
{"eng", { "English", "English"} },
|
||||
{"fra", { "Français", "French"} },
|
||||
{"rus", { "Русский", "Russian"} },
|
||||
};
|
||||
|
||||
std::string getLanguageSelfName(const std::string& lang) {
|
||||
return langMap.at(lang).selfName;
|
||||
};
|
||||
|
||||
std::string getLanguageEnglishName(const std::string& lang) {
|
||||
return langMap.at(lang).englishName;
|
||||
};
|
||||
|
||||
} // unnamed namespace
|
||||
|
||||
string OPDSDumper::dumpOPDSFeed(const std::vector<std::string>& bookIds, const std::string& query) const
|
||||
@ -146,4 +165,31 @@ std::string OPDSDumper::categoriesOPDSFeed(const std::vector<std::string>& categ
|
||||
);
|
||||
}
|
||||
|
||||
std::string OPDSDumper::languagesOPDSFeed() const
|
||||
{
|
||||
const auto now = gen_date_str();
|
||||
kainjow::mustache::list languageData;
|
||||
for ( const auto& languageCode : library->getBooksLanguages() ) {
|
||||
const auto languageSelfName = getLanguageSelfName(languageCode);
|
||||
const auto languageEnglishName = getLanguageEnglishName(languageCode);
|
||||
languageData.push_back(kainjow::mustache::object{
|
||||
{"lang_code", languageCode},
|
||||
{"lang_self_name", languageSelfName},
|
||||
{"lang_english_name", languageEnglishName},
|
||||
{"updated", now},
|
||||
{"id", gen_uuid(libraryId + "/languages/" + languageCode)}
|
||||
});
|
||||
}
|
||||
|
||||
return render_template(
|
||||
RESOURCE::templates::catalog_v2_languages_xml,
|
||||
kainjow::mustache::object{
|
||||
{"date", now},
|
||||
{"endpoint_root", rootLocation + "/catalog/v2"},
|
||||
{"feed_id", gen_uuid(libraryId + "/languages")},
|
||||
{"languages", languageData }
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -77,6 +77,7 @@ class InternalServer {
|
||||
std::unique_ptr<Response> handle_catalog_v2_root(const RequestContext& request);
|
||||
std::unique_ptr<Response> handle_catalog_v2_entries(const RequestContext& request);
|
||||
std::unique_ptr<Response> handle_catalog_v2_categories(const RequestContext& request);
|
||||
std::unique_ptr<Response> handle_catalog_v2_languages(const RequestContext& request);
|
||||
std::unique_ptr<Response> handle_meta(const RequestContext& request);
|
||||
std::unique_ptr<Response> handle_search(const RequestContext& request);
|
||||
std::unique_ptr<Response> handle_suggest(const RequestContext& request);
|
||||
|
@ -59,6 +59,8 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2(const RequestContext
|
||||
return handle_catalog_v2_entries(request);
|
||||
} else if (url == "categories") {
|
||||
return handle_catalog_v2_categories(request);
|
||||
} else if (url == "languages") {
|
||||
return handle_catalog_v2_languages(request);
|
||||
} else {
|
||||
return Response::build_404(*this, request, "", "");
|
||||
}
|
||||
@ -107,4 +109,16 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_categories(const Req
|
||||
);
|
||||
}
|
||||
|
||||
std::unique_ptr<Response> InternalServer::handle_catalog_v2_languages(const RequestContext& request)
|
||||
{
|
||||
OPDSDumper opdsDumper(mp_library);
|
||||
opdsDumper.setRootLocation(m_root);
|
||||
opdsDumper.setLibraryId(m_library_id);
|
||||
return ContentResponse::build(
|
||||
*this,
|
||||
opdsDumper.languagesOPDSFeed(),
|
||||
"application/atom+xml;profile=opds-catalog;kind=navigation"
|
||||
);
|
||||
}
|
||||
|
||||
} // namespace kiwix
|
||||
|
Reference in New Issue
Block a user