Browse Source

add more logging (#1224)

* more logging

* update dependencies
pull/1225/head
Jason Dove 3 years ago committed by GitHub
parent
commit
e93d678b97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      ErsatzTV.Application/ErsatzTV.Application.csproj
  2. 2
      ErsatzTV.Core/ErsatzTV.Core.csproj
  3. 2
      ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj
  4. 2
      ErsatzTV.Infrastructure/Data/Repositories/EmbyMovieRepository.cs
  5. 2
      ErsatzTV.Infrastructure/Data/Repositories/EmbyTelevisionRepository.cs
  6. 2
      ErsatzTV.Infrastructure/Data/Repositories/JellyfinMovieRepository.cs
  7. 2
      ErsatzTV.Infrastructure/Data/Repositories/JellyfinTelevisionRepository.cs
  8. 53
      ErsatzTV.Infrastructure/Data/Repositories/MediaItemRepository.cs
  9. 2
      ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs
  10. 16
      ErsatzTV.Infrastructure/Data/Repositories/OtherVideoRepository.cs
  11. 2
      ErsatzTV.Infrastructure/Data/Repositories/PlexMovieRepository.cs
  12. 2
      ErsatzTV.Infrastructure/Data/Repositories/PlexTelevisionRepository.cs
  13. 2
      ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs
  14. 8
      ErsatzTV.Infrastructure/ErsatzTV.Infrastructure.csproj
  15. 2
      ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj
  16. 14
      ErsatzTV/ErsatzTV.csproj

2
ErsatzTV.Application/ErsatzTV.Application.csproj

@ -16,7 +16,7 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Serilog.Formatting.Compact.Reader" Version="2.0.0" /> <PackageReference Include="Serilog.Formatting.Compact.Reader" Version="2.0.0" />
<PackageReference Include="Winista.MimeDetect" Version="1.0.1" /> <PackageReference Include="Winista.MimeDetect" Version="1.0.1" />
</ItemGroup> </ItemGroup>

2
ErsatzTV.Core/ErsatzTV.Core.csproj

@ -22,7 +22,7 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Serilog" Version="2.12.0" /> <PackageReference Include="Serilog" Version="2.12.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
</ItemGroup> </ItemGroup>

2
ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj

@ -14,7 +14,7 @@
<PackageReference Include="Moq" Version="4.18.4" /> <PackageReference Include="Moq" Version="4.18.4" />
<PackageReference Include="NUnit" Version="3.13.3" /> <PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.4.2" /> <PackageReference Include="NUnit3TestAdapter" Version="4.4.2" />
<PackageReference Include="NUnit.Analyzers" Version="3.6.0"> <PackageReference Include="NUnit.Analyzers" Version="3.6.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
</PackageReference> </PackageReference>

2
ErsatzTV.Infrastructure/Data/Repositories/EmbyMovieRepository.cs

@ -185,7 +185,7 @@ public class EmbyMovieRepository : IEmbyMovieRepository
{ {
try try
{ {
if (await MediaItemRepository.MediaFileAlreadyExists(movie, dbContext, _logger)) if (await MediaItemRepository.MediaFileAlreadyExists(movie, library.Paths.Head().Id, dbContext, _logger))
{ {
return new MediaFileAlreadyExists(); return new MediaFileAlreadyExists();
} }

2
ErsatzTV.Infrastructure/Data/Repositories/EmbyTelevisionRepository.cs

@ -809,7 +809,7 @@ public class EmbyTelevisionRepository : IEmbyTelevisionRepository
{ {
try try
{ {
if (await MediaItemRepository.MediaFileAlreadyExists(episode, dbContext, _logger)) if (await MediaItemRepository.MediaFileAlreadyExists(episode, library.Paths.Head().Id, dbContext, _logger))
{ {
return new MediaFileAlreadyExists(); return new MediaFileAlreadyExists();
} }

2
ErsatzTV.Infrastructure/Data/Repositories/JellyfinMovieRepository.cs

@ -367,7 +367,7 @@ public class JellyfinMovieRepository : IJellyfinMovieRepository
{ {
try try
{ {
if (await MediaItemRepository.MediaFileAlreadyExists(movie, dbContext, _logger)) if (await MediaItemRepository.MediaFileAlreadyExists(movie, library.Paths.Head().Id, dbContext, _logger))
{ {
return new MediaFileAlreadyExists(); return new MediaFileAlreadyExists();
} }

2
ErsatzTV.Infrastructure/Data/Repositories/JellyfinTelevisionRepository.cs

@ -812,7 +812,7 @@ public class JellyfinTelevisionRepository : IJellyfinTelevisionRepository
{ {
try try
{ {
if (await MediaItemRepository.MediaFileAlreadyExists(episode, dbContext, _logger)) if (await MediaItemRepository.MediaFileAlreadyExists(episode, library.Paths.Head().Id, dbContext, _logger))
{ {
return new MediaFileAlreadyExists(); return new MediaFileAlreadyExists();
} }

53
ErsatzTV.Infrastructure/Data/Repositories/MediaItemRepository.cs

@ -124,13 +124,13 @@ public class MediaItemRepository : IMediaItemRepository
return Unit.Default; return Unit.Default;
} }
public static async Task<bool> MediaFileAlreadyExists(MediaItem incoming, TvContext dbContext, ILogger logger) public static async Task<bool> MediaFileAlreadyExists(MediaItem incoming, int libraryPathId, TvContext dbContext, ILogger logger)
{ {
string path = incoming.GetHeadVersion().MediaFiles.Head().Path; string path = incoming.GetHeadVersion().MediaFiles.Head().Path;
return await MediaFileAlreadyExists(path, dbContext, logger); return await MediaFileAlreadyExists(path, libraryPathId, dbContext, logger);
} }
public static async Task<bool> MediaFileAlreadyExists(string path, TvContext dbContext, ILogger logger) public static async Task<bool> MediaFileAlreadyExists(string path, int libraryPathId, TvContext dbContext, ILogger logger)
{ {
Option<int> maybeMediaItemId = await dbContext.Connection Option<int> maybeMediaItemId = await dbContext.Connection
.QuerySingleOrDefaultAsync<int?>( .QuerySingleOrDefaultAsync<int?>(
@ -151,21 +151,40 @@ public class MediaItemRepository : IMediaItemRepository
foreach (MediaItem mediaItem in maybeMediaItem) foreach (MediaItem mediaItem in maybeMediaItem)
{ {
string libraryType = mediaItem.LibraryPath.Library switch Option<Library> maybeIncomingLibrary = await dbContext.Libraries
.Filter(l => l.Paths.Any(p => p.Id == libraryPathId))
.SingleOrDefaultAsync()
.Map(Optional);
foreach (Library incomingLibrary in maybeIncomingLibrary)
{ {
PlexLibrary => "Plex Library", string incomingLibraryType = incomingLibrary switch
EmbyLibrary => "Emby Library", {
JellyfinLibrary => "Jellyfin Library", PlexLibrary => "Plex Library",
_ => "Local Library" EmbyLibrary => "Emby Library",
}; JellyfinLibrary => "Jellyfin Library",
_ => "Local Library"
string libraryName = mediaItem.LibraryPath.Library.Name; };
logger.LogWarning(
"Unable to add media item; {LibraryType} '{LibraryName}' already contains path {Path}", string existingLibraryType = mediaItem.LibraryPath.Library switch
libraryType, {
libraryName, PlexLibrary => "Plex Library",
path); EmbyLibrary => "Emby Library",
return true; 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;
}
} }
} }

2
ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs

@ -234,7 +234,7 @@ public class MovieRepository : IMovieRepository
{ {
try try
{ {
if (await MediaItemRepository.MediaFileAlreadyExists(path, dbContext, _logger)) if (await MediaItemRepository.MediaFileAlreadyExists(path, libraryPathId, dbContext, _logger))
{ {
return new MediaFileAlreadyExists(); return new MediaFileAlreadyExists();
} }

16
ErsatzTV.Infrastructure/Data/Repositories/OtherVideoRepository.cs

@ -1,17 +1,24 @@
using Dapper; using Dapper;
using ErsatzTV.Core; using ErsatzTV.Core;
using ErsatzTV.Core.Domain; using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Errors;
using ErsatzTV.Core.Interfaces.Repositories; using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Metadata; using ErsatzTV.Core.Metadata;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace ErsatzTV.Infrastructure.Data.Repositories; namespace ErsatzTV.Infrastructure.Data.Repositories;
public class OtherVideoRepository : IOtherVideoRepository public class OtherVideoRepository : IOtherVideoRepository
{ {
private readonly IDbContextFactory<TvContext> _dbContextFactory; private readonly IDbContextFactory<TvContext> _dbContextFactory;
private readonly ILogger<OtherVideoRepository> _logger;
public OtherVideoRepository(IDbContextFactory<TvContext> dbContextFactory) => _dbContextFactory = dbContextFactory; public OtherVideoRepository(IDbContextFactory<TvContext> dbContextFactory, ILogger<OtherVideoRepository> logger)
{
_dbContextFactory = dbContextFactory;
_logger = logger;
}
public async Task<Either<BaseError, MediaItemScanResult<OtherVideo>>> GetOrAdd( public async Task<Either<BaseError, MediaItemScanResult<OtherVideo>>> GetOrAdd(
LibraryPath libraryPath, LibraryPath libraryPath,
@ -177,13 +184,18 @@ public class OtherVideoRepository : IOtherVideoRepository
.ToListAsync(); .ToListAsync();
} }
private static async Task<Either<BaseError, MediaItemScanResult<OtherVideo>>> AddOtherVideo( private async Task<Either<BaseError, MediaItemScanResult<OtherVideo>>> AddOtherVideo(
TvContext dbContext, TvContext dbContext,
int libraryPathId, int libraryPathId,
string path) string path)
{ {
try try
{ {
if (await MediaItemRepository.MediaFileAlreadyExists(path, libraryPathId, dbContext, _logger))
{
return new MediaFileAlreadyExists();
}
var otherVideo = new OtherVideo var otherVideo = new OtherVideo
{ {
LibraryPathId = libraryPathId, LibraryPathId = libraryPathId,

2
ErsatzTV.Infrastructure/Data/Repositories/PlexMovieRepository.cs

@ -185,7 +185,7 @@ public class PlexMovieRepository : IPlexMovieRepository
{ {
try try
{ {
if (await MediaItemRepository.MediaFileAlreadyExists(item, dbContext, _logger)) if (await MediaItemRepository.MediaFileAlreadyExists(item, library.Paths.Head().Id, dbContext, _logger))
{ {
return new MediaFileAlreadyExists(); return new MediaFileAlreadyExists();
} }

2
ErsatzTV.Infrastructure/Data/Repositories/PlexTelevisionRepository.cs

@ -433,7 +433,7 @@ public class PlexTelevisionRepository : IPlexTelevisionRepository
{ {
try try
{ {
if (await MediaItemRepository.MediaFileAlreadyExists(item, dbContext, _logger)) if (await MediaItemRepository.MediaFileAlreadyExists(item, library.Paths.Head().Id, dbContext, _logger))
{ {
return new MediaFileAlreadyExists(); return new MediaFileAlreadyExists();
} }

2
ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs

@ -686,7 +686,7 @@ public class TelevisionRepository : ITelevisionRepository
{ {
try try
{ {
if (await MediaItemRepository.MediaFileAlreadyExists(path, dbContext, _logger)) if (await MediaItemRepository.MediaFileAlreadyExists(path, libraryPathId, dbContext, _logger))
{ {
return new MediaFileAlreadyExists(); return new MediaFileAlreadyExists();
} }

8
ErsatzTV.Infrastructure/ErsatzTV.Infrastructure.csproj

@ -11,16 +11,16 @@
<PackageReference Include="Blurhash.ImageSharp" Version="3.0.0" /> <PackageReference Include="Blurhash.ImageSharp" Version="3.0.0" />
<PackageReference Include="CliWrap" Version="3.6.0" /> <PackageReference Include="CliWrap" Version="3.6.0" />
<PackageReference Include="Dapper" Version="2.0.123" /> <PackageReference Include="Dapper" Version="2.0.123" />
<PackageReference Include="Jint" Version="3.0.0-beta-2047" /> <PackageReference Include="Jint" Version="3.0.0-beta-2048" />
<PackageReference Include="Lucene.Net" Version="4.8.0-beta00016" /> <PackageReference Include="Lucene.Net" Version="4.8.0-beta00016" />
<PackageReference Include="Lucene.Net.Analysis.Common" Version="4.8.0-beta00016" /> <PackageReference Include="Lucene.Net.Analysis.Common" Version="4.8.0-beta00016" />
<PackageReference Include="Lucene.Net.QueryParser" Version="4.8.0-beta00016" /> <PackageReference Include="Lucene.Net.QueryParser" Version="4.8.0-beta00016" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.3" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.3"> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.4">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.3" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.4" />
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.5.22"> <PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.5.22">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

2
ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj

@ -15,7 +15,7 @@
<PackageReference Include="Moq" Version="4.18.4" /> <PackageReference Include="Moq" Version="4.18.4" />
<PackageReference Include="NUnit" Version="3.13.3" /> <PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.4.2" /> <PackageReference Include="NUnit3TestAdapter" Version="4.4.2" />
<PackageReference Include="NUnit.Analyzers" Version="3.6.0"> <PackageReference Include="NUnit.Analyzers" Version="3.6.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
</PackageReference> </PackageReference>

14
ErsatzTV/ErsatzTV.csproj

@ -55,16 +55,16 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Bugsnag.AspNet.Core" Version="3.1.0" /> <PackageReference Include="Bugsnag.AspNet.Core" Version="3.1.0" />
<PackageReference Include="FluentValidation" Version="11.5.1" /> <PackageReference Include="FluentValidation" Version="11.5.1" />
<PackageReference Include="FluentValidation.AspNetCore" Version="11.2.2" /> <PackageReference Include="FluentValidation.AspNetCore" Version="11.3.0" />
<PackageReference Include="HtmlSanitizer" Version="8.0.645" /> <PackageReference Include="HtmlSanitizer" Version="8.0.645" />
<PackageReference Include="LanguageExt.Core" Version="4.4.2" /> <PackageReference Include="LanguageExt.Core" Version="4.4.2" />
<PackageReference Include="Markdig" Version="0.31.0" /> <PackageReference Include="Markdig" Version="0.31.0" />
<PackageReference Include="MediatR.Courier.DependencyInjection" Version="5.0.0" /> <PackageReference Include="MediatR.Courier.DependencyInjection" Version="5.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.3" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.4" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="7.0.3" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="7.0.4" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.3" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.4" />
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="7.0.3" /> <PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.3"> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.4">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
@ -72,7 +72,7 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="MudBlazor" Version="6.1.9" /> <PackageReference Include="MudBlazor" Version="6.2.0" />
<PackageReference Include="NaturalSort.Extension" Version="4.0.0" /> <PackageReference Include="NaturalSort.Extension" Version="4.0.0" />
<PackageReference Include="PPioli.FluentValidation.Blazor" Version="11.1.0" /> <PackageReference Include="PPioli.FluentValidation.Blazor" Version="11.1.0" />
<PackageReference Include="Refit.HttpClientFactory" Version="6.3.2" /> <PackageReference Include="Refit.HttpClientFactory" Version="6.3.2" />

Loading…
Cancel
Save