diff --git a/CHANGELOG.md b/CHANGELOG.md index bf256866..3f2eecdb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -65,6 +65,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix local subtitle scanner to detect non-lowercase extensions (e.g. `Movie (2000).EN.SRT`) - Fix adding a single image to a manual collection from search results - Fix loading manual collection view when collection contains images +- Fix edge case where block playout history would get stuck and repeat an item ### Changed - Remove some unnecessary API calls related to media server scanning and paging diff --git a/ErsatzTV.Core/Scheduling/HistoryDetails.cs b/ErsatzTV.Core/Scheduling/HistoryDetails.cs index fff7cef0..932a2ac8 100644 --- a/ErsatzTV.Core/Scheduling/HistoryDetails.cs +++ b/ErsatzTV.Core/Scheduling/HistoryDetails.cs @@ -82,7 +82,14 @@ internal static class HistoryDetails var copy = collectionItems.ToList(); Details details = JsonConvert.DeserializeObject
(detailsString); - if (details.SeasonNumber.HasValue && details.EpisodeNumber.HasValue) + + // try for an exact match first + if (details.MediaItemId != null) + { + maybeMatchedItem = collectionItems.Find(mi => mi.Id == details.MediaItemId); + } + + if (maybeMatchedItem.IsNone && details.SeasonNumber.HasValue && details.EpisodeNumber.HasValue) { int season = details.SeasonNumber.Value; int episode = details.EpisodeNumber.Value; @@ -108,7 +115,7 @@ internal static class HistoryDetails maybeMatchedItem = fakeItem; } } - else if (playbackOrder is PlaybackOrder.Chronological && details.ReleaseDate.HasValue) + else if (maybeMatchedItem.IsNone && playbackOrder is PlaybackOrder.Chronological && details.ReleaseDate.HasValue) { maybeMatchedItem = Optional(collectionItems.Find(ci => MatchReleaseDate(ci, details.ReleaseDate.Value))); @@ -119,7 +126,6 @@ internal static class HistoryDetails maybeMatchedItem = fakeItem; } } - // TODO: match media item foreach (MediaItem matchedItem in maybeMatchedItem) {