From e93d678b97eac1ccade31ec4e9cc5db83f9c9fb7 Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Sat, 1 Apr 2023 12:24:15 -0500 Subject: [PATCH] add more logging (#1224) * more logging * update dependencies --- .../ErsatzTV.Application.csproj | 2 +- ErsatzTV.Core/ErsatzTV.Core.csproj | 2 +- .../ErsatzTV.Infrastructure.Tests.csproj | 2 +- .../Data/Repositories/EmbyMovieRepository.cs | 2 +- .../Repositories/EmbyTelevisionRepository.cs | 2 +- .../Repositories/JellyfinMovieRepository.cs | 2 +- .../JellyfinTelevisionRepository.cs | 2 +- .../Data/Repositories/MediaItemRepository.cs | 53 +++++++++++++------ .../Data/Repositories/MovieRepository.cs | 2 +- .../Data/Repositories/OtherVideoRepository.cs | 16 +++++- .../Data/Repositories/PlexMovieRepository.cs | 2 +- .../Repositories/PlexTelevisionRepository.cs | 2 +- .../Data/Repositories/TelevisionRepository.cs | 2 +- .../ErsatzTV.Infrastructure.csproj | 8 +-- .../ErsatzTV.Scanner.Tests.csproj | 2 +- ErsatzTV/ErsatzTV.csproj | 14 ++--- 16 files changed, 73 insertions(+), 42 deletions(-) diff --git a/ErsatzTV.Application/ErsatzTV.Application.csproj b/ErsatzTV.Application/ErsatzTV.Application.csproj index 3a8644934..b3577cd4c 100644 --- a/ErsatzTV.Application/ErsatzTV.Application.csproj +++ b/ErsatzTV.Application/ErsatzTV.Application.csproj @@ -16,7 +16,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/ErsatzTV.Core/ErsatzTV.Core.csproj b/ErsatzTV.Core/ErsatzTV.Core.csproj index 3aebacdfe..df195fdb3 100644 --- a/ErsatzTV.Core/ErsatzTV.Core.csproj +++ b/ErsatzTV.Core/ErsatzTV.Core.csproj @@ -22,7 +22,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj b/ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj index c24f15432..2d6cbe5fe 100644 --- a/ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj +++ b/ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj @@ -14,7 +14,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/ErsatzTV.Infrastructure/Data/Repositories/EmbyMovieRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/EmbyMovieRepository.cs index 33764b47d..b1c72be6f 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/EmbyMovieRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/EmbyMovieRepository.cs @@ -185,7 +185,7 @@ public class EmbyMovieRepository : IEmbyMovieRepository { try { - if (await MediaItemRepository.MediaFileAlreadyExists(movie, dbContext, _logger)) + if (await MediaItemRepository.MediaFileAlreadyExists(movie, library.Paths.Head().Id, dbContext, _logger)) { return new MediaFileAlreadyExists(); } diff --git a/ErsatzTV.Infrastructure/Data/Repositories/EmbyTelevisionRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/EmbyTelevisionRepository.cs index 74132032f..2b79a6d0d 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/EmbyTelevisionRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/EmbyTelevisionRepository.cs @@ -809,7 +809,7 @@ public class EmbyTelevisionRepository : IEmbyTelevisionRepository { try { - if (await MediaItemRepository.MediaFileAlreadyExists(episode, dbContext, _logger)) + if (await MediaItemRepository.MediaFileAlreadyExists(episode, library.Paths.Head().Id, dbContext, _logger)) { return new MediaFileAlreadyExists(); } diff --git a/ErsatzTV.Infrastructure/Data/Repositories/JellyfinMovieRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/JellyfinMovieRepository.cs index c397f5c33..a138caaaa 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/JellyfinMovieRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/JellyfinMovieRepository.cs @@ -367,7 +367,7 @@ public class JellyfinMovieRepository : IJellyfinMovieRepository { try { - if (await MediaItemRepository.MediaFileAlreadyExists(movie, dbContext, _logger)) + if (await MediaItemRepository.MediaFileAlreadyExists(movie, library.Paths.Head().Id, dbContext, _logger)) { return new MediaFileAlreadyExists(); } diff --git a/ErsatzTV.Infrastructure/Data/Repositories/JellyfinTelevisionRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/JellyfinTelevisionRepository.cs index 97a10e67b..68c493c26 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/JellyfinTelevisionRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/JellyfinTelevisionRepository.cs @@ -812,7 +812,7 @@ public class JellyfinTelevisionRepository : IJellyfinTelevisionRepository { try { - if (await MediaItemRepository.MediaFileAlreadyExists(episode, dbContext, _logger)) + if (await MediaItemRepository.MediaFileAlreadyExists(episode, library.Paths.Head().Id, dbContext, _logger)) { return new MediaFileAlreadyExists(); } diff --git a/ErsatzTV.Infrastructure/Data/Repositories/MediaItemRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/MediaItemRepository.cs index e95e262e3..b6310d528 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/MediaItemRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/MediaItemRepository.cs @@ -124,13 +124,13 @@ public class MediaItemRepository : IMediaItemRepository return Unit.Default; } - public static async Task MediaFileAlreadyExists(MediaItem incoming, TvContext dbContext, ILogger logger) + public static async Task MediaFileAlreadyExists(MediaItem incoming, int libraryPathId, TvContext dbContext, ILogger logger) { string path = incoming.GetHeadVersion().MediaFiles.Head().Path; - return await MediaFileAlreadyExists(path, dbContext, logger); + return await MediaFileAlreadyExists(path, libraryPathId, dbContext, logger); } - public static async Task MediaFileAlreadyExists(string path, TvContext dbContext, ILogger logger) + public static async Task MediaFileAlreadyExists(string path, int libraryPathId, TvContext dbContext, ILogger logger) { Option maybeMediaItemId = await dbContext.Connection .QuerySingleOrDefaultAsync( @@ -151,21 +151,40 @@ public class MediaItemRepository : IMediaItemRepository foreach (MediaItem mediaItem in maybeMediaItem) { - string libraryType = mediaItem.LibraryPath.Library switch - { - PlexLibrary => "Plex Library", - EmbyLibrary => "Emby Library", - JellyfinLibrary => "Jellyfin Library", - _ => "Local Library" - }; + Option maybeIncomingLibrary = await dbContext.Libraries + .Filter(l => l.Paths.Any(p => p.Id == libraryPathId)) + .SingleOrDefaultAsync() + .Map(Optional); - string libraryName = mediaItem.LibraryPath.Library.Name; - logger.LogWarning( - "Unable to add media item; {LibraryType} '{LibraryName}' already contains path {Path}", - libraryType, - libraryName, - path); - return true; + foreach (Library incomingLibrary in maybeIncomingLibrary) + { + string incomingLibraryType = incomingLibrary switch + { + PlexLibrary => "Plex Library", + EmbyLibrary => "Emby Library", + JellyfinLibrary => "Jellyfin Library", + _ => "Local Library" + }; + + string existingLibraryType = mediaItem.LibraryPath.Library switch + { + PlexLibrary => "Plex Library", + EmbyLibrary => "Emby Library", + JellyfinLibrary => "Jellyfin Library", + _ => "Local Library" + }; + + string libraryName = mediaItem.LibraryPath.Library.Name; + logger.LogWarning( + "Unable to add media item to {IncomingLibraryType} '{IncomingLibraryName}'; {LibraryType} '{LibraryName}' already contains path {Path}", + incomingLibraryType, + incomingLibrary.Name, + existingLibraryType, + libraryName, + path); + + return true; + } } } diff --git a/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs index c12b0cfd1..e60e493f7 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs @@ -234,7 +234,7 @@ public class MovieRepository : IMovieRepository { try { - if (await MediaItemRepository.MediaFileAlreadyExists(path, dbContext, _logger)) + if (await MediaItemRepository.MediaFileAlreadyExists(path, libraryPathId, dbContext, _logger)) { return new MediaFileAlreadyExists(); } diff --git a/ErsatzTV.Infrastructure/Data/Repositories/OtherVideoRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/OtherVideoRepository.cs index c3838fb7a..c1bcb791c 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/OtherVideoRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/OtherVideoRepository.cs @@ -1,17 +1,24 @@ using Dapper; using ErsatzTV.Core; using ErsatzTV.Core.Domain; +using ErsatzTV.Core.Errors; using ErsatzTV.Core.Interfaces.Repositories; using ErsatzTV.Core.Metadata; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; namespace ErsatzTV.Infrastructure.Data.Repositories; public class OtherVideoRepository : IOtherVideoRepository { private readonly IDbContextFactory _dbContextFactory; + private readonly ILogger _logger; - public OtherVideoRepository(IDbContextFactory dbContextFactory) => _dbContextFactory = dbContextFactory; + public OtherVideoRepository(IDbContextFactory dbContextFactory, ILogger logger) + { + _dbContextFactory = dbContextFactory; + _logger = logger; + } public async Task>> GetOrAdd( LibraryPath libraryPath, @@ -177,13 +184,18 @@ public class OtherVideoRepository : IOtherVideoRepository .ToListAsync(); } - private static async Task>> AddOtherVideo( + private async Task>> AddOtherVideo( TvContext dbContext, int libraryPathId, string path) { try { + if (await MediaItemRepository.MediaFileAlreadyExists(path, libraryPathId, dbContext, _logger)) + { + return new MediaFileAlreadyExists(); + } + var otherVideo = new OtherVideo { LibraryPathId = libraryPathId, diff --git a/ErsatzTV.Infrastructure/Data/Repositories/PlexMovieRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/PlexMovieRepository.cs index b06aaef04..7badd336e 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/PlexMovieRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/PlexMovieRepository.cs @@ -185,7 +185,7 @@ public class PlexMovieRepository : IPlexMovieRepository { try { - if (await MediaItemRepository.MediaFileAlreadyExists(item, dbContext, _logger)) + if (await MediaItemRepository.MediaFileAlreadyExists(item, library.Paths.Head().Id, dbContext, _logger)) { return new MediaFileAlreadyExists(); } diff --git a/ErsatzTV.Infrastructure/Data/Repositories/PlexTelevisionRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/PlexTelevisionRepository.cs index b1c7809e7..1c6badefe 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/PlexTelevisionRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/PlexTelevisionRepository.cs @@ -433,7 +433,7 @@ public class PlexTelevisionRepository : IPlexTelevisionRepository { try { - if (await MediaItemRepository.MediaFileAlreadyExists(item, dbContext, _logger)) + if (await MediaItemRepository.MediaFileAlreadyExists(item, library.Paths.Head().Id, dbContext, _logger)) { return new MediaFileAlreadyExists(); } diff --git a/ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs index 5e7fc17f6..80b5568ae 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs @@ -686,7 +686,7 @@ public class TelevisionRepository : ITelevisionRepository { try { - if (await MediaItemRepository.MediaFileAlreadyExists(path, dbContext, _logger)) + if (await MediaItemRepository.MediaFileAlreadyExists(path, libraryPathId, dbContext, _logger)) { return new MediaFileAlreadyExists(); } diff --git a/ErsatzTV.Infrastructure/ErsatzTV.Infrastructure.csproj b/ErsatzTV.Infrastructure/ErsatzTV.Infrastructure.csproj index 7345f07d3..3e6fdbfb6 100644 --- a/ErsatzTV.Infrastructure/ErsatzTV.Infrastructure.csproj +++ b/ErsatzTV.Infrastructure/ErsatzTV.Infrastructure.csproj @@ -11,16 +11,16 @@ - + - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj b/ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj index 57e041c99..b92fcc1f3 100644 --- a/ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj +++ b/ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj @@ -15,7 +15,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/ErsatzTV/ErsatzTV.csproj b/ErsatzTV/ErsatzTV.csproj index 0faaa37f5..9ffaa70d3 100644 --- a/ErsatzTV/ErsatzTV.csproj +++ b/ErsatzTV/ErsatzTV.csproj @@ -55,16 +55,16 @@ - + - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -72,7 +72,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - +