diff options
| author | 2026-01-01 22:11:02 +0100 | |
|---|---|---|
| committer | 2026-01-01 22:16:58 +0100 | |
| commit | 324794a9e8d60c9e187dd8c24f9cae076e933142 (patch) | |
| tree | 48cf25db9a79af578a338100d1ce44203f0db627 /src/main.rs | |
| parent | 7c14130b61d806b42e7c0d1c8cf846b964caadff (diff) | |
| download | blossom-324794a9e8d60c9e187dd8c24f9cae076e933142.tar.gz blossom-324794a9e8d60c9e187dd8c24f9cae076e933142.tar.bz2 blossom-324794a9e8d60c9e187dd8c24f9cae076e933142.zip | |
new home feed
Diffstat (limited to '')
| -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, + } } } |
