From 99f8520f481bc6e7a87e2353365770cb24a2cb9f Mon Sep 17 00:00:00 2001 From: Defendi <72807509+tiagodefendi@users.noreply.github.com> Date: Fri, 8 May 2026 09:09:50 -0300 Subject: [PATCH] fix(plex-watchlist-sync): handle MediaContainer.Video fallback in watchlist sync (#2992) --- server/api/plextv.ts | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/server/api/plextv.ts b/server/api/plextv.ts index cec084c30..b8f3c9a47 100644 --- a/server/api/plextv.ts +++ b/server/api/plextv.ts @@ -107,16 +107,18 @@ interface WatchlistResponse { }; } +type PlexMetadataItem = { + ratingKey: string; + type: 'movie' | 'show'; + title: string; + Guid?: { + id: `imdb://tt${number}` | `tmdb://${number}` | `tvdb://${number}`; + }[]; +}; interface MetadataResponse { MediaContainer: { - Metadata: { - ratingKey: string; - type: 'movie' | 'show'; - title: string; - Guid?: { - id: `imdb://tt${number}` | `tmdb://${number}` | `tvdb://${number}`; - }[]; - }[]; + Metadata?: PlexMetadataItem[]; + Video?: PlexMetadataItem[]; }; } @@ -332,7 +334,17 @@ class PlexTvAPI extends ExternalAPI { } } - const metadata = detailedResponse.MediaContainer.Metadata[0]; + const metadata = + detailedResponse.MediaContainer.Metadata?.[0] ?? + detailedResponse.MediaContainer.Video?.[0]; + + if (!metadata) { + logger.warn( + `Item with ratingKey ${watchlistItem.ratingKey} returned no metadata, skipping.`, + { label: 'Plex.TV Metadata API' } + ); + return null; + } const tmdbString = metadata.Guid?.find((guid) => guid.id.startsWith('tmdb')