Browse Source

reorganize to fix build (#1540)

pull/1542/head
Jason Dove 2 years ago committed by GitHub
parent
commit
56bc58fce9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      ErsatzTV.Core/Interfaces/Metadata/ILocalStatisticsProvider.cs
  2. 4
      ErsatzTV.Infrastructure.Tests/Metadata/LocalStatisticsProviderTests.cs
  3. 28
      ErsatzTV.Infrastructure/Data/Repositories/MetadataRepository.cs
  4. 2
      ErsatzTV.Infrastructure/Data/Repositories/TelevisionRepository.cs
  5. 71
      ErsatzTV.Infrastructure/Metadata/LocalStatisticsProvider.cs
  6. 2
      ErsatzTV.Infrastructure/Metadata/MetadataSongTag.cs
  7. 2
      ErsatzTV.Infrastructure/Search/ElasticSearchIndex.cs
  8. 8
      ErsatzTV.Infrastructure/Search/LuceneSearchIndex.cs
  9. 3
      ErsatzTV.Infrastructure/Streaming/ExternalJsonPlayoutItemProvider.cs
  10. 2
      ErsatzTV.Scanner.Tests/Core/FFmpeg/TranscodingTests.cs
  11. 1
      ErsatzTV.Scanner.Tests/Core/Metadata/MovieFolderScannerTests.cs
  12. 1
      ErsatzTV.Scanner/Core/Metadata/LocalMetadataProvider.cs
  13. 4
      ErsatzTV.Scanner/ErsatzTV.Scanner.csproj
  14. 3
      ErsatzTV.Scanner/Program.cs
  15. 5
      ErsatzTV/Startup.cs

2
ErsatzTV.Scanner/Core/Interfaces/Metadata/ILocalStatisticsProvider.cs → ErsatzTV.Core/Interfaces/Metadata/ILocalStatisticsProvider.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
using ErsatzTV.Core;
using ErsatzTV.Core.Domain;
namespace ErsatzTV.Scanner.Core.Interfaces.Metadata;
namespace ErsatzTV.Core.Interfaces.Metadata;
public interface ILocalStatisticsProvider
{

4
ErsatzTV.Scanner.Tests/Core/Metadata/LocalStatisticsProviderTests.cs → ErsatzTV.Infrastructure.Tests/Metadata/LocalStatisticsProviderTests.cs

@ -2,13 +2,13 @@ @@ -2,13 +2,13 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Metadata;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Scanner.Core.Metadata;
using ErsatzTV.Infrastructure.Metadata;
using FluentAssertions;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
namespace ErsatzTV.Scanner.Tests.Core.Metadata;
namespace ErsatzTV.Infrastructure.Tests.Metadata;
[TestFixture]
public class LocalStatisticsProviderTests

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

@ -28,14 +28,14 @@ public class MetadataRepository : IMetadataRepository @@ -28,14 +28,14 @@ public class MetadataRepository : IMetadataRepository
.Map(result => result > 0);
}
public async Task<bool> Update(Metadata metadata)
public async Task<bool> Update(Core.Domain.Metadata metadata)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();
dbContext.Entry(metadata).State = EntityState.Modified;
return await dbContext.SaveChangesAsync() > 0;
}
public async Task<bool> Add(Metadata metadata)
public async Task<bool> Add(Core.Domain.Metadata metadata)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();
dbContext.Entry(metadata).State = EntityState.Added;
@ -257,7 +257,7 @@ public class MetadataRepository : IMetadataRepository @@ -257,7 +257,7 @@ public class MetadataRepository : IMetadataRepository
}).ToUnit();
}
public async Task<Unit> AddArtwork(Metadata metadata, Artwork artwork)
public async Task<Unit> AddArtwork(Core.Domain.Metadata metadata, Artwork artwork)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();
@ -308,7 +308,7 @@ public class MetadataRepository : IMetadataRepository @@ -308,7 +308,7 @@ public class MetadataRepository : IMetadataRepository
};
}
public async Task<Unit> RemoveArtwork(Metadata metadata, ArtworkKind artworkKind)
public async Task<Unit> RemoveArtwork(Core.Domain.Metadata metadata, ArtworkKind artworkKind)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();
return await dbContext.Connection.ExecuteAsync(
@ -318,7 +318,7 @@ public class MetadataRepository : IMetadataRepository @@ -318,7 +318,7 @@ public class MetadataRepository : IMetadataRepository
}
public async Task<bool> CloneArtwork(
Metadata metadata,
Core.Domain.Metadata metadata,
Option<Artwork> maybeArtwork,
ArtworkKind artworkKind,
string sourcePath,
@ -436,7 +436,7 @@ public class MetadataRepository : IMetadataRepository @@ -436,7 +436,7 @@ public class MetadataRepository : IMetadataRepository
.Map(result => result > 0);
}
public async Task<bool> AddGuid(Metadata metadata, MetadataGuid guid)
public async Task<bool> AddGuid(Core.Domain.Metadata metadata, MetadataGuid guid)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();
return metadata switch
@ -487,7 +487,7 @@ public class MetadataRepository : IMetadataRepository @@ -487,7 +487,7 @@ public class MetadataRepository : IMetadataRepository
.Map(result => result > 0);
}
public async Task<bool> UpdateSubtitles(Metadata metadata, List<Subtitle> subtitles)
public async Task<bool> UpdateSubtitles(Core.Domain.Metadata metadata, List<Subtitle> subtitles)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();
return await UpdateSubtitles(dbContext, metadata, subtitles);
@ -536,7 +536,7 @@ public class MetadataRepository : IMetadataRepository @@ -536,7 +536,7 @@ public class MetadataRepository : IMetadataRepository
.Map(result => result > 0);
}
private static async Task<bool> UpdateSubtitles(TvContext dbContext, Metadata metadata, List<Subtitle> subtitles)
private static async Task<bool> UpdateSubtitles(TvContext dbContext, Core.Domain.Metadata metadata, List<Subtitle> subtitles)
{
// _logger.LogDebug(
// "Updating {Count} subtitles; metadata is {Metadata}",
@ -545,24 +545,24 @@ public class MetadataRepository : IMetadataRepository @@ -545,24 +545,24 @@ public class MetadataRepository : IMetadataRepository
int metadataId = metadata.Id;
Option<Metadata> maybeMetadata = metadata switch
Option<Core.Domain.Metadata> maybeMetadata = metadata switch
{
EpisodeMetadata => await dbContext.EpisodeMetadata
.Include(em => em.Subtitles)
.SelectOneAsync(em => em.Id, em => em.Id == metadataId)
.MapT(em => (Metadata)em),
.MapT(em => (Core.Domain.Metadata)em),
MovieMetadata => await dbContext.MovieMetadata
.Include(mm => mm.Subtitles)
.SelectOneAsync(mm => mm.Id, mm => mm.Id == metadataId)
.MapT(mm => (Metadata)mm),
.MapT(mm => (Core.Domain.Metadata)mm),
MusicVideoMetadata => await dbContext.MusicVideoMetadata
.Include(mvm => mvm.Subtitles)
.SelectOneAsync(mvm => mvm.Id, mm => mm.Id == metadataId)
.MapT(mvm => (Metadata)mvm),
.MapT(mvm => (Core.Domain.Metadata)mvm),
OtherVideoMetadata => await dbContext.OtherVideoMetadata
.Include(ovm => ovm.Subtitles)
.SelectOneAsync(ovm => ovm.Id, mm => mm.Id == metadataId)
.MapT(ovm => (Metadata)ovm),
.MapT(ovm => (Core.Domain.Metadata)ovm),
_ => None
};
@ -570,7 +570,7 @@ public class MetadataRepository : IMetadataRepository @@ -570,7 +570,7 @@ public class MetadataRepository : IMetadataRepository
// "Existing metadata is {Metadata}",
// await maybeMetadata.Map(m => m.GetType().Name).IfNoneAsync("[none]"));
foreach (Metadata existing in maybeMetadata)
foreach (Core.Domain.Metadata existing in maybeMetadata)
{
var toAdd = subtitles.Filter(s => existing.Subtitles.All(es => es.StreamIndex != s.StreamIndex)).ToList();
var toRemove = existing.Subtitles.Filter(es => subtitles.All(s => s.StreamIndex != es.StreamIndex))

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

@ -583,7 +583,7 @@ public class TelevisionRepository : ITelevisionRepository @@ -583,7 +583,7 @@ public class TelevisionRepository : ITelevisionRepository
new { genre.Name, MetadataId = metadata.Id }).Map(result => result > 0);
}
public async Task<bool> AddTag(Metadata metadata, Tag tag)
public async Task<bool> AddTag(Core.Domain.Metadata metadata, Tag tag)
{
await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync();

71
ErsatzTV.Scanner/Core/Metadata/LocalStatisticsProvider.cs → ErsatzTV.Infrastructure/Metadata/LocalStatisticsProvider.cs

@ -11,11 +11,10 @@ using ErsatzTV.Core.Domain; @@ -11,11 +11,10 @@ using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Extensions;
using ErsatzTV.Core.Interfaces.Metadata;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Scanner.Core.Interfaces.Metadata;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace ErsatzTV.Scanner.Core.Metadata;
namespace ErsatzTV.Infrastructure.Metadata;
public class LocalStatisticsProvider : ILocalStatisticsProvider
{
@ -242,7 +241,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider @@ -242,7 +241,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
return BaseError.New($"FFprobe at {ffprobePath} exited with code {probe.ExitCode}");
}
FFprobe? ffprobe = JsonConvert.DeserializeObject<FFprobe>(probe.StandardOutput);
FFprobe ffprobe = JsonConvert.DeserializeObject<FFprobe>(probe.StandardOutput);
if (ffprobe is not null)
{
const string PATTERN = @"\[SAR\s+([0-9]+:[0-9]+)\s+DAR\s+([0-9]+:[0-9]+)\]";
@ -338,7 +337,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider @@ -338,7 +337,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
}
}
internal MediaVersion ProjectToMediaVersion(string path, FFprobe probeOutput) =>
public MediaVersion ProjectToMediaVersion(string path, FFprobe probeOutput) =>
Optional(probeOutput)
.Filter(json => json is { format: not null, streams: not null })
.ToValidation<BaseError>("Unable to parse ffprobe output")
@ -398,7 +397,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider @@ -398,7 +397,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
version.Streams.Add(stream);
}
FFprobeStreamData? videoStream = json.streams?.FirstOrDefault(s => s.codec_type == "video");
FFprobeStreamData videoStream = json.streams?.FirstOrDefault(s => s.codec_type == "video");
if (videoStream != null)
{
version.SampleAspectRatio = string.IsNullOrWhiteSpace(videoStream.sample_aspect_ratio)
@ -535,7 +534,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider @@ -535,7 +534,7 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
Chapters = new List<MediaChapter>()
});
private static VideoScanKind ScanKindFromFieldOrder(string? fieldOrder) =>
private static VideoScanKind ScanKindFromFieldOrder(string fieldOrder) =>
fieldOrder?.ToLowerInvariant() switch
{
"tt" or "bb" or "tb" or "bt" => VideoScanKind.Interlaced,
@ -544,9 +543,9 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider @@ -544,9 +543,9 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
};
// ReSharper disable InconsistentNaming
public record FFprobe(FFprobeFormat? format, List<FFprobeStreamData>? streams, List<FFprobeChapter>? chapters);
public record FFprobe(FFprobeFormat format, List<FFprobeStreamData> streams, List<FFprobeChapter> chapters);
public record FFprobeFormat(string duration, FFprobeTags? tags);
public record FFprobeFormat(string duration, FFprobeTags tags);
[SuppressMessage("Naming", "CA1707:Identifiers should not contain underscores")]
public record FFprobeDisposition(int @default, int forced, int attached_pic);
@ -554,44 +553,44 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider @@ -554,44 +553,44 @@ public class LocalStatisticsProvider : ILocalStatisticsProvider
[SuppressMessage("Naming", "CA1707:Identifiers should not contain underscores")]
public record FFprobeStreamData(
int index,
string? codec_name,
string? profile,
string? codec_type,
string codec_name,
string profile,
string codec_type,
int channels,
int width,
int height,
string? sample_aspect_ratio,
string? display_aspect_ratio,
string? pix_fmt,
string? color_range,
string? color_space,
string? color_transfer,
string? color_primaries,
string? field_order,
string? r_frame_rate,
string? bits_per_raw_sample,
FFprobeDisposition? disposition,
FFprobeTags? tags);
string sample_aspect_ratio,
string display_aspect_ratio,
string pix_fmt,
string color_range,
string color_space,
string color_transfer,
string color_primaries,
string field_order,
string r_frame_rate,
string bits_per_raw_sample,
FFprobeDisposition disposition,
FFprobeTags tags);
[SuppressMessage("Naming", "CA1707:Identifiers should not contain underscores")]
public record FFprobeChapter(
long id,
string? start_time,
string? end_time,
FFprobeTags? tags);
string start_time,
string end_time,
FFprobeTags tags);
public record FFprobeTags(
string? language,
string? title,
string? filename,
string? mimetype,
string? artist,
string language,
string title,
string filename,
string mimetype,
string artist,
[property: JsonProperty(PropertyName = "album_artist")]
string? albumArtist,
string? album,
string? track,
string? genre,
string? date)
string albumArtist,
string album,
string track,
string genre,
string date)
{
public static readonly FFprobeTags Empty = new(null, null, null, null, null, null, null, null, null, null);
}

2
ErsatzTV.Scanner/Core/Metadata/MetadataSongTag.cs → ErsatzTV.Infrastructure/Metadata/MetadataSongTag.cs

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
namespace ErsatzTV.Scanner.Core.Metadata;
namespace ErsatzTV.Infrastructure.Metadata;
public static class MetadataSongTag
{

2
ErsatzTV.Infrastructure/Search/ElasticSearchIndex.cs

@ -803,7 +803,7 @@ public class ElasticSearchIndex : ISearchIndex @@ -803,7 +803,7 @@ public class ElasticSearchIndex : ISearchIndex
}
}
private static Dictionary<string, List<string>> GetMetadataGuids(Metadata metadata)
private static Dictionary<string, List<string>> GetMetadataGuids(Core.Domain.Metadata metadata)
{
var result = new Dictionary<string, List<string>>();

8
ErsatzTV.Infrastructure/Search/LuceneSearchIndex.cs

@ -1285,7 +1285,7 @@ public sealed class LuceneSearchIndex : ISearchIndex @@ -1285,7 +1285,7 @@ public sealed class LuceneSearchIndex : ISearchIndex
}
}
private static void AddMetadataGuids(Metadata metadata, Document doc)
private static void AddMetadataGuids(Core.Domain.Metadata metadata, Document doc)
{
foreach (MetadataGuid guid in metadata.Guids)
{
@ -1298,7 +1298,7 @@ public sealed class LuceneSearchIndex : ISearchIndex @@ -1298,7 +1298,7 @@ public sealed class LuceneSearchIndex : ISearchIndex
}
// this is used for filtering duplicate search results
internal static string GetTitleAndYear(Metadata metadata) =>
internal static string GetTitleAndYear(Core.Domain.Metadata metadata) =>
metadata switch
{
EpisodeMetadata em =>
@ -1315,10 +1315,10 @@ public sealed class LuceneSearchIndex : ISearchIndex @@ -1315,10 +1315,10 @@ public sealed class LuceneSearchIndex : ISearchIndex
_ => $"{Title(metadata)}_{metadata.Year}".ToLowerInvariant()
};
private static string Title(Metadata metadata) =>
private static string Title(Core.Domain.Metadata metadata) =>
(metadata.Title ?? string.Empty).Replace(' ', '_');
internal static string GetJumpLetter(Metadata metadata)
internal static string GetJumpLetter(Core.Domain.Metadata metadata)
{
foreach (char c in (metadata.SortTitle ?? " ").ToLowerInvariant().HeadOrNone())
{

3
ErsatzTV.Scanner/Application/Streaming/ExternalJsonPlayoutItemProvider.cs → ErsatzTV.Infrastructure/Streaming/ExternalJsonPlayoutItemProvider.cs

@ -10,12 +10,11 @@ using ErsatzTV.Core.Plex; @@ -10,12 +10,11 @@ using ErsatzTV.Core.Plex;
using ErsatzTV.Core.Streaming;
using ErsatzTV.Infrastructure.Data;
using ErsatzTV.Infrastructure.Extensions;
using ErsatzTV.Scanner.Core.Interfaces.Metadata;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace ErsatzTV.Scanner.Application.Streaming;
namespace ErsatzTV.Infrastructure.Streaming;
public class ExternalJsonPlayoutItemProvider : IExternalJsonPlayoutItemProvider
{

2
ErsatzTV.Scanner.Tests/Core/FFmpeg/TranscodingTests.cs

@ -10,6 +10,7 @@ using ErsatzTV.Core.Domain.Filler; @@ -10,6 +10,7 @@ using ErsatzTV.Core.Domain.Filler;
using ErsatzTV.Core.FFmpeg;
using ErsatzTV.Core.Interfaces.FFmpeg;
using ErsatzTV.Core.Interfaces.Images;
using ErsatzTV.Core.Interfaces.Metadata;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Metadata;
using ErsatzTV.FFmpeg;
@ -22,6 +23,7 @@ using ErsatzTV.FFmpeg.Format; @@ -22,6 +23,7 @@ using ErsatzTV.FFmpeg.Format;
using ErsatzTV.FFmpeg.Pipeline;
using ErsatzTV.FFmpeg.State;
using ErsatzTV.Infrastructure.Images;
using ErsatzTV.Infrastructure.Metadata;
using ErsatzTV.Infrastructure.Runtime;
using ErsatzTV.Scanner.Core.Interfaces.Metadata;
using ErsatzTV.Scanner.Core.Metadata;

1
ErsatzTV.Scanner.Tests/Core/Metadata/MovieFolderScannerTests.cs

@ -4,6 +4,7 @@ using ErsatzTV.Core; @@ -4,6 +4,7 @@ using ErsatzTV.Core;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.FFmpeg;
using ErsatzTV.Core.Interfaces.Images;
using ErsatzTV.Core.Interfaces.Metadata;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Metadata;
using ErsatzTV.Scanner.Core.Interfaces.FFmpeg;

1
ErsatzTV.Scanner/Core/Metadata/LocalMetadataProvider.cs

@ -5,6 +5,7 @@ using ErsatzTV.Core.Extensions; @@ -5,6 +5,7 @@ using ErsatzTV.Core.Extensions;
using ErsatzTV.Core.Interfaces.Metadata;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Metadata;
using ErsatzTV.Infrastructure.Metadata;
using ErsatzTV.Scanner.Core.Interfaces.Metadata;
using ErsatzTV.Scanner.Core.Interfaces.Metadata.Nfo;
using ErsatzTV.Scanner.Core.Metadata.Nfo;

4
ErsatzTV.Scanner/ErsatzTV.Scanner.csproj

@ -42,4 +42,8 @@ @@ -42,4 +42,8 @@
</AssemblyAttribute>
</ItemGroup>
<ItemGroup>
<Folder Include="Application\Streaming\" />
</ItemGroup>
</Project>

3
ErsatzTV.Scanner/Program.cs

@ -13,7 +13,6 @@ using ErsatzTV.Core.Interfaces.Plex; @@ -13,7 +13,6 @@ using ErsatzTV.Core.Interfaces.Plex;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Interfaces.Repositories.Caching;
using ErsatzTV.Core.Interfaces.Search;
using ErsatzTV.Core.Interfaces.Streaming;
using ErsatzTV.Core.Jellyfin;
using ErsatzTV.Core.Metadata;
using ErsatzTV.Core.Plex;
@ -24,11 +23,11 @@ using ErsatzTV.Infrastructure.Data.Repositories.Caching; @@ -24,11 +23,11 @@ using ErsatzTV.Infrastructure.Data.Repositories.Caching;
using ErsatzTV.Infrastructure.Emby;
using ErsatzTV.Infrastructure.Images;
using ErsatzTV.Infrastructure.Jellyfin;
using ErsatzTV.Infrastructure.Metadata;
using ErsatzTV.Infrastructure.Plex;
using ErsatzTV.Infrastructure.Runtime;
using ErsatzTV.Infrastructure.Search;
using ErsatzTV.Infrastructure.Sqlite.Data;
using ErsatzTV.Scanner.Application.Streaming;
using ErsatzTV.Scanner.Core.Emby;
using ErsatzTV.Scanner.Core.FFmpeg;
using ErsatzTV.Scanner.Core.Interfaces.FFmpeg;

5
ErsatzTV/Startup.cs

@ -50,16 +50,15 @@ using ErsatzTV.Infrastructure.Health.Checks; @@ -50,16 +50,15 @@ using ErsatzTV.Infrastructure.Health.Checks;
using ErsatzTV.Infrastructure.Images;
using ErsatzTV.Infrastructure.Jellyfin;
using ErsatzTV.Infrastructure.Locking;
using ErsatzTV.Infrastructure.Metadata;
using ErsatzTV.Infrastructure.Plex;
using ErsatzTV.Infrastructure.Runtime;
using ErsatzTV.Infrastructure.Scheduling;
using ErsatzTV.Infrastructure.Scripting;
using ErsatzTV.Infrastructure.Search;
using ErsatzTV.Infrastructure.Sqlite.Data;
using ErsatzTV.Infrastructure.Streaming;
using ErsatzTV.Infrastructure.Trakt;
using ErsatzTV.Scanner.Application.Streaming;
using ErsatzTV.Scanner.Core.Interfaces.Metadata;
using ErsatzTV.Scanner.Core.Metadata;
using ErsatzTV.Serialization;
using ErsatzTV.Services;
using ErsatzTV.Services.RunOnce;

Loading…
Cancel
Save