Browse Source

fix: mirror channels falling out of sync when using the next streaming engine

pull/2992/head
Jason Dove 3 weeks ago
parent
commit
cefd715c28
No known key found for this signature in database
  1. 1
      CHANGELOG.md
  2. 15
      ErsatzTV.Application/Playouts/Commands/BuildPlayoutHandler.cs

1
CHANGELOG.md

@ -27,6 +27,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -27,6 +27,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Fix case where specifically-crafted requests could access management UI over streaming port
- Fix Plex page staying disabled until restart when a sign-in is not completed within two minutes, or when plex.tv cannot be reached
- Fix Plex page showing no indication that ErsatzTV has been signed out of Plex
- Fix mirror channels falling out of sync when using the next streaming engine
## [26.8.0] - 2026-08-20
### Added

15
ErsatzTV.Application/Playouts/Commands/BuildPlayoutHandler.cs

@ -312,6 +312,12 @@ public class BuildPlayoutHandler : IRequestHandler<BuildPlayout, Either<BaseErro @@ -312,6 +312,12 @@ public class BuildPlayoutHandler : IRequestHandler<BuildPlayout, Either<BaseErro
new CheckForOverlappingPlayoutItems(request.PlayoutId),
cancellationToken);
List<string> maybeMirrors = await dbContext.Channels
.AsNoTracking()
.Filter(c => c.MirrorSourceChannelId == referenceData.Channel.Id)
.Map(c => c.Number)
.ToListAsync(cancellationToken);
string fileName = Path.Combine(FileSystemLayout.ChannelGuideCacheFolder, $"{channelNumber}.xml");
if (hasChanges || !File.Exists(fileName) ||
playout.ScheduleKind is PlayoutScheduleKind.ExternalJson)
@ -319,11 +325,6 @@ public class BuildPlayoutHandler : IRequestHandler<BuildPlayout, Either<BaseErro @@ -319,11 +325,6 @@ public class BuildPlayoutHandler : IRequestHandler<BuildPlayout, Either<BaseErro
await _workerChannel.WriteAsync(new RefreshChannelData(channelNumber), cancellationToken);
// refresh guide data for all mirror channels, too
List<string> maybeMirrors = await dbContext.Channels
.AsNoTracking()
.Filter(c => c.MirrorSourceChannelId == referenceData.Channel.Id)
.Map(c => c.Number)
.ToListAsync(cancellationToken);
foreach (string mirror in maybeMirrors)
{
await _workerChannel.WriteAsync(new RefreshChannelData(mirror), cancellationToken);
@ -331,6 +332,10 @@ public class BuildPlayoutHandler : IRequestHandler<BuildPlayout, Either<BaseErro @@ -331,6 +332,10 @@ public class BuildPlayoutHandler : IRequestHandler<BuildPlayout, Either<BaseErro
}
await _workerChannel.WriteAsync(new SyncNextPlayout(channelNumber), cancellationToken);
foreach (string mirror in maybeMirrors)
{
await _workerChannel.WriteAsync(new SyncNextPlayout(mirror), cancellationToken);
}
await _workerChannel.WriteAsync(new ExtractEmbeddedSubtitles(playout.Id), cancellationToken);

Loading…
Cancel
Save