Browse Source

move plex artwork removal to its own repository

pull/2778/head
Jason Dove 7 months ago
parent
commit
0dca4df90a
No known key found for this signature in database
  1. 1
      ErsatzTV.Core/Interfaces/Repositories/IMetadataRepository.cs
  2. 8
      ErsatzTV.Core/Interfaces/Repositories/IPlexMetadataRepository.cs
  3. 10
      ErsatzTV.Infrastructure/Data/Repositories/MetadataRepository.cs
  4. 19
      ErsatzTV.Infrastructure/Data/Repositories/PlexMetadataRepository.cs
  5. 9
      ErsatzTV.Scanner/Core/Plex/PlexMovieLibraryScanner.cs
  6. 9
      ErsatzTV.Scanner/Core/Plex/PlexOtherVideoLibraryScanner.cs
  7. 9
      ErsatzTV.Scanner/Core/Plex/PlexTelevisionLibraryScanner.cs
  8. 1
      ErsatzTV.Scanner/Program.cs
  9. 1
      ErsatzTV/Startup.cs

1
ErsatzTV.Core/Interfaces/Repositories/IMetadataRepository.cs

@ -16,7 +16,6 @@ public interface IMetadataRepository @@ -16,7 +16,6 @@ public interface IMetadataRepository
Task<bool> UpdateStatistics(MediaItem mediaItem, MediaVersion incoming, bool updateVersion = true);
Task<Unit> UpdateArtworkPath(Artwork artwork);
Task<Unit> AddArtwork(Domain.Metadata metadata, Artwork artwork);
Task<Unit> RemoveArtwork(Domain.Metadata metadata, ArtworkKind artworkKind);
Task<bool> CloneArtwork(
Domain.Metadata metadata,

8
ErsatzTV.Core/Interfaces/Repositories/IPlexMetadataRepository.cs

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
using ErsatzTV.Core.Domain;
namespace ErsatzTV.Core.Interfaces.Repositories;
public interface IPlexMetadataRepository
{
Task<Unit> RemoveArtwork(Domain.Metadata metadata, ArtworkKind artworkKind);
}

10
ErsatzTV.Infrastructure/Data/Repositories/MetadataRepository.cs

@ -309,16 +309,6 @@ public class MetadataRepository(IDbContextFactory<TvContext> dbContextFactory) : @@ -309,16 +309,6 @@ public class MetadataRepository(IDbContextFactory<TvContext> dbContextFactory) :
};
}
public async Task<Unit> 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<bool> CloneArtwork(
Core.Domain.Metadata metadata,
Option<Artwork> maybeArtwork,

19
ErsatzTV.Infrastructure/Data/Repositories/PlexMetadataRepository.cs

@ -0,0 +1,19 @@ @@ -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<TvContext> dbContextFactory) : IPlexMetadataRepository
{
public async Task<Unit> 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();
}
}

9
ErsatzTV.Scanner/Core/Plex/PlexMovieLibraryScanner.cs

@ -22,6 +22,7 @@ public class PlexMovieLibraryScanner : @@ -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 : @@ -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 : @@ -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 : @@ -383,9 +386,9 @@ public class PlexMovieLibraryScanner :
if (maybeIncomingArtwork.IsNone)
{
existingMetadata.Artwork ??= new List<Artwork>();
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 : @@ -397,7 +400,7 @@ public class PlexMovieLibraryScanner :
if (maybeExistingArtwork.IsNone)
{
existingMetadata.Artwork ??= new List<Artwork>();
existingMetadata.Artwork ??= [];
existingMetadata.Artwork.Add(incomingArtwork);
await _metadataRepository.AddArtwork(existingMetadata, incomingArtwork);
}

9
ErsatzTV.Scanner/Core/Plex/PlexOtherVideoLibraryScanner.cs

@ -22,6 +22,7 @@ public class PlexOtherVideoLibraryScanner : @@ -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 : @@ -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 : @@ -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 : @@ -388,9 +391,9 @@ public class PlexOtherVideoLibraryScanner :
if (maybeIncomingArtwork.IsNone)
{
existingMetadata.Artwork ??= new List<Artwork>();
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 : @@ -402,7 +405,7 @@ public class PlexOtherVideoLibraryScanner :
if (maybeExistingArtwork.IsNone)
{
existingMetadata.Artwork ??= new List<Artwork>();
existingMetadata.Artwork ??= [];
existingMetadata.Artwork.Add(incomingArtwork);
await _metadataRepository.AddArtwork(existingMetadata, incomingArtwork);
}

9
ErsatzTV.Scanner/Core/Plex/PlexTelevisionLibraryScanner.cs

@ -27,6 +27,7 @@ public partial class PlexTelevisionLibraryScanner : @@ -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 : @@ -37,6 +38,7 @@ public partial class PlexTelevisionLibraryScanner :
IMediaSourceRepository mediaSourceRepository,
IPlexPathReplacementService plexPathReplacementService,
IPlexTelevisionRepository plexTelevisionRepository,
IPlexMetadataRepository plexMetadataRepository,
IFileSystem fileSystem,
ILocalChaptersProvider localChaptersProvider,
ILogger<PlexTelevisionLibraryScanner> logger)
@ -53,6 +55,7 @@ public partial class PlexTelevisionLibraryScanner : @@ -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 : @@ -719,9 +722,9 @@ public partial class PlexTelevisionLibraryScanner :
if (maybeIncomingArtwork.IsNone)
{
existingMetadata.Artwork ??= new List<Artwork>();
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 : @@ -733,7 +736,7 @@ public partial class PlexTelevisionLibraryScanner :
if (maybeExistingArtwork.IsNone)
{
existingMetadata.Artwork ??= new List<Artwork>();
existingMetadata.Artwork ??= [];
existingMetadata.Artwork.Add(incomingArtwork);
await _metadataRepository.AddArtwork(existingMetadata, incomingArtwork);
}

1
ErsatzTV.Scanner/Program.cs

@ -224,6 +224,7 @@ public class Program @@ -224,6 +224,7 @@ public class Program
services.AddScoped<IPlexMovieRepository, PlexMovieRepository>();
services.AddScoped<IPlexOtherVideoRepository, PlexOtherVideoRepository>();
services.AddScoped<IPlexTelevisionRepository, PlexTelevisionRepository>();
services.AddScoped<IPlexMetadataRepository, PlexMetadataRepository>();
services.AddScoped<IPlexPathReplacementService, PlexPathReplacementService>();
services.AddScoped<PlexEtag>();

1
ErsatzTV/Startup.cs

@ -812,6 +812,7 @@ public class Startup @@ -812,6 +812,7 @@ public class Startup
services.AddScoped<IPlexMovieRepository, PlexMovieRepository>();
services.AddScoped<IPlexTelevisionRepository, PlexTelevisionRepository>();
services.AddScoped<IPlexCollectionRepository, PlexCollectionRepository>();
services.AddScoped<IPlexMetadataRepository, PlexMetadataRepository>();
services.AddScoped<IJellyfinApiClient, JellyfinApiClient>();
services.AddScoped<IJellyfinPathReplacementService, JellyfinPathReplacementService>();
services.AddScoped<IJellyfinTelevisionRepository, JellyfinTelevisionRepository>();

Loading…
Cancel
Save