|
|
|
@ -13,6 +13,7 @@ namespace ErsatzTV.Core.Plex |
|
|
|
public class PlexMovieLibraryScanner : PlexLibraryScanner, IPlexMovieLibraryScanner |
|
|
|
public class PlexMovieLibraryScanner : PlexLibraryScanner, IPlexMovieLibraryScanner |
|
|
|
{ |
|
|
|
{ |
|
|
|
private readonly ILogger<PlexMovieLibraryScanner> _logger; |
|
|
|
private readonly ILogger<PlexMovieLibraryScanner> _logger; |
|
|
|
|
|
|
|
private readonly IMetadataRepository _metadataRepository; |
|
|
|
private readonly IMovieRepository _movieRepository; |
|
|
|
private readonly IMovieRepository _movieRepository; |
|
|
|
private readonly IPlexServerApiClient _plexServerApiClient; |
|
|
|
private readonly IPlexServerApiClient _plexServerApiClient; |
|
|
|
|
|
|
|
|
|
|
|
@ -25,6 +26,7 @@ namespace ErsatzTV.Core.Plex |
|
|
|
{ |
|
|
|
{ |
|
|
|
_plexServerApiClient = plexServerApiClient; |
|
|
|
_plexServerApiClient = plexServerApiClient; |
|
|
|
_movieRepository = movieRepository; |
|
|
|
_movieRepository = movieRepository; |
|
|
|
|
|
|
|
_metadataRepository = metadataRepository; |
|
|
|
_logger = logger; |
|
|
|
_logger = logger; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -51,16 +53,11 @@ namespace ErsatzTV.Core.Plex |
|
|
|
.BindT(existing => UpdateMetadata(existing, incoming)) |
|
|
|
.BindT(existing => UpdateMetadata(existing, incoming)) |
|
|
|
.BindT(existing => UpdateArtwork(existing, incoming)); |
|
|
|
.BindT(existing => UpdateArtwork(existing, incoming)); |
|
|
|
|
|
|
|
|
|
|
|
await maybeMovie.Match( |
|
|
|
maybeMovie.IfLeft( |
|
|
|
async movie => await _movieRepository.Update(movie), |
|
|
|
error => _logger.LogWarning( |
|
|
|
error => |
|
|
|
"Error processing plex movie at {Key}: {Error}", |
|
|
|
{ |
|
|
|
incoming.Key, |
|
|
|
_logger.LogWarning( |
|
|
|
error.Value)); |
|
|
|
"Error processing plex movie at {Key}: {Error}", |
|
|
|
|
|
|
|
incoming.Key, |
|
|
|
|
|
|
|
error.Value); |
|
|
|
|
|
|
|
return Task.CompletedTask; |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
error => |
|
|
|
error => |
|
|
|
@ -91,13 +88,16 @@ namespace ErsatzTV.Core.Plex |
|
|
|
Either<BaseError, MediaVersion> maybeStatistics = |
|
|
|
Either<BaseError, MediaVersion> maybeStatistics = |
|
|
|
await _plexServerApiClient.GetStatistics(incoming.Key.Split("/").Last(), connection, token); |
|
|
|
await _plexServerApiClient.GetStatistics(incoming.Key.Split("/").Last(), connection, token); |
|
|
|
|
|
|
|
|
|
|
|
maybeStatistics.IfRight( |
|
|
|
await maybeStatistics.Match( |
|
|
|
mediaVersion => |
|
|
|
async mediaVersion => |
|
|
|
{ |
|
|
|
{ |
|
|
|
existingVersion.SampleAspectRatio = mediaVersion.SampleAspectRatio ?? "1:1"; |
|
|
|
existingVersion.SampleAspectRatio = mediaVersion.SampleAspectRatio ?? "1:1"; |
|
|
|
existingVersion.VideoScanKind = mediaVersion.VideoScanKind; |
|
|
|
existingVersion.VideoScanKind = mediaVersion.VideoScanKind; |
|
|
|
existingVersion.DateUpdated = incomingVersion.DateUpdated; |
|
|
|
existingVersion.DateUpdated = incomingVersion.DateUpdated; |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
await _metadataRepository.UpdateStatistics(existingVersion); |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
_ => Task.CompletedTask); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return Right<BaseError, PlexMovie>(existing); |
|
|
|
return Right<BaseError, PlexMovie>(existing); |
|
|
|
@ -115,6 +115,7 @@ namespace ErsatzTV.Core.Plex |
|
|
|
.ToList()) |
|
|
|
.ToList()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
existingMetadata.Genres.Remove(genre); |
|
|
|
existingMetadata.Genres.Remove(genre); |
|
|
|
|
|
|
|
_metadataRepository.RemoveGenre(genre); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
foreach (Genre genre in incomingMetadata.Genres |
|
|
|
foreach (Genre genre in incomingMetadata.Genres |
|
|
|
@ -122,6 +123,7 @@ namespace ErsatzTV.Core.Plex |
|
|
|
.ToList()) |
|
|
|
.ToList()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
existingMetadata.Genres.Add(genre); |
|
|
|
existingMetadata.Genres.Add(genre); |
|
|
|
|
|
|
|
_movieRepository.AddGenre(existingMetadata, genre); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|