aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main.rs38
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,
+ }
}
}