mylloon.fr/src/routes/index.rs

58 lines
1.3 KiB
Rust
Raw Normal View History

use actix_web::{get, web, Responder};
2023-04-11 10:45:25 +02:00
use cached::proc_macro::once;
use ramhorns::Content;
2023-02-08 20:49:05 +01:00
use crate::{
config::Config,
misc::{
markdown::{read_file, File, TypeFileMetadata},
utils::{make_kw, Html},
},
template::{Infos, NavBar},
};
2023-02-09 11:19:53 +01:00
2023-02-08 20:49:05 +01:00
#[get("/")]
2023-10-24 11:50:30 +02:00
async fn page(config: web::Data<Config>) -> impl Responder {
Html(build_page(config.get_ref().to_owned()))
2023-02-08 20:49:05 +01:00
}
2023-02-08 22:14:57 +01:00
#[derive(Content, Debug)]
struct IndexTemplate {
navbar: NavBar,
fullname: String,
content: Option<File>,
}
2023-04-11 10:45:25 +02:00
#[once(time = 60)]
2023-10-24 11:50:30 +02:00
fn build_page(config: Config) -> String {
let mut content = read_file(
&format!("{}/index.md", config.locations.data_dir),
TypeFileMetadata::Generic,
);
if content.is_none() {
content = read_file("README.md", TypeFileMetadata::Generic);
}
2023-04-11 10:16:46 +02:00
config.tmpl.render(
"index.html",
IndexTemplate {
navbar: NavBar {
index: true,
..NavBar::default()
},
fullname: config
.fc
.fullname
.to_owned()
.unwrap_or("Fullname".to_owned()),
content,
},
2023-04-11 10:16:46 +02:00
Infos {
2023-04-28 12:49:48 +02:00
page_title: config.fc.fullname,
page_desc: Some("Page principale".into()),
page_kw: make_kw(&["index", "étudiant", "accueil"]),
2023-04-11 10:16:46 +02:00
},
)
2023-02-08 22:14:57 +01:00
}