Skip to content

Commit 3e335d1

Browse files
committed
Show links to blogs and their latest post.
1 parent 7b56103 commit 3e335d1

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

src/main.rs

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ struct Generator<'a> {
1818
handlebars: Handlebars<'a>,
1919
blogs: Vec<Blog>,
2020
out_directory: PathBuf,
21+
file_url: String,
2122
}
2223

2324
#[derive(Debug, Serialize)]
@@ -57,10 +58,23 @@ impl<'a> Generator<'a> {
5758
handlebars.register_templates_directory(".hbs", "templates")?;
5859
handlebars.register_helper("month_name", Box::new(hb_month_name_helper));
5960

61+
let file_url = format!(
62+
"file:///{}/",
63+
out_directory
64+
.as_ref()
65+
.canonicalize()
66+
.unwrap_or(out_directory.as_ref().to_owned())
67+
.display()
68+
.to_string()
69+
.trim_start_matches('/')
70+
.replace(' ', "%20")
71+
);
72+
6073
Ok(Generator {
6174
handlebars,
6275
blogs: crate::blogs::load(posts_directory.as_ref())?,
6376
out_directory: out_directory.as_ref().into(),
77+
file_url,
6478
})
6579
}
6680

@@ -103,16 +117,24 @@ impl<'a> Generator<'a> {
103117
fn render_blog(&self, blog: &Blog) -> Result<(), Box<dyn Error>> {
104118
std::fs::create_dir_all(self.out_directory.join(blog.prefix()))?;
105119

106-
self.render_index(blog)?;
120+
let path = self.render_index(blog)?;
121+
122+
println!("{}: {}{}", blog.title(), self.file_url, path.display());
123+
107124
self.render_feed(blog)?;
108125
self.render_releases_feed(blog)?;
109-
for post in blog.posts() {
110-
self.render_post(blog, post)?;
126+
127+
for (i, post) in blog.posts().iter().enumerate() {
128+
let path = self.render_post(blog, post)?;
129+
if i == 0 {
130+
println!("└─ Latest post: {}{}\n", self.file_url, path.display());
131+
}
111132
}
133+
112134
Ok(())
113135
}
114136

115-
fn render_index(&self, blog: &Blog) -> Result<(), Box<dyn Error>> {
137+
fn render_index(&self, blog: &Blog) -> Result<PathBuf, Box<dyn Error>> {
116138
let other_blogs: Vec<_> = self
117139
.blogs
118140
.iter()
@@ -132,11 +154,12 @@ impl<'a> Generator<'a> {
132154
"other_blogs": other_blogs,
133155
"root": blog.path_back_to_root(),
134156
});
135-
self.render_template(blog.prefix().join("index.html"), "index", data)?;
136-
Ok(())
157+
let path = blog.prefix().join("index.html");
158+
self.render_template(&path, "index", data)?;
159+
Ok(path)
137160
}
138161

139-
fn render_post(&self, blog: &Blog, post: &Post) -> Result<(), Box<dyn Error>> {
162+
fn render_post(&self, blog: &Blog, post: &Post) -> Result<PathBuf, Box<dyn Error>> {
140163
let path = blog
141164
.prefix()
142165
.join(format!("{:04}", &post.year))
@@ -156,8 +179,9 @@ impl<'a> Generator<'a> {
156179
"root": blog.path_back_to_root().join("../../../"),
157180
});
158181

159-
self.render_template(path.join(filename), &post.layout, data)?;
160-
Ok(())
182+
let path = path.join(filename);
183+
self.render_template(&path, &post.layout, data)?;
184+
Ok(path)
161185
}
162186

163187
fn render_feed(&self, blog: &Blog) -> Result<(), Box<dyn Error>> {

0 commit comments

Comments
 (0)