@@ -18,6 +18,7 @@ struct Generator<'a> {
18
18
handlebars : Handlebars < ' a > ,
19
19
blogs : Vec < Blog > ,
20
20
out_directory : PathBuf ,
21
+ file_url : String ,
21
22
}
22
23
23
24
#[ derive( Debug , Serialize ) ]
@@ -57,10 +58,23 @@ impl<'a> Generator<'a> {
57
58
handlebars. register_templates_directory ( ".hbs" , "templates" ) ?;
58
59
handlebars. register_helper ( "month_name" , Box :: new ( hb_month_name_helper) ) ;
59
60
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
+
60
73
Ok ( Generator {
61
74
handlebars,
62
75
blogs : crate :: blogs:: load ( posts_directory. as_ref ( ) ) ?,
63
76
out_directory : out_directory. as_ref ( ) . into ( ) ,
77
+ file_url,
64
78
} )
65
79
}
66
80
@@ -103,16 +117,24 @@ impl<'a> Generator<'a> {
103
117
fn render_blog ( & self , blog : & Blog ) -> Result < ( ) , Box < dyn Error > > {
104
118
std:: fs:: create_dir_all ( self . out_directory . join ( blog. prefix ( ) ) ) ?;
105
119
106
- self . render_index ( blog) ?;
120
+ let path = self . render_index ( blog) ?;
121
+
122
+ println ! ( "{}: {}{}" , blog. title( ) , self . file_url, path. display( ) ) ;
123
+
107
124
self . render_feed ( blog) ?;
108
125
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
+ }
111
132
}
133
+
112
134
Ok ( ( ) )
113
135
}
114
136
115
- fn render_index ( & self , blog : & Blog ) -> Result < ( ) , Box < dyn Error > > {
137
+ fn render_index ( & self , blog : & Blog ) -> Result < PathBuf , Box < dyn Error > > {
116
138
let other_blogs: Vec < _ > = self
117
139
. blogs
118
140
. iter ( )
@@ -132,11 +154,12 @@ impl<'a> Generator<'a> {
132
154
"other_blogs" : other_blogs,
133
155
"root" : blog. path_back_to_root( ) ,
134
156
} ) ;
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)
137
160
}
138
161
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 > > {
140
163
let path = blog
141
164
. prefix ( )
142
165
. join ( format ! ( "{:04}" , & post. year) )
@@ -156,8 +179,9 @@ impl<'a> Generator<'a> {
156
179
"root" : blog. path_back_to_root( ) . join( "../../../" ) ,
157
180
} ) ;
158
181
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)
161
185
}
162
186
163
187
fn render_feed ( & self , blog : & Blog ) -> Result < ( ) , Box < dyn Error > > {
0 commit comments