From cc2dbf4ac270d4cd673cf790c86d22ae87335d50 Mon Sep 17 00:00:00 2001 From: TheGeneralist <180094941+thegeneralist01@users.noreply.github.com> Date: Wed, 24 Jun 2026 19:16:21 +0200 Subject: [PATCH] feat(archive): add has_favicon to EntrySummary --- crates/archivr-core/src/archive.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/crates/archivr-core/src/archive.rs b/crates/archivr-core/src/archive.rs index be14c24..ae26171 100644 --- a/crates/archivr-core/src/archive.rs +++ b/crates/archivr-core/src/archive.rs @@ -26,6 +26,8 @@ pub struct EntrySummary { pub artifact_count: i64, pub total_artifact_bytes: i64, pub parent_entry_uid: Option, + /// True if a `favicon` artifact exists for this entry. + pub has_favicon: bool, } #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize)] @@ -183,7 +185,8 @@ pub fn list_root_entries(conn: &rusqlite::Connection) -> Result Result(10)? != 0, }) })? .collect::>>()?; @@ -383,7 +387,8 @@ const ENTRY_SELECT_COLS: &str = "SELECT e.entry_uid, e.archived_at, e.source_kind, e.entity_kind, e.title, \ e.visibility, si.canonical_url, COUNT(ea.id) AS artifact_count, \ COALESCE(SUM(b.byte_size), 0) AS total_artifact_bytes, \ - parent.entry_uid AS parent_entry_uid"; + parent.entry_uid AS parent_entry_uid, \ + EXISTS(SELECT 1 FROM entry_artifacts fav WHERE fav.entry_id = e.id AND fav.artifact_role = 'favicon') AS has_favicon"; const ENTRY_FROM_JOINS: &str = "FROM archived_entries e \ @@ -483,6 +488,7 @@ pub fn search_entries( artifact_count: row.get(7)?, total_artifact_bytes: row.get(8)?, parent_entry_uid: row.get(9)?, + has_favicon: row.get::<_, i64>(10)? != 0, }) })? .collect::>>()?; @@ -643,7 +649,8 @@ pub fn entries_for_tag( SELECT e.entry_uid, e.archived_at, e.source_kind, e.entity_kind, e.title, e.visibility, si.canonical_url, COUNT(ea.id) AS artifact_count, COALESCE(SUM(b.byte_size), 0) AS total_artifact_bytes, - parent.entry_uid AS parent_entry_uid + parent.entry_uid AS parent_entry_uid, + EXISTS(SELECT 1 FROM entry_artifacts fav WHERE fav.entry_id = e.id AND fav.artifact_role = 'favicon') AS has_favicon FROM archived_entries e JOIN source_identities si ON si.id = e.source_identity_id LEFT JOIN entry_artifacts ea ON ea.entry_id = e.id @@ -667,6 +674,7 @@ pub fn entries_for_tag( artifact_count: row.get(7)?, total_artifact_bytes: row.get(8)?, parent_entry_uid: row.get(9)?, + has_favicon: row.get::<_, i64>(10)? != 0, }) })? .collect::>>()?;