From 62755692e9f0e3db1a2758ad450e9c6eed54bdf9 Mon Sep 17 00:00:00 2001 From: 0xsysr3ll <31414959+0xSysR3ll@users.noreply.github.com> Date: Fri, 23 Jan 2026 12:26:07 +0100 Subject: [PATCH] fix(availability-sync): fix 4K media availability detection (#2298) --- server/lib/availabilitySync.ts | 44 ++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/server/lib/availabilitySync.ts b/server/lib/availabilitySync.ts index bd01b457..8c7585b3 100644 --- a/server/lib/availabilitySync.ts +++ b/server/lib/availabilitySync.ts @@ -816,6 +816,50 @@ class AvailabilitySync { this.plexSeasonsCache[ratingKey4k] = await this.plexClient?.getChildrenMetadata(ratingKey4k); } + + if (plexMedia) { + if (ratingKey === ratingKey4k) { + plexMedia = undefined; + } + + if ( + plexMedia && + media.mediaType === 'movie' && + !plexMedia.Media?.some( + (mediaItem) => (mediaItem.width ?? 0) >= 2000 + ) + ) { + plexMedia = undefined; + } + + if (plexMedia && media.mediaType === 'tv') { + const cachedSeasons = this.plexSeasonsCache[ratingKey4k]; + if (cachedSeasons?.length) { + let has4kInAnySeason = false; + for (const season of cachedSeasons) { + try { + const episodes = await this.plexClient?.getChildrenMetadata( + season.ratingKey + ); + const has4kEpisode = episodes?.some((episode) => + episode.Media?.some( + (mediaItem) => (mediaItem.width ?? 0) >= 2000 + ) + ); + if (has4kEpisode) { + has4kInAnySeason = true; + break; + } + } catch { + // If we can't fetch episodes for a season, continue checking other seasons + } + } + if (!has4kInAnySeason) { + plexMedia = undefined; + } + } + } + } } if (plexMedia) {