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.
This commit is contained in:
damontecres 2025-10-22 18:12:14 -04:00 committed by GitHub
parent b8202c06ff
commit f5ee5eceab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 27 additions and 0 deletions

View file

@ -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,

View file

@ -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<DialogItem> =
@ -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(

View file

@ -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 ->

View file

@ -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 ->