* catch health check cancellation * local library scanner cleanup * emby and jf library scanner cleanup * rework emby movie library scanner * refactor emby movie library scanner * refactor jellyfin movie library scanner * clear etag until after new media has been processed * refactor plex movie library scanner * update changelog
63 lines
2.3 KiB
C#
63 lines
2.3 KiB
C#
using ErsatzTV.Core.Domain;
|
|
using ErsatzTV.Core.Interfaces.Repositories;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace ErsatzTV.Core.Plex;
|
|
|
|
public abstract class PlexLibraryScanner
|
|
{
|
|
private readonly ILogger<PlexLibraryScanner> _logger;
|
|
private readonly IMetadataRepository _metadataRepository;
|
|
|
|
protected PlexLibraryScanner(IMetadataRepository metadataRepository, ILogger<PlexLibraryScanner> logger)
|
|
{
|
|
_metadataRepository = metadataRepository;
|
|
_logger = logger;
|
|
}
|
|
|
|
protected async Task<bool> UpdateArtworkIfNeeded(
|
|
Domain.Metadata existingMetadata,
|
|
Domain.Metadata incomingMetadata,
|
|
ArtworkKind artworkKind)
|
|
{
|
|
if (incomingMetadata.DateUpdated > existingMetadata.DateUpdated)
|
|
{
|
|
Option<Artwork> maybeIncomingArtwork = Optional(incomingMetadata.Artwork).Flatten()
|
|
.Find(a => a.ArtworkKind == artworkKind);
|
|
|
|
if (maybeIncomingArtwork.IsNone)
|
|
{
|
|
existingMetadata.Artwork ??= new List<Artwork>();
|
|
existingMetadata.Artwork.RemoveAll(a => a.ArtworkKind == artworkKind);
|
|
await _metadataRepository.RemoveArtwork(existingMetadata, artworkKind);
|
|
}
|
|
|
|
foreach (Artwork incomingArtwork in maybeIncomingArtwork)
|
|
{
|
|
_logger.LogDebug("Refreshing Plex {Attribute} from {Path}", artworkKind, incomingArtwork.Path);
|
|
|
|
Option<Artwork> maybeExistingArtwork = Optional(existingMetadata.Artwork).Flatten()
|
|
.Find(a => a.ArtworkKind == artworkKind);
|
|
|
|
if (maybeExistingArtwork.IsNone)
|
|
{
|
|
existingMetadata.Artwork ??= new List<Artwork>();
|
|
existingMetadata.Artwork.Add(incomingArtwork);
|
|
await _metadataRepository.AddArtwork(existingMetadata, incomingArtwork);
|
|
}
|
|
|
|
foreach (Artwork existingArtwork in maybeExistingArtwork)
|
|
{
|
|
existingArtwork.Path = incomingArtwork.Path;
|
|
existingArtwork.DateUpdated = incomingArtwork.DateUpdated;
|
|
await _metadataRepository.UpdateArtworkPath(existingArtwork);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|