From f5ee5eceab81babf6bae4bc928a8608d4ae71858 Mon Sep 17 00:00:00 2001 From: damontecres <154766448+damontecres@users.noreply.github.com> Date: Wed, 22 Oct 2025 18:12:14 -0400 Subject: [PATCH] Add favoriting to the 'more' menus (#56) Follow up to #55 & #38 Adds the option to favorite/unfavorite from the "More" dialog menus for movies & shows. --- .../damontecres/wholphin/ui/components/Dialogs.kt | 2 ++ .../damontecres/wholphin/ui/detail/DetailUtils.kt | 11 +++++++++++ .../wholphin/ui/detail/movie/MovieDetails.kt | 2 ++ .../wholphin/ui/detail/series/SeriesOverview.kt | 12 ++++++++++++ 4 files changed, 27 insertions(+) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/Dialogs.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/Dialogs.kt index 3225a749..74a921bb 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/Dialogs.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/Dialogs.kt @@ -87,6 +87,7 @@ data class DialogItem( constructor( @StringRes text: Int, @StringRes iconStringRes: Int, + iconColor: Color = Color.Unspecified, onClick: () -> Unit, ) : this( headlineContent = { @@ -98,6 +99,7 @@ data class DialogItem( Text( text = stringResource(id = iconStringRes), fontFamily = FontAwesome, + color = iconColor, ) }, onClick = onClick, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/DetailUtils.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/DetailUtils.kt index a5b1a58b..c8c36af9 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/DetailUtils.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/DetailUtils.kt @@ -35,8 +35,10 @@ fun buildMoreDialogItems( series: BaseItem?, sourceId: UUID?, watched: Boolean, + favorite: Boolean, navigateTo: (Destination) -> Unit, onClickWatch: (Boolean) -> Unit, + onClickFavorite: (Boolean) -> Unit, onChooseVersion: () -> Unit, onChooseTracks: (MediaStreamType) -> Unit, ): List = @@ -64,6 +66,15 @@ fun buildMoreDialogItems( onClickWatch.invoke(!watched) }, ) + add( + DialogItem( + text = if (favorite) R.string.remove_favorite else R.string.add_favorite, + iconStringRes = R.string.fa_heart, + iconColor = if (favorite) Color.Red else Color.Unspecified, + ) { + onClickFavorite.invoke(!favorite) + }, + ) series?.let { add( DialogItem( diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt index 980c91d3..263e8f96 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt @@ -313,10 +313,12 @@ fun MovieDetails( buildMoreDialogItems( item = movie, watched = movie.data.userData?.played ?: false, + favorite = movie.data.userData?.isFavorite ?: false, series = null, sourceId = chosenStreams?.sourceId, navigateTo = viewModel.navigationManager::navigateTo, onClickWatch = viewModel::setWatched, + onClickFavorite = viewModel::setFavorite, onChooseVersion = { chooseVersion = chooseVersionParams(movie.data.mediaSources!!) { idx -> diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt index b6a52515..7f80c335 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt @@ -160,6 +160,7 @@ fun SeriesOverview( buildMoreDialogItems( ep, watched = ep.data.userData?.played ?: false, + favorite = ep.data.userData?.isFavorite ?: false, series = series, sourceId = chosenStreams?.sourceId, navigateTo = viewModel::navigateTo, @@ -174,6 +175,17 @@ fun SeriesOverview( ) } }, + onClickFavorite = { favorite -> + episodeList + ?.getOrNull(position.episodeRowIndex) + ?.let { + viewModel.setFavorite( + it.id, + favorite, + position.episodeRowIndex, + ) + } + }, onChooseVersion = { chooseVersion = chooseVersionParams(ep.data.mediaSources!!) { idx ->