From e70e4fb826eb397ef52b786bac547a493fd29d54 Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Sat, 20 Sep 2025 22:13:20 -0500 Subject: [PATCH] fix some invalid external subtitle data (#2451) --- CHANGELOG.md | 1 + .../Subtitles/Commands/ExtractEmbeddedSubtitlesHandler.cs | 7 ++++--- ErsatzTV/Services/RunOnce/DatabaseCleanerService.cs | 8 ++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee1669ff7..27cf436c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -66,6 +66,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix slow startup caused by check for overlapping playout items - Fix green line in *most* cases when overlaying content using NVIDIA acceleration and H264 output - Fix non-SRT (e.g. SSA/ASS) external subtitle playback from media servers +- Clean up some invalid external subtitle data to prevent playback failures ### Changed - Filler presets: use separate text fields for `hours`, `minutes` and `seconds` duration diff --git a/ErsatzTV.Application/Subtitles/Commands/ExtractEmbeddedSubtitlesHandler.cs b/ErsatzTV.Application/Subtitles/Commands/ExtractEmbeddedSubtitlesHandler.cs index 0b779e640..047374a35 100644 --- a/ErsatzTV.Application/Subtitles/Commands/ExtractEmbeddedSubtitlesHandler.cs +++ b/ErsatzTV.Application/Subtitles/Commands/ExtractEmbeddedSubtitlesHandler.cs @@ -328,11 +328,11 @@ public class ExtractEmbeddedSubtitlesHandler : IRequestHandler await dbContext.MediaItems + .AsNoTracking() .Include(mi => (mi as Episode).MediaVersions) .ThenInclude(mv => mv.MediaFiles) .Include(mi => (mi as Episode).MediaVersions) diff --git a/ErsatzTV/Services/RunOnce/DatabaseCleanerService.cs b/ErsatzTV/Services/RunOnce/DatabaseCleanerService.cs index 54878d0de..6a5f36c84 100644 --- a/ErsatzTV/Services/RunOnce/DatabaseCleanerService.cs +++ b/ErsatzTV/Services/RunOnce/DatabaseCleanerService.cs @@ -31,6 +31,7 @@ public class DatabaseCleanerService( await DeleteInvalidMediaItems(dbContext); await GenerateFallbackMetadata(scope, dbContext, stoppingToken); + await ResetExternalSubtitleState(dbContext, stoppingToken); systemStartup.DatabaseIsCleaned(); @@ -82,4 +83,11 @@ public class DatabaseCleanerService( await dbContext.SaveChangesAsync(cancellationToken); } + + private static async Task ResetExternalSubtitleState(TvContext dbContext, CancellationToken cancellationToken) + { + await dbContext.Database.ExecuteSqlRawAsync( + "UPDATE `Subtitle` SET `IsExtracted`=0 WHERE `Path` IS NULL", + cancellationToken); + } }