mirror of https://github.com/kiwix/libkiwix.git
Removed duplication across two mustache templates
Deduplicated the mustache templates static/templates/catalog_v2_entries.xml and static/templates/catalog_v2_complete_entry.xml (the latter was renamed to static/templates/catalog_v2_entry.xml).
This commit is contained in:
parent
b3f7556096
commit
c0bda426b4
|
@ -51,7 +51,7 @@ namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
typedef kainjow::mustache::data MustacheData;
|
typedef kainjow::mustache::data MustacheData;
|
||||||
typedef kainjow::mustache::list BookData;
|
typedef kainjow::mustache::list BooksData;
|
||||||
typedef kainjow::mustache::list IllustrationInfo;
|
typedef kainjow::mustache::list IllustrationInfo;
|
||||||
|
|
||||||
IllustrationInfo getBookIllustrationInfo(const Book& book)
|
IllustrationInfo getBookIllustrationInfo(const Book& book)
|
||||||
|
@ -95,15 +95,26 @@ kainjow::mustache::object getSingleBookData(const Book& book)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
BookData getBookData(const Library* library, const std::vector<std::string>& bookIds)
|
std::string getSingleBookEntryXML(const Book& book, bool withXMLHeader, const std::string& endpointRoot, bool partial)
|
||||||
{
|
{
|
||||||
BookData bookData;
|
auto data = getSingleBookData(book);
|
||||||
|
data["with_xml_header"] = MustacheData(withXMLHeader);
|
||||||
|
data["dump_partial_entries"] = MustacheData(partial);
|
||||||
|
data["endpoint_root"] = endpointRoot;
|
||||||
|
return render_template(RESOURCE::templates::catalog_v2_entry_xml, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
BooksData getBooksData(const Library* library, const std::vector<std::string>& bookIds, const std::string& endpointRoot, bool partial)
|
||||||
|
{
|
||||||
|
BooksData booksData;
|
||||||
for ( const auto& bookId : bookIds ) {
|
for ( const auto& bookId : bookIds ) {
|
||||||
const Book& book = library->getBookById(bookId);
|
const Book& book = library->getBookById(bookId);
|
||||||
bookData.push_back(getSingleBookData(book));
|
booksData.push_back(kainjow::mustache::object{
|
||||||
|
{"entry", getSingleBookEntryXML(book, false, endpointRoot, partial)}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return bookData;
|
return booksData;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string getLanguageSelfName(const std::string& lang) {
|
std::string getLanguageSelfName(const std::string& lang) {
|
||||||
|
@ -119,7 +130,7 @@ std::string getLanguageSelfName(const std::string& lang) {
|
||||||
|
|
||||||
string OPDSDumper::dumpOPDSFeed(const std::vector<std::string>& bookIds, const std::string& query) const
|
string OPDSDumper::dumpOPDSFeed(const std::vector<std::string>& bookIds, const std::string& query) const
|
||||||
{
|
{
|
||||||
const auto bookData = getBookData(library, bookIds);
|
const auto booksData = getBooksData(library, bookIds, "", false);
|
||||||
const kainjow::mustache::object template_data{
|
const kainjow::mustache::object template_data{
|
||||||
{"date", gen_date_str()},
|
{"date", gen_date_str()},
|
||||||
{"root", rootLocation},
|
{"root", rootLocation},
|
||||||
|
@ -128,7 +139,7 @@ string OPDSDumper::dumpOPDSFeed(const std::vector<std::string>& bookIds, const s
|
||||||
{"totalResults", to_string(m_totalResults)},
|
{"totalResults", to_string(m_totalResults)},
|
||||||
{"startIndex", to_string(m_startIndex)},
|
{"startIndex", to_string(m_startIndex)},
|
||||||
{"itemsPerPage", to_string(m_count)},
|
{"itemsPerPage", to_string(m_count)},
|
||||||
{"books", bookData }
|
{"books", booksData }
|
||||||
};
|
};
|
||||||
|
|
||||||
return render_template(RESOURCE::templates::catalog_entries_xml, template_data);
|
return render_template(RESOURCE::templates::catalog_entries_xml, template_data);
|
||||||
|
@ -136,19 +147,20 @@ string OPDSDumper::dumpOPDSFeed(const std::vector<std::string>& bookIds, const s
|
||||||
|
|
||||||
string OPDSDumper::dumpOPDSFeedV2(const std::vector<std::string>& bookIds, const std::string& query, bool partial) const
|
string OPDSDumper::dumpOPDSFeedV2(const std::vector<std::string>& bookIds, const std::string& query, bool partial) const
|
||||||
{
|
{
|
||||||
const auto bookData = getBookData(library, bookIds);
|
const auto endpointRoot = rootLocation + "/catalog/v2";
|
||||||
|
const auto booksData = getBooksData(library, bookIds, endpointRoot, partial);
|
||||||
|
|
||||||
const char* const endpoint = partial ? "/partial_entries" : "/entries";
|
const char* const endpoint = partial ? "/partial_entries" : "/entries";
|
||||||
const kainjow::mustache::object template_data{
|
const kainjow::mustache::object template_data{
|
||||||
{"date", gen_date_str()},
|
{"date", gen_date_str()},
|
||||||
{"endpoint_root", rootLocation + "/catalog/v2"},
|
{"endpoint_root", endpointRoot},
|
||||||
{"feed_id", gen_uuid(libraryId + endpoint + "?" + query)},
|
{"feed_id", gen_uuid(libraryId + endpoint + "?" + query)},
|
||||||
{"filter", query.empty() ? MustacheData(false) : MustacheData(query)},
|
{"filter", query.empty() ? MustacheData(false) : MustacheData(query)},
|
||||||
{"query", query.empty() ? "" : "?" + urlEncode(query)},
|
{"query", query.empty() ? "" : "?" + urlEncode(query)},
|
||||||
{"totalResults", to_string(m_totalResults)},
|
{"totalResults", to_string(m_totalResults)},
|
||||||
{"startIndex", to_string(m_startIndex)},
|
{"startIndex", to_string(m_startIndex)},
|
||||||
{"itemsPerPage", to_string(m_count)},
|
{"itemsPerPage", to_string(m_count)},
|
||||||
{"books", bookData },
|
{"books", booksData },
|
||||||
{"dump_partial_entries", MustacheData(partial)}
|
{"dump_partial_entries", MustacheData(partial)}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -157,9 +169,7 @@ string OPDSDumper::dumpOPDSFeedV2(const std::vector<std::string>& bookIds, const
|
||||||
|
|
||||||
std::string OPDSDumper::dumpOPDSCompleteEntry(const std::string& bookId) const
|
std::string OPDSDumper::dumpOPDSCompleteEntry(const std::string& bookId) const
|
||||||
{
|
{
|
||||||
const auto bookData = getSingleBookData(library->getBookById(bookId));
|
return getSingleBookEntryXML(library->getBookById(bookId), true, "", false);
|
||||||
|
|
||||||
return render_template(RESOURCE::templates::catalog_v2_complete_entry_xml, bookData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string OPDSDumper::categoriesOPDSFeed() const
|
std::string OPDSDumper::categoriesOPDSFeed() const
|
||||||
|
|
|
@ -45,7 +45,7 @@ templates/captured_external.html
|
||||||
templates/catalog_entries.xml
|
templates/catalog_entries.xml
|
||||||
templates/catalog_v2_root.xml
|
templates/catalog_v2_root.xml
|
||||||
templates/catalog_v2_entries.xml
|
templates/catalog_v2_entries.xml
|
||||||
templates/catalog_v2_complete_entry.xml
|
templates/catalog_v2_entry.xml
|
||||||
templates/catalog_v2_categories.xml
|
templates/catalog_v2_categories.xml
|
||||||
templates/catalog_v2_languages.xml
|
templates/catalog_v2_languages.xml
|
||||||
opensearchdescription.xml
|
opensearchdescription.xml
|
||||||
|
|
|
@ -9,34 +9,4 @@
|
||||||
{{/filter}}
|
{{/filter}}
|
||||||
<link rel="self" href="" type="application/atom+xml" />
|
<link rel="self" href="" type="application/atom+xml" />
|
||||||
<link rel="search" type="application/opensearchdescription+xml" href="{{root}}/catalog/searchdescription.xml" />
|
<link rel="search" type="application/opensearchdescription+xml" href="{{root}}/catalog/searchdescription.xml" />
|
||||||
{{#books}}
|
{{#books}}{{{entry}}}{{/books}}</feed>
|
||||||
<entry>
|
|
||||||
<id>urn:uuid:{{id}}</id>
|
|
||||||
<title>{{title}}</title>
|
|
||||||
<updated>{{updated}}</updated>
|
|
||||||
<summary>{{description}}</summary>
|
|
||||||
<language>{{language}}</language>
|
|
||||||
<name>{{name}}</name>
|
|
||||||
<flavour>{{flavour}}</flavour>
|
|
||||||
<category>{{category}}</category>
|
|
||||||
<tags>{{tags}}</tags>
|
|
||||||
<articleCount>{{article_count}}</articleCount>
|
|
||||||
<mediaCount>{{media_count}}</mediaCount>
|
|
||||||
{{#icons}}
|
|
||||||
<link rel="http://opds-spec.org/image/thumbnail"
|
|
||||||
href="/meta?name=Illustration_{{icon_width}}x{{icon_height}}@{{icon_scale}}&content={{{content_id}}}"
|
|
||||||
type="image/png;width={{icon_width}};height={{icon_height}};scale={{icon_scale}}"/>
|
|
||||||
{{/icons}}
|
|
||||||
<link type="text/html" href="/{{{content_id}}}" />
|
|
||||||
<author>
|
|
||||||
<name>{{author_name}}</name>
|
|
||||||
</author>
|
|
||||||
<publisher>
|
|
||||||
<name>{{publisher_name}}</name>
|
|
||||||
</publisher>
|
|
||||||
{{#url}}
|
|
||||||
<link rel="http://opds-spec.org/acquisition/open-access" type="application/x-zim" href="{{{url}}}" length="{{{size}}}" />
|
|
||||||
{{/url}}
|
|
||||||
</entry>
|
|
||||||
{{/books}}
|
|
||||||
</feed>
|
|
||||||
|
|
|
@ -21,39 +21,4 @@
|
||||||
<startIndex>{{startIndex}}</startIndex>
|
<startIndex>{{startIndex}}</startIndex>
|
||||||
<itemsPerPage>{{itemsPerPage}}</itemsPerPage>
|
<itemsPerPage>{{itemsPerPage}}</itemsPerPage>
|
||||||
{{/filter}}
|
{{/filter}}
|
||||||
{{#books}}
|
{{#books}}{{{entry}}}{{/books}}</feed>
|
||||||
<entry>
|
|
||||||
<id>urn:uuid:{{id}}</id>
|
|
||||||
<title>{{title}}</title>
|
|
||||||
<updated>{{updated}}</updated>
|
|
||||||
{{#dump_partial_entries}}
|
|
||||||
<link rel="alternate"
|
|
||||||
href="{{endpoint_root}}/entry/{{{id}}}"
|
|
||||||
type="application/atom+xml;type=entry;profile=opds-catalog"/>
|
|
||||||
{{/dump_partial_entries}}{{^dump_partial_entries}} <summary>{{description}}</summary>
|
|
||||||
<language>{{language}}</language>
|
|
||||||
<name>{{name}}</name>
|
|
||||||
<flavour>{{flavour}}</flavour>
|
|
||||||
<category>{{category}}</category>
|
|
||||||
<tags>{{tags}}</tags>
|
|
||||||
<articleCount>{{article_count}}</articleCount>
|
|
||||||
<mediaCount>{{media_count}}</mediaCount>
|
|
||||||
{{#icons}}
|
|
||||||
<link rel="http://opds-spec.org/image/thumbnail"
|
|
||||||
href="/meta?name=Illustration_{{icon_width}}x{{icon_height}}@{{icon_scale}}&content={{{content_id}}}"
|
|
||||||
type="image/png;width={{icon_width}};height={{icon_height}};scale={{icon_scale}}"/>
|
|
||||||
{{/icons}}
|
|
||||||
<link type="text/html" href="/{{{content_id}}}" />
|
|
||||||
<author>
|
|
||||||
<name>{{author_name}}</name>
|
|
||||||
</author>
|
|
||||||
<publisher>
|
|
||||||
<name>{{publisher_name}}</name>
|
|
||||||
</publisher>
|
|
||||||
{{#url}}
|
|
||||||
<link rel="http://opds-spec.org/acquisition/open-access" type="application/x-zim" href="{{{url}}}" length="{{{size}}}" />
|
|
||||||
{{/url}}
|
|
||||||
{{/dump_partial_entries}}
|
|
||||||
</entry>
|
|
||||||
{{/books}}
|
|
||||||
</feed>
|
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
{{#with_xml_header}}<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<entry>
|
{{/with_xml_header}} <entry>
|
||||||
<id>urn:uuid:{{id}}</id>
|
<id>urn:uuid:{{id}}</id>
|
||||||
<title>{{title}}</title>
|
<title>{{title}}</title>
|
||||||
<updated>{{updated}}</updated>
|
<updated>{{updated}}</updated>
|
||||||
<summary>{{description}}</summary>
|
{{#dump_partial_entries}}
|
||||||
|
<link rel="alternate"
|
||||||
|
href="{{endpoint_root}}/entry/{{{id}}}"
|
||||||
|
type="application/atom+xml;type=entry;profile=opds-catalog"/>
|
||||||
|
{{/dump_partial_entries}}{{^dump_partial_entries}} <summary>{{description}}</summary>
|
||||||
<language>{{language}}</language>
|
<language>{{language}}</language>
|
||||||
<name>{{name}}</name>
|
<name>{{name}}</name>
|
||||||
<flavour>{{flavour}}</flavour>
|
<flavour>{{flavour}}</flavour>
|
||||||
|
@ -26,4 +30,5 @@
|
||||||
{{#url}}
|
{{#url}}
|
||||||
<link rel="http://opds-spec.org/acquisition/open-access" type="application/x-zim" href="{{{url}}}" length="{{{size}}}" />
|
<link rel="http://opds-spec.org/acquisition/open-access" type="application/x-zim" href="{{{url}}}" length="{{{size}}}" />
|
||||||
{{/url}}
|
{{/url}}
|
||||||
|
{{/dump_partial_entries}}
|
||||||
</entry>
|
</entry>
|
|
@ -905,7 +905,6 @@ TEST_F(LibraryServerTest, catalog_search_results_pagination)
|
||||||
" <startIndex>100</startIndex>\n"
|
" <startIndex>100</startIndex>\n"
|
||||||
" <itemsPerPage>0</itemsPerPage>\n"
|
" <itemsPerPage>0</itemsPerPage>\n"
|
||||||
CATALOG_LINK_TAGS
|
CATALOG_LINK_TAGS
|
||||||
" \n"
|
|
||||||
"</feed>\n"
|
"</feed>\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue