Skip to content

Add spoiler-related options - hide unwatched item titles, overviews, and thumbnails#811

Open
skoshy wants to merge 1 commit intodamontecres:mainfrom
skoshy:hide-unwatched-descriptions
Open

Add spoiler-related options - hide unwatched item titles, overviews, and thumbnails#811
skoshy wants to merge 1 commit intodamontecres:mainfrom
skoshy:hide-unwatched-descriptions

Conversation

@skoshy
Copy link
Copy Markdown

@skoshy skoshy commented Feb 1, 2026

Description

To prevent spoilers, I wanted to add an option to hide unwatched item overviews / descriptions. I also added the ability to hide unwatched episode thumbnails, either with a blur effect or by using the series thumbnail.

This also addresses items without an overview by giving them a "No overview" text.

I intentionally left the overview still visible when viewing an item's media information, so the user can still look at the overview if they really intend to dig deeper into the item.

Related issues

#810
#360

Screenshots

Menu items:

Screenshot_20260201_181237

Hidden overview, blurred thumbnail:

Screenshot_20260201_181300

Hidden overview, hidden title, series thumbnail:

Screenshot_20260201_181222

AI/LLM usage

I used Gemini to help with this PR. I've tested the code manually in Android Studio (how I generated the screenshots).

@MorningStarGG
Copy link
Copy Markdown

So you're also working on one to blur/hide the thumbnails? Either way, this is a good step towards solving one of the more major missing things that most clients ignore.

@skoshy skoshy force-pushed the hide-unwatched-descriptions branch 3 times, most recently from b6f7aa8 to 8a64d87 Compare February 1, 2026 23:23
@skoshy skoshy changed the title Add option to hide unwatched item descriptions Add option to hide unwatched item overviews and thumbnails Feb 1, 2026
@skoshy skoshy changed the title Add option to hide unwatched item overviews and thumbnails Add options to hide unwatched item overviews and thumbnails Feb 1, 2026
@skoshy
Copy link
Copy Markdown
Author

skoshy commented Feb 1, 2026

I've updated the PR, there's now more granular control for movies, episodes, and also episode titles which can also be a source of spoilers.

I've also added the ability to hide thumbnails for episodes - either by blurring them or by using the series thumbnail

@skoshy skoshy force-pushed the hide-unwatched-descriptions branch 3 times, most recently from 77ca56a to a359e9a Compare February 1, 2026 23:50
@skoshy skoshy force-pushed the hide-unwatched-descriptions branch from a359e9a to 16b84c8 Compare February 2, 2026 00:07
@skoshy skoshy changed the title Add options to hide unwatched item overviews and thumbnails Add spoiler-related options - hide unwatched item titles, overviews, and thumbnails Feb 2, 2026
@MorningStarGG
Copy link
Copy Markdown

MorningStarGG commented Feb 11, 2026

I have built and tested this on the latest git as of today's 0.4.2 and this is working on my onn 4k Pro Android 14. However is the title being hidden also supposed to hide the title of the episode in the player? Right now it doesn't. So if I bring up the media controls the title still shows even with the option to hide them enabled.

Also still shows the thumbnail, episode info, and title in the next up box at the end of watching an episode. I have title, description hidden and thumbnail blur on but seems to not apply to the next up for some reason.

Otherwise, seems good here.

Copy link
Copy Markdown
Owner

@damontecres damontecres left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A good start, but needs some work.

Comment on lines +114 to +117
interactionSource = interactionSource ?: remember { MutableInteractionSource() },
colors =
CardDefaults.colors(
// containerColor = Color.Transparent,
containerColor = androidx.compose.ui.graphics.Color.Transparent,
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your AI/LLM is making unnecessary changes.

modifier =
Modifier
.fillMaxSize()
.dimAndBlur(finalBlur),
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The blur effect does not work for Android before 12, so a lot of the features implemented in this PR won't work for many users.

Comment on lines +70 to +81
val isEpisode = item?.type == org.jellyfin.sdk.model.api.BaseItemKind.EPISODE
val isUnwatched = item?.data?.userData?.played == false
val isEpisodeThumbnail =
isEpisode &&
!item.useSeriesForPrimary &&
imageType == ImageType.PRIMARY

val useSeriesThumbnail =
isEpisodeThumbnail && isUnwatched && spoilerMode == EpisodeThumbnailSpoilerMode.SPOILER_SERIES_THUMBNAIL
val finalBlur =
isEpisodeThumbnail && isUnwatched && spoilerMode == EpisodeThumbnailSpoilerMode.SPOILER_BLUR

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This composable really shouldn't have logic to it. Callers further up the chain should be telling it what to do.

) {
Text(
text = episodeName ?: "",
text = if (isHidden) stringResource(com.github.damontecres.wholphin.R.string.title_hidden) else (episodeName ?: ""),
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move logic up in the chain or make a new composable since you are also adjusting the font style

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it make sense to apply this to the Discover related pages?

return result
}

fun shouldHideOverview(preferences: UserPreferences): Boolean {
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a weird place to implement this logic.

Maybe move the spoiler settings into their own object and add extension functions to that for this logic.

@skoshy
Copy link
Copy Markdown
Author

skoshy commented Feb 23, 2026

Thanks! Have some other things going on at the moment, but I'll be going through these and making the necessary changes hopefully soon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants