aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2026-01-01 22:11:02 +0100
committerLibravatar cel 🌸 <cel@bunny.garden>2026-01-01 22:16:58 +0100
commit324794a9e8d60c9e187dd8c24f9cae076e933142 (patch)
tree48cf25db9a79af578a338100d1ce44203f0db627 /src/main.rs
parent7c14130b61d806b42e7c0d1c8cf846b964caadff (diff)
downloadblossom-324794a9e8d60c9e187dd8c24f9cae076e933142.tar.gz
blossom-324794a9e8d60c9e187dd8c24f9cae076e933142.tar.bz2
blossom-324794a9e8d60c9e187dd8c24f9cae076e933142.zip
new home feed
Diffstat (limited to 'src/main.rs')
-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,
+ }
}
}