diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs index 0f14e3c..7247c33 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,6 +15,7 @@ mod utils; use std::{collections::HashSet, time::Duration}; +use chrono::{DateTime, Utc}; use i18n::set_language; use poem::http::StatusCode; use poem::i18n::unic_langid::langid; @@ -64,14 +65,51 @@ async fn home(Data(reqwest): Data<&reqwest::Client>, locale: Locale) -> template let listenbrainz = listenbrainz.unwrap_or_default(); let blogposts = blogposts.unwrap_or_default(); let poems = poems.unwrap_or_default(); + + let mut posts = blogposts + .iter() + .take(10) + .map(Clone::clone) + .map(HomeFeedItem::Blogpost) + .chain( + poems + .iter() + .take(10) + .map(Clone::clone) + .map(HomeFeedItem::Poem), + ) + .collect::<Vec<_>>(); + + posts.sort_by_key(|i| i.published_at()); + posts.reverse(); + posts.truncate(10); + let poem = poems.choose(&mut rand::thread_rng()).cloned(); + templates::Home { title: locale.text("title").unwrap(), is_live, listenbrainz, + feed: posts, blogposts, poem, locale, + filter_tags: HashSet::new(), + jiggle: 8, + } +} + +pub enum HomeFeedItem { + Blogpost(Blogpost), + Poem(Poem), +} + +impl HomeFeedItem { + pub fn published_at(&self) -> DateTime<Utc> { + match self { + HomeFeedItem::Blogpost(post) => post.published_at, + HomeFeedItem::Poem(poem) => poem.published_at, + } } } |
