Browse Source

fix some invalid external subtitle data (#2451)

pull/2453/head
Jason Dove 3 months ago committed by GitHub
parent
commit
e70e4fb826
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 7
      ErsatzTV.Application/Subtitles/Commands/ExtractEmbeddedSubtitlesHandler.cs
  3. 8
      ErsatzTV/Services/RunOnce/DatabaseCleanerService.cs

1
CHANGELOG.md

@ -66,6 +66,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -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

7
ErsatzTV.Application/Subtitles/Commands/ExtractEmbeddedSubtitlesHandler.cs

@ -328,11 +328,11 @@ public class ExtractEmbeddedSubtitlesHandler : IRequestHandler<ExtractEmbeddedSu @@ -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 @@ -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)

8
ErsatzTV/Services/RunOnce/DatabaseCleanerService.cs

@ -31,6 +31,7 @@ public class DatabaseCleanerService( @@ -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( @@ -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);
}
}

Loading…
Cancel
Save