From dff036ee639d7b7945da1fe697c8c27d72e5eec4 Mon Sep 17 00:00:00 2001 From: KhooLy <73142442+KhooLy@users.noreply.github.com> Date: Mon, 13 Jul 2026 22:48:58 +0300 Subject: [PATCH] Surface content_types on discover state for the client to build a dynamic Type filter Kotlin's readDiscoverCatalogFilters effect now returns a contentTypes list (distinct catalog types found across installed addons, e.g. movie/series/anime), but the effect completion flows back through the engine's own discover state before Kotlin ever sees it again. Added content_types to DiscoverState and store it in the completion handler for readDiscoverCatalogFilters, preserving it across a fresh discover dispatch the same way catalogs/genres already are. --- src/headless_engine/discover.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/headless_engine/discover.rs b/src/headless_engine/discover.rs index 031d67d..73c8339 100644 --- a/src/headless_engine/discover.rs +++ b/src/headless_engine/discover.rs @@ -16,6 +16,7 @@ pub(super) struct DiscoverState { result_sources: Value, catalogs: Value, genres: Value, + content_types: Value, error: Value, generation: u64, paging: DiscoverPaging, @@ -140,6 +141,7 @@ pub(super) fn dispatch_discover( result_sources: Value::Null, catalogs: engine.state.discover.catalogs.clone(), genres: engine.state.discover.genres.clone(), + content_types: engine.state.discover.content_types.clone(), error: Value::Null, generation, paging: DiscoverPaging::default(), @@ -287,6 +289,11 @@ pub(super) fn complete( .get("genres") .cloned() .unwrap_or_else(|| serde_json::json!([])); + engine.state.discover.content_types = result + .value + .get("contentTypes") + .cloned() + .unwrap_or_else(|| serde_json::json!([])); engine.state.discover.error = Value::Null; } else { engine.state.discover.error = normalize_error(result.error.clone());