From ddda10f3a1d4e625780a98be4c800e2c0cacf36b Mon Sep 17 00:00:00 2001 From: Damontecres Date: Tue, 23 Dec 2025 18:38:22 -0500 Subject: [PATCH] Wire up search page to discover items --- .../wholphin/data/model/DiscoverItem.kt | 13 +++++++---- .../wholphin/ui/main/SearchPage.kt | 23 ++++++++++++++++--- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/DiscoverItem.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/DiscoverItem.kt index 251f45b3..e804f900 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/DiscoverItem.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/DiscoverItem.kt @@ -10,23 +10,26 @@ import com.github.damontecres.wholphin.services.SeerrSearchResult import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.UseSerializers +import org.jellyfin.sdk.model.api.BaseItemKind import org.jellyfin.sdk.model.serializer.UUIDSerializer import org.jellyfin.sdk.model.serializer.toUUIDOrNull import java.util.UUID @Serializable -enum class SeerrItemType { +enum class SeerrItemType( + val baseItemKind: BaseItemKind?, +) { @SerialName("movie") - MOVIE, + MOVIE(BaseItemKind.MOVIE), @SerialName("tv") - TV, + TV(BaseItemKind.SERIES), @SerialName("person") - PERSON, + PERSON(BaseItemKind.PERSON), @SerialName("unknown") - UNKNOWN, + UNKNOWN(null), ; companion object { diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/main/SearchPage.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/main/SearchPage.kt index 07bf93e6..a8b9790b 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/main/SearchPage.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/main/SearchPage.kt @@ -55,6 +55,7 @@ import com.github.damontecres.wholphin.ui.data.RowColumn import com.github.damontecres.wholphin.ui.ifElse import com.github.damontecres.wholphin.ui.isNotNullOrBlank import com.github.damontecres.wholphin.ui.launchIO +import com.github.damontecres.wholphin.ui.nav.Destination import com.github.damontecres.wholphin.ui.rememberPosition import com.github.damontecres.wholphin.ui.setValueOnMain import com.github.damontecres.wholphin.ui.tryRequestFocus @@ -324,8 +325,20 @@ fun SearchPage( rowIndex = SEERR_ROW, position = position, focusRequester = focusRequester, - onClickItem = { index, item -> - // TODO seerr + onClickItem = { _, _ -> + // no-op + }, + onClickDiscover = { _, item -> + val dest = + if (item.jellyfinItemId != null && item.type.baseItemKind != null) { + Destination.MediaItem( + itemId = item.jellyfinItemId, + type = item.type.baseItemKind, + ) + } else { + Destination.DiscoveredItem(item) + } + viewModel.navigationManager.navigateTo(dest) }, onClickPosition = { position = it }, modifier = Modifier.fillMaxWidth(), @@ -342,6 +355,7 @@ fun LazyListScope.searchResultRow( onClickItem: (Int, BaseItem) -> Unit, onClickPosition: (RowColumn) -> Unit, modifier: Modifier = Modifier, + onClickDiscover: ((Int, DiscoverItem) -> Unit)? = null, cardContent: @Composable ( index: Int, item: BaseItem?, @@ -419,7 +433,10 @@ fun LazyListScope.searchResultRow( ItemRow( title = title, items = r.items, - onClickItem = { index, item -> }, + onClickItem = { index, item -> + onClickPosition.invoke(RowColumn(rowIndex, index)) + onClickDiscover?.invoke(index, item) + }, onLongClickItem = { _, _ -> }, modifier = modifier, cardContent = { index: Int, item: DiscoverItem?, mod: Modifier, onClick: () -> Unit, onLongClick: () -> Unit ->