diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2023-04-07 18:25:21 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2023-04-07 18:27:28 +0100 |
commit | 200ce040b05e76f2d0fd3eaa77bd35a7d00a4b79 (patch) | |
tree | 06c32d7f55340938dbe1000bf1f19d4c71c8c35c | |
parent | Dump XML documents for analysis, not just HTML docs (diff) | |
download | gentoobrowse-200ce040b05e76f2d0fd3eaa77bd35a7d00a4b79.tar.bz2 gentoobrowse-200ce040b05e76f2d0fd3eaa77bd35a7d00a4b79.tar.xz gentoobrowse-200ce040b05e76f2d0fd3eaa77bd35a7d00a4b79.zip |
Simplified/faster sitemap generationgentoobrowse-2.1.9
-rw-r--r-- | gentoobrowse/src/mash.ice | 14 | ||||
-rw-r--r-- | gentoobrowse/src/search.cpp | 19 | ||||
-rw-r--r-- | gentoobrowse/xslt/sitemap.xslt | 7 |
3 files changed, 10 insertions, 30 deletions
diff --git a/gentoobrowse/src/mash.ice b/gentoobrowse/src/mash.ice index 0ed9f76..abdcec1 100644 --- a/gentoobrowse/src/mash.ice +++ b/gentoobrowse/src/mash.ice @@ -24,15 +24,6 @@ module GentooBrowse { ["slicer:key:timestamp","slicer:value:categories","slicer:item:sync"] dictionary<string, Categories> Syncs; - - struct SiteMapCategory { - ["slicer:name:detail"] - Gentoo::OverviewCategory category; - Gentoo::Packages packages; - }; - - ["slicer:element:category"] - sequence<SiteMapCategory> SiteMapCategories; }; ["slicer:root:gentoo"] @@ -57,11 +48,6 @@ module GentooBrowse { }; ["slicer:root:gentoo"] - class Sitemap extends PageBase { - Wrappers::SiteMapCategories categories; - }; - - ["slicer:root:gentoo"] class Search extends PageBase { Gentoo::Categories categories; Gentoo::SearchResultPackages packages; diff --git a/gentoobrowse/src/search.cpp b/gentoobrowse/src/search.cpp index 52a5846..93ce80f 100644 --- a/gentoobrowse/src/search.cpp +++ b/gentoobrowse/src/search.cpp @@ -36,20 +36,13 @@ namespace GentooBrowse { { auto _ar_categories = prx0->getAllOverviewCategoriesAsync(request->getContext()); auto _ar_packages = prx0->getAllPackagesAsync(request->getContext()); - ::GentooBrowse::SitemapPtr _responseModel = std::make_shared<::GentooBrowse::Sitemap>(); + auto _responseModel = std::make_shared<CategoriesAndPackages>(); auto categories = _ar_categories.get(); - auto packages = _ar_packages.get(); - for (const auto & super : categories) { - std::transform(super.second.begin(), super.second.end(), - std::inserter(_responseModel->categories, _responseModel->categories.begin()), - [&packages](auto c) { - Gentoo::Packages ps; - std::copy_if(packages.begin(), packages.end(), std::inserter(ps, ps.begin()), [&c](auto p) { - return p->categoryid == c->categoryid; - }); - return GentooBrowse::Wrappers::SiteMapCategory({c, ps}); - }); - } + std::for_each(categories.begin(), categories.end(), + [ins = std::back_inserter(_responseModel->categories)](auto && oc) { + std::move(oc.second.begin(), oc.second.end(), ins); + }); + _responseModel->packages = _ar_packages.get(); request->response(this, _responseModel); } diff --git a/gentoobrowse/xslt/sitemap.xslt b/gentoobrowse/xslt/sitemap.xslt index 055b48d..40fa765 100644 --- a/gentoobrowse/xslt/sitemap.xslt +++ b/gentoobrowse/xslt/sitemap.xslt @@ -2,6 +2,7 @@ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:date="http://exslt.org/dates-and-times" version="1.0" exclude-result-prefixes="date"> <xsl:output encoding="utf-8" method="xml" media-type="text/xml" indent="yes"/> <xsl:variable name="base">https://gentoobrowse.randomdan.homeip.net/</xsl:variable> + <xsl:key name="packages" match="/gentoo/packages/package" use="categoryid"/> <xsl:template match="/gentoo"> <urlset> <url> @@ -17,8 +18,8 @@ <changefreq>weekly</changefreq> </url> <xsl:for-each select="categories/category"> - <xsl:sort select="detail/name"/> - <xsl:variable name="category" select="detail"/> + <xsl:sort select="name"/> + <xsl:variable name="category" select="."/> <url> <loc><xsl:value-of select="$base"/>packages/<xsl:value-of select="$category/name"/></loc> <lastmod> @@ -26,7 +27,7 @@ </lastmod> <changefreq>daily</changefreq> </url> - <xsl:for-each select="packages/package"> + <xsl:for-each select="key('packages', $category/categoryid)"> <xsl:sort select="name"/> <url> <loc><xsl:value-of select="$base"/>packages/<xsl:value-of select="$category/name"/>/<xsl:value-of select="name"/></loc> |