fix some invalid external subtitle data (#2451)

This commit is contained in:
Jason Dove
2025-09-21 03:13:20 +00:00
committed by GitHub
parent b790b5944c
commit e70e4fb826
3 changed files with 13 additions and 3 deletions
+1
View File
@@ -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
@@ -328,11 +328,11 @@ public class ExtractEmbeddedSubtitlesHandler : IRequestHandler<ExtractEmbeddedSu
{
foreach (SubtitleToExtract subtitle in subtitlesToExtract)
{
subtitle.Subtitle.IsExtracted = true;
subtitle.Subtitle.Path = subtitle.OutputPath;
await dbContext.Connection.ExecuteAsync(
"UPDATE `Subtitle` SET `IsExtracted` = 1, `Path` = @Path WHERE `Id` = @SubtitleId",
new { SubtitleId = subtitle.Subtitle.Id, Path = subtitle.OutputPath });
}
await dbContext.SaveChangesAsync(cancellationToken);
_logger.LogDebug("Successfully extracted {Count} subtitles", subtitlesToExtract.Count);
}
else
@@ -358,6 +358,7 @@ public class ExtractEmbeddedSubtitlesHandler : IRequestHandler<ExtractEmbeddedSu
int mediaItemId,
CancellationToken cancellationToken) =>
await dbContext.MediaItems
.AsNoTracking()
.Include(mi => (mi as Episode).MediaVersions)
.ThenInclude(mv => mv.MediaFiles)
.Include(mi => (mi as Episode).MediaVersions)
@@ -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);
}
}