Generate per language RSS feed

This commit is contained in:
Vincent Prouillet 2019-01-02 22:11:34 +01:00
parent 832360f9b1
commit 3d22b4f1f9
9 changed files with 65 additions and 7 deletions

1
.gitignore vendored
View file

@ -14,6 +14,7 @@ huge-kb
current.bench
now.bench
*.zst
# snapcraft artifacts
snap/.snapcraft

View file

@ -246,7 +246,7 @@ impl Config {
}
/// Is this site using i18n?
pub fn uses_i18n(&self) -> bool {
pub fn is_multilingual(&self) -> bool {
!self.languages.is_empty()
}

View file

@ -109,7 +109,7 @@ impl FileInfo {
/// remove it and return the language code
pub fn find_language(&mut self, config: &Config) -> Result<Option<String>> {
// No languages? Nothing to do
if !config.uses_i18n() {
if !config.is_multilingual() {
return Ok(None);
}

View file

@ -511,9 +511,41 @@ impl Site {
self.render_sections()?;
self.render_orphan_pages()?;
self.render_sitemap()?;
if self.config.generate_rss {
self.render_rss_feed(self.library.pages_values(), None)?;
let pages = if self.config.is_multilingual() {
self.library
.pages_values()
.iter()
.filter(|p| p.lang.is_none())
.map(|p| *p)
.collect()
} else {
self.library.pages_values()
};
self.render_rss_feed(pages, None)?;
}
for lang in &self.config.languages {
if !lang.rss {
continue;
}
let pages = self
.library
.pages_values()
.iter()
.filter(|p| {
if let Some(ref l) = p.lang {
l == &lang.code
} else {
false
}
})
.map(|p| *p)
.collect();
self.render_rss_feed(pages, Some(&PathBuf::from(lang.code.clone())))?;
}
self.render_404()?;
self.render_robots()?;
self.render_taxonomies()?;

View file

@ -30,7 +30,7 @@ macro_rules! file_contains {
let mut file = std::fs::File::open(&path).unwrap();
let mut s = String::new();
file.read_to_string(&mut s).unwrap();
println!("{}", s);
// println!("{}", s);
s.contains($text)
}};
}

View file

@ -13,8 +13,8 @@ fn can_parse_multilingual_site() {
let mut site = Site::new(&path, "config.toml").unwrap();
site.load().unwrap();
assert_eq!(site.library.pages().len(), 9);
assert_eq!(site.library.sections().len(), 4);
assert_eq!(site.library.pages().len(), 10);
assert_eq!(site.library.sections().len(), 6);
// default index sections
let default_index_section =
@ -79,4 +79,15 @@ fn can_build_multilingual_site() {
assert!(file_exists!(public, "sitemap.xml"));
assert!(file_contains!(public, "sitemap.xml", "https://example.com/blog/something-else/"));
assert!(file_contains!(public, "sitemap.xml", "https://example.com/fr/blog/something-else/"));
assert!(file_contains!(public, "sitemap.xml", "https://example.com/it/blog/something-else/"));
// one rss per language
assert!(file_exists!(public, "rss.xml"));
assert!(file_contains!(public, "rss.xml", "https://example.com/blog/something-else/"));
assert!(!file_contains!(public, "rss.xml", "https://example.com/fr/blog/something-else/"));
assert!(file_exists!(public, "fr/rss.xml"));
assert!(!file_contains!(public, "fr/rss.xml", "https://example.com/blog/something-else/"));
assert!(file_contains!(public, "fr/rss.xml", "https://example.com/fr/blog/something-else/"));
// Italian doesn't have RSS enabled
assert!(!file_exists!(public, "it/rss.xml"));
}

View file

@ -11,8 +11,11 @@ highlight_code = false
# Whether to build a search index to be used later on by a JavaScript library
build_search_index = false
generate_rss = true
languages = [
{code = "fr"},
{code = "fr", rss = true},
{code = "it", rss = false},
]
[extra]

View file

@ -0,0 +1,4 @@
+++
sort_by = "date"
insert_anchors = "right"
+++

View file

@ -0,0 +1,7 @@
+++
title = "Un slug fixe"
slug = "something-else"
date = 2017-01-01
+++
Una pagina che definisce il suo slug nel front-matter