From 66c4065059b8bd8d4a33f8eddb9bac3a823cabe6 Mon Sep 17 00:00:00 2001 From: jmanczak Date: Thu, 9 Apr 2026 20:20:36 +0200 Subject: [PATCH 1/2] small boast --- src/config.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config.rs b/src/config.rs index 4ca0822..876ba57 100644 --- a/src/config.rs +++ b/src/config.rs @@ -14,6 +14,7 @@ pub const REFERENCE_SPLASHES: &[&str] = &[ "memory palace", "take a break sometimes", "segmentation fault (jk)", + "over 100 lines of git history!", ]; pub fn envlogger_write_format(buf: &mut Formatter, rec: &Record) -> io::Result<()> { From 34f48c2b3dca922e088fa5552d33372449689d25 Mon Sep 17 00:00:00 2001 From: jmanczak Date: Thu, 9 Apr 2026 20:30:00 +0200 Subject: [PATCH 2/2] random quote for the dashboard --- src/quotes/mod.rs | 12 ++++++++++++ src/web/pages/dashboard.rs | 23 ++++++++++++++++------- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/quotes/mod.rs b/src/quotes/mod.rs index 7c0f969..841aa27 100644 --- a/src/quotes/mod.rs +++ b/src/quotes/mod.rs @@ -127,6 +127,18 @@ impl Quote { None => Ok(None), } } + pub fn get_random(conn: &Connection) -> Result, QuoteError> { + let id: Option = conn + .query_row("SELECT id FROM quotes ORDER BY RANDOM() LIMIT 1", (), |r| { + r.get(0) + }) + .optional()?; + + match id { + Some(id) => Ok(Some(Self::get_by_id(conn, id)?)), + None => Ok(None), + } + } pub fn get_chronological_offset( conn: &Connection, offset: i64, diff --git a/src/web/pages/dashboard.rs b/src/web/pages/dashboard.rs index b1ada09..66119ce 100644 --- a/src/web/pages/dashboard.rs +++ b/src/web/pages/dashboard.rs @@ -29,6 +29,10 @@ pub async fn page(req: Request) -> Result { Some(_) => Quote::get_newest(&conn)?, None => Quote::get_newest_public(&conn)?, }; + let random_quote = match u { + Some(_) => Quote::get_random(&conn)?, + None => None, + }; Ok(base( "Dashboard | Mnemosyne", @@ -38,21 +42,26 @@ pub async fn page(req: Request) -> Result { div class="mx-auto max-w-4xl px-2 mt-4 grid grid-cols-1 --sm:grid-cols-2 gap-4" { div class="flex flex-col" { p {"Newest Quote"} - @if let Some(q) = newest_quote { + @if let Some(q) = &newest_quote { p class="text-neutral-500 font-light mb-4" { "This just in! This quote was added " (format_time_ago(q.get_creation_timestamp())) " ago." } - div class="flex-1 [&>div]:h-full" {(quote(&q))} + div class="flex-1 [&>div]:h-full" {(quote(q))} } @else { p class="text-neutral-500 font-light mb-4" {"No quotes yet."} } } - // div class="flex flex-col" { - // p {"Quote of the Day"} // maybe "Quote of the Moment" instead? idk, this algorithm needs to be crazy - // p class="text-neutral-500 font-light mb-4" {"This quote was voiced a year ago today."} - // div class="flex-1 [&>div]:h-full" {(quote(&sample_quote_2()))} - // } + @if let Some(q) = random_quote { + div class="flex flex-col" { + p {"Random Quote"} + p class="text-neutral-500 font-light mb-4" { + "This quote was added " + (format_time_ago(q.get_creation_timestamp())) " ago." + } + div class="flex-1 [&>div]:h-full" {(quote(&q))} + } + } } div class="mx-auto max-w-4xl px-2 mt-4" { p class="mb-2" {"Quick access"}