use std::collections::HashSet;
use askama::Template;
use poem::http::StatusCode;
use rand::{thread_rng, Rng};
use crate::i18n::Locale;
use crate::poetry;
use crate::posts::Post;
use crate::{blog, scrobbles::NowPlayingData};
mod filters {
pub fn mytruncate(s: impl std::fmt::Display, length: usize) -> ::askama::Result<String> {
let mut s = s.to_string();
s.truncate(length);
Ok(s)
}
}
#[derive(Template)]
#[template(path = "home.html")]
pub struct Home {
pub title: String,
pub is_live: bool,
pub listenbrainz: NowPlayingData,
pub blogposts: Vec<blog::Blogpost>,
pub poem: Option<poetry::Poem>,
pub locale: Locale,
}
#[derive(Template)]
#[template(path = "blogpost.html")]
pub struct Blogpost {
pub title: String,
pub blogpost: blog::Blogpost,
pub filter_tags: HashSet<String>,
pub locale: Locale,
}
// filtertags, blogpost-panel
#[derive(Template)]
#[template(path = "blog.html")]
pub struct Blog {
pub title: String,
pub blogposts: Vec<blog::Blogpost>,
pub tags: Vec<String>,
pub filter_tags: HashSet<String>,
pub locale: Locale,
}
#[derive(Template)]
#[template(path = "poem.html")]
pub struct Poem {
pub title: String,
pub poem: poetry::Poem,
pub jiggle: isize,
pub locale: Locale,
}
#[derive(Template)]
#[template(path = "poetry.html")]
pub struct Poetry {
pub title: String,
pub poems: Vec<poetry::Poem>,
pub jiggle: isize,
pub locale: Locale,
}
#[derive(Template)]
#[template(path = "contact.html")]
pub struct Contact {
pub title: String,
pub locale: Locale,
}
#[derive(Template)]
#[template(path = "error.html")]
pub struct Error {
pub title: String,
pub status: StatusCode,
pub message: String,
// TODO: localize error page
}