more jf episode scanning improvements (#2753)
* more jf episode scanning improvements * bump log level on important message * add transaction
This commit is contained in:
@@ -188,9 +188,7 @@ public class JellyfinTelevisionRepository : IJellyfinTelevisionRepository
|
||||
.Include(e => e.EpisodeMetadata).ThenInclude(em => em.Actors).ThenInclude(a => a.Artwork)
|
||||
.Include(e => e.EpisodeMetadata).ThenInclude(em => em.Directors)
|
||||
.Include(e => e.EpisodeMetadata).ThenInclude(em => em.Writers)
|
||||
.Include(e => e.MediaVersions).ThenInclude(mv => mv.MediaFiles)
|
||||
.Include(e => e.MediaVersions).ThenInclude(mv => mv.Streams)
|
||||
.Include(e => e.MediaVersions).ThenInclude(mv => mv.Chapters)
|
||||
.AsSplitQuery()
|
||||
.SingleAsync(s => s.Id == existingId, cancellationToken);
|
||||
|
||||
@@ -210,9 +208,7 @@ public class JellyfinTelevisionRepository : IJellyfinTelevisionRepository
|
||||
.Include(e => e.EpisodeMetadata).ThenInclude(em => em.Actors)
|
||||
.Include(e => e.EpisodeMetadata).ThenInclude(em => em.Directors)
|
||||
.Include(e => e.EpisodeMetadata).ThenInclude(em => em.Writers)
|
||||
.Include(e => e.MediaVersions).ThenInclude(mv => mv.MediaFiles)
|
||||
.Include(e => e.MediaVersions).ThenInclude(mv => mv.Streams)
|
||||
.Include(e => e.MediaVersions).ThenInclude(mv => mv.Chapters)
|
||||
.AsSplitQuery()
|
||||
.SingleAsync(s => s.Id == existingId, cancellationToken);
|
||||
|
||||
@@ -931,14 +927,30 @@ public class JellyfinTelevisionRepository : IJellyfinTelevisionRepository
|
||||
MediaVersion incomingVersion = incoming.MediaVersions.Head();
|
||||
version.Name = incomingVersion.Name;
|
||||
version.DateAdded = incomingVersion.DateAdded;
|
||||
version.Chapters = incomingVersion.Chapters;
|
||||
|
||||
// media file
|
||||
MediaFile file = version.MediaFiles.Head();
|
||||
await using var transaction = await dbContext.Database.BeginTransactionAsync(cancellationToken);
|
||||
|
||||
// delete old chapters
|
||||
await dbContext.MediaChapters
|
||||
.Where(c => c.MediaVersionId == version.Id)
|
||||
.ExecuteDeleteAsync(cancellationToken);
|
||||
|
||||
// replace with new chapters
|
||||
version.Chapters = incomingVersion.Chapters;
|
||||
foreach (var ch in version.Chapters)
|
||||
{
|
||||
ch.MediaVersionId = version.Id;
|
||||
}
|
||||
|
||||
// always update media file path
|
||||
MediaFile incomingFile = incomingVersion.MediaFiles.Head();
|
||||
file.Path = incomingFile.Path;
|
||||
await dbContext.MediaFiles
|
||||
.Where(mf => mf.MediaVersionId == version.Id)
|
||||
.ExecuteUpdateAsync(mf => mf.SetProperty(f => f.Path, incomingFile.Path), cancellationToken);
|
||||
|
||||
await dbContext.SaveChangesAsync(cancellationToken);
|
||||
|
||||
await transaction.CommitAsync(cancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -210,7 +210,7 @@ public class MediaItemRepository(
|
||||
};
|
||||
|
||||
string libraryName = mediaItem.LibraryPath.Library.Name;
|
||||
logger.LogDebug(
|
||||
logger.LogWarning(
|
||||
"Unable to add media item to {IncomingLibraryType} '{IncomingLibraryName}'; {LibraryType} '{LibraryName}' already contains path {Path}",
|
||||
incomingLibraryType,
|
||||
incomingLibrary.Name,
|
||||
|
||||
@@ -50,6 +50,7 @@ public class TvContext : DbContext
|
||||
public DbSet<MediaVersion> MediaVersions { get; set; }
|
||||
public DbSet<MediaFile> MediaFiles { get; set; }
|
||||
public DbSet<MediaStream> MediaStreams { get; set; }
|
||||
public DbSet<MediaChapter> MediaChapters { get; set; }
|
||||
public DbSet<Movie> Movies { get; set; }
|
||||
public DbSet<MovieMetadata> MovieMetadata { get; set; }
|
||||
public DbSet<Artwork> Artwork { get; set; }
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CliWrap" Version="3.10.0" />
|
||||
<!-- <PackageReference Include="EntityFrameworkProfiler.Appender" Version="6.0.6049" />-->
|
||||
<PackageReference Include="Humanizer.Core" Version="3.0.1" />
|
||||
<PackageReference Include="LanguageExt.Core" Version="4.4.9" />
|
||||
<PackageReference Include="MediatR" Version="[12.5.0]" />
|
||||
|
||||
@@ -29,6 +29,8 @@ public class Worker : BackgroundService
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
//HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize();
|
||||
|
||||
using IServiceScope scope = _serviceScopeFactory.CreateScope();
|
||||
IMediator mediator = scope.ServiceProvider.GetRequiredService<IMediator>();
|
||||
await mediator.Send(new RefreshFFmpegCapabilities(), stoppingToken);
|
||||
|
||||
Reference in New Issue
Block a user