diff --git a/ErsatzTV.Core/Interfaces/Repositories/IMetadataRepository.cs b/ErsatzTV.Core/Interfaces/Repositories/IMetadataRepository.cs index bd3ec45fa..dd1c78bb2 100644 --- a/ErsatzTV.Core/Interfaces/Repositories/IMetadataRepository.cs +++ b/ErsatzTV.Core/Interfaces/Repositories/IMetadataRepository.cs @@ -16,7 +16,6 @@ public interface IMetadataRepository Task UpdateStatistics(MediaItem mediaItem, MediaVersion incoming, bool updateVersion = true); Task UpdateArtworkPath(Artwork artwork); Task AddArtwork(Domain.Metadata metadata, Artwork artwork); - Task RemoveArtwork(Domain.Metadata metadata, ArtworkKind artworkKind); Task CloneArtwork( Domain.Metadata metadata, diff --git a/ErsatzTV.Core/Interfaces/Repositories/IPlexMetadataRepository.cs b/ErsatzTV.Core/Interfaces/Repositories/IPlexMetadataRepository.cs new file mode 100644 index 000000000..f5669bbe4 --- /dev/null +++ b/ErsatzTV.Core/Interfaces/Repositories/IPlexMetadataRepository.cs @@ -0,0 +1,8 @@ +using ErsatzTV.Core.Domain; + +namespace ErsatzTV.Core.Interfaces.Repositories; + +public interface IPlexMetadataRepository +{ + Task RemoveArtwork(Domain.Metadata metadata, ArtworkKind artworkKind); +} diff --git a/ErsatzTV.Infrastructure/Data/Repositories/MetadataRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/MetadataRepository.cs index 20a401a30..999f64108 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/MetadataRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/MetadataRepository.cs @@ -309,16 +309,6 @@ public class MetadataRepository(IDbContextFactory dbContextFactory) : }; } - public async Task RemoveArtwork(Core.Domain.Metadata metadata, ArtworkKind artworkKind) - { - // this is only used by plex, so only needs to support plex media kinds (movie, show, season, episode, other video) - await using TvContext dbContext = await dbContextFactory.CreateDbContextAsync(); - return await dbContext.Connection.ExecuteAsync( - @"DELETE FROM Artwork WHERE ArtworkKind = @ArtworkKind AND (MovieMetadataId = @Id - OR ShowMetadataId = @Id OR SeasonMetadataId = @Id OR EpisodeMetadataId = @Id OR OtherVideoMetadataId = @Id)", - new { ArtworkKind = artworkKind, metadata.Id }).ToUnit(); - } - public async Task CloneArtwork( Core.Domain.Metadata metadata, Option maybeArtwork, diff --git a/ErsatzTV.Infrastructure/Data/Repositories/PlexMetadataRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/PlexMetadataRepository.cs new file mode 100644 index 000000000..f94b0db1e --- /dev/null +++ b/ErsatzTV.Infrastructure/Data/Repositories/PlexMetadataRepository.cs @@ -0,0 +1,19 @@ +using Dapper; +using ErsatzTV.Core.Domain; +using ErsatzTV.Core.Interfaces.Repositories; +using Microsoft.EntityFrameworkCore; + +namespace ErsatzTV.Infrastructure.Data.Repositories; + +public class PlexMetadataRepository(IDbContextFactory dbContextFactory) : IPlexMetadataRepository +{ + public async Task RemoveArtwork(Core.Domain.Metadata metadata, ArtworkKind artworkKind) + { + // this is only used by plex, so only needs to support plex media kinds (movie, show, season, episode, other video) + await using TvContext dbContext = await dbContextFactory.CreateDbContextAsync(); + return await dbContext.Connection.ExecuteAsync( + @"DELETE FROM Artwork WHERE ArtworkKind = @ArtworkKind AND (MovieMetadataId = @Id + OR ShowMetadataId = @Id OR SeasonMetadataId = @Id OR EpisodeMetadataId = @Id OR OtherVideoMetadataId = @Id)", + new { ArtworkKind = artworkKind, metadata.Id }).ToUnit(); + } +} diff --git a/ErsatzTV.Scanner/Core/Plex/PlexMovieLibraryScanner.cs b/ErsatzTV.Scanner/Core/Plex/PlexMovieLibraryScanner.cs index 7aaa8fb77..1474cac11 100644 --- a/ErsatzTV.Scanner/Core/Plex/PlexMovieLibraryScanner.cs +++ b/ErsatzTV.Scanner/Core/Plex/PlexMovieLibraryScanner.cs @@ -22,6 +22,7 @@ public class PlexMovieLibraryScanner : private readonly IMetadataRepository _metadataRepository; private readonly IMovieRepository _movieRepository; private readonly IPlexMovieRepository _plexMovieRepository; + private readonly IPlexMetadataRepository _plexMetadataRepository; private readonly IPlexPathReplacementService _plexPathReplacementService; private readonly IPlexServerApiClient _plexServerApiClient; @@ -32,6 +33,7 @@ public class PlexMovieLibraryScanner : IMetadataRepository metadataRepository, IMediaSourceRepository mediaSourceRepository, IPlexMovieRepository plexMovieRepository, + IPlexMetadataRepository plexMetadataRepository, IPlexPathReplacementService plexPathReplacementService, IFileSystem fileSystem, ILocalChaptersProvider localChaptersProvider, @@ -48,6 +50,7 @@ public class PlexMovieLibraryScanner : _metadataRepository = metadataRepository; _mediaSourceRepository = mediaSourceRepository; _plexMovieRepository = plexMovieRepository; + _plexMetadataRepository = plexMetadataRepository; _plexPathReplacementService = plexPathReplacementService; _logger = logger; } @@ -383,9 +386,9 @@ public class PlexMovieLibraryScanner : if (maybeIncomingArtwork.IsNone) { - existingMetadata.Artwork ??= new List(); + existingMetadata.Artwork ??= []; existingMetadata.Artwork.RemoveAll(a => a.ArtworkKind == artworkKind); - await _metadataRepository.RemoveArtwork(existingMetadata, artworkKind); + await _plexMetadataRepository.RemoveArtwork(existingMetadata, artworkKind); } foreach (Artwork incomingArtwork in maybeIncomingArtwork) @@ -397,7 +400,7 @@ public class PlexMovieLibraryScanner : if (maybeExistingArtwork.IsNone) { - existingMetadata.Artwork ??= new List(); + existingMetadata.Artwork ??= []; existingMetadata.Artwork.Add(incomingArtwork); await _metadataRepository.AddArtwork(existingMetadata, incomingArtwork); } diff --git a/ErsatzTV.Scanner/Core/Plex/PlexOtherVideoLibraryScanner.cs b/ErsatzTV.Scanner/Core/Plex/PlexOtherVideoLibraryScanner.cs index 36a006a8c..ffac33c50 100644 --- a/ErsatzTV.Scanner/Core/Plex/PlexOtherVideoLibraryScanner.cs +++ b/ErsatzTV.Scanner/Core/Plex/PlexOtherVideoLibraryScanner.cs @@ -22,6 +22,7 @@ public class PlexOtherVideoLibraryScanner : private readonly IMetadataRepository _metadataRepository; private readonly IOtherVideoRepository _otherVideoRepository; private readonly IPlexOtherVideoRepository _plexOtherVideoRepository; + private readonly IPlexMetadataRepository _plexMetadataRepository; private readonly IPlexPathReplacementService _plexPathReplacementService; private readonly IPlexServerApiClient _plexServerApiClient; @@ -32,6 +33,7 @@ public class PlexOtherVideoLibraryScanner : IMetadataRepository metadataRepository, IMediaSourceRepository mediaSourceRepository, IPlexOtherVideoRepository plexOtherVideoRepository, + IPlexMetadataRepository plexMetadataRepository, IPlexPathReplacementService plexPathReplacementService, IFileSystem fileSystem, ILocalChaptersProvider localChaptersProvider, @@ -48,6 +50,7 @@ public class PlexOtherVideoLibraryScanner : _metadataRepository = metadataRepository; _mediaSourceRepository = mediaSourceRepository; _plexOtherVideoRepository = plexOtherVideoRepository; + _plexMetadataRepository = plexMetadataRepository; _plexPathReplacementService = plexPathReplacementService; _logger = logger; } @@ -388,9 +391,9 @@ public class PlexOtherVideoLibraryScanner : if (maybeIncomingArtwork.IsNone) { - existingMetadata.Artwork ??= new List(); + existingMetadata.Artwork ??= []; existingMetadata.Artwork.RemoveAll(a => a.ArtworkKind == artworkKind); - await _metadataRepository.RemoveArtwork(existingMetadata, artworkKind); + await _plexMetadataRepository.RemoveArtwork(existingMetadata, artworkKind); } foreach (Artwork incomingArtwork in maybeIncomingArtwork) @@ -402,7 +405,7 @@ public class PlexOtherVideoLibraryScanner : if (maybeExistingArtwork.IsNone) { - existingMetadata.Artwork ??= new List(); + existingMetadata.Artwork ??= []; existingMetadata.Artwork.Add(incomingArtwork); await _metadataRepository.AddArtwork(existingMetadata, incomingArtwork); } diff --git a/ErsatzTV.Scanner/Core/Plex/PlexTelevisionLibraryScanner.cs b/ErsatzTV.Scanner/Core/Plex/PlexTelevisionLibraryScanner.cs index 86a625ebc..8b28e8160 100644 --- a/ErsatzTV.Scanner/Core/Plex/PlexTelevisionLibraryScanner.cs +++ b/ErsatzTV.Scanner/Core/Plex/PlexTelevisionLibraryScanner.cs @@ -27,6 +27,7 @@ public partial class PlexTelevisionLibraryScanner : private readonly IPlexPathReplacementService _plexPathReplacementService; private readonly IPlexServerApiClient _plexServerApiClient; private readonly IPlexTelevisionRepository _plexTelevisionRepository; + private readonly IPlexMetadataRepository _plexMetadataRepository; private readonly ITelevisionRepository _televisionRepository; public PlexTelevisionLibraryScanner( @@ -37,6 +38,7 @@ public partial class PlexTelevisionLibraryScanner : IMediaSourceRepository mediaSourceRepository, IPlexPathReplacementService plexPathReplacementService, IPlexTelevisionRepository plexTelevisionRepository, + IPlexMetadataRepository plexMetadataRepository, IFileSystem fileSystem, ILocalChaptersProvider localChaptersProvider, ILogger logger) @@ -53,6 +55,7 @@ public partial class PlexTelevisionLibraryScanner : _mediaSourceRepository = mediaSourceRepository; _plexPathReplacementService = plexPathReplacementService; _plexTelevisionRepository = plexTelevisionRepository; + _plexMetadataRepository = plexMetadataRepository; _logger = logger; } @@ -719,9 +722,9 @@ public partial class PlexTelevisionLibraryScanner : if (maybeIncomingArtwork.IsNone) { - existingMetadata.Artwork ??= new List(); + existingMetadata.Artwork ??= []; existingMetadata.Artwork.RemoveAll(a => a.ArtworkKind == artworkKind); - await _metadataRepository.RemoveArtwork(existingMetadata, artworkKind); + await _plexMetadataRepository.RemoveArtwork(existingMetadata, artworkKind); } foreach (Artwork incomingArtwork in maybeIncomingArtwork) @@ -733,7 +736,7 @@ public partial class PlexTelevisionLibraryScanner : if (maybeExistingArtwork.IsNone) { - existingMetadata.Artwork ??= new List(); + existingMetadata.Artwork ??= []; existingMetadata.Artwork.Add(incomingArtwork); await _metadataRepository.AddArtwork(existingMetadata, incomingArtwork); } diff --git a/ErsatzTV.Scanner/Program.cs b/ErsatzTV.Scanner/Program.cs index f5f796284..3180da0c6 100644 --- a/ErsatzTV.Scanner/Program.cs +++ b/ErsatzTV.Scanner/Program.cs @@ -224,6 +224,7 @@ public class Program services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); diff --git a/ErsatzTV/Startup.cs b/ErsatzTV/Startup.cs index 219ba1fb6..3ad735a00 100644 --- a/ErsatzTV/Startup.cs +++ b/ErsatzTV/Startup.cs @@ -812,6 +812,7 @@ public class Startup services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped();