Browse Source

add existing items to new scanner

pull/25/head
Jason Dove 6 years ago
parent
commit
f9ed2e6fa9
  1. 99
      ErsatzTV.Core.Tests/Metadata/TestMediaScannerTests.cs
  2. 26
      ErsatzTV.Core/Metadata/TestMediaScanner.cs

99
ErsatzTV.Core.Tests/Metadata/TestMediaScannerTests.cs

@ -32,7 +32,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -32,7 +32,7 @@ namespace ErsatzTV.Core.Tests.Metadata
new ItemScanningPlan(movieFileName, ScanningAction.Statistics),
new ItemScanningPlan(movieFileName, ScanningAction.FallbackMetadata));
}
[Test]
public void NewMovieFile_WithNfo_WithoutPoster(
[Values("test (2021).nfo", "movie.nfo")]
@ -56,7 +56,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -56,7 +56,7 @@ namespace ErsatzTV.Core.Tests.Metadata
new ItemScanningPlan(movieFileName, ScanningAction.Statistics),
new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata));
}
[Test]
public void NewMovieFile_WithoutNfo_WithPoster(
[Values("", "test (2021)-")]
@ -84,7 +84,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -84,7 +84,7 @@ namespace ErsatzTV.Core.Tests.Metadata
new ItemScanningPlan(movieFileName, ScanningAction.FallbackMetadata),
new ItemScanningPlan(posterFileName, ScanningAction.Poster));
}
[Test]
public void NewMovieFile_WithNfo_WithPoster(
[Values("test (2021).nfo", "movie.nfo")]
@ -115,5 +115,98 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -115,5 +115,98 @@ namespace ErsatzTV.Core.Tests.Metadata
new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata),
new ItemScanningPlan(posterFileName, ScanningAction.Poster));
}
// TODO: mtime should affect this
[Test]
public void ExistingMovieFile_WithNewNfo_WithoutPoster(
[Values("test (2021).nfo", "movie.nfo")]
string nfoFile)
{
// new movie file without nfo and without poster should have statistics and fallback metadata
var movieMediaItem = new MediaItem
{
Metadata = new MediaMetadata { Source = MetadataSource.Fallback },
Path = "/movies/test (2021)/test (2021).mkv"
};
var nfoFileName = $"/movies/test (2021)/{nfoFile}";
string[] fileNames = { movieMediaItem.Path, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsRight.Should().BeTrue();
source.RightToSeq().Should().BeEquivalentTo(movieMediaItem);
itemScanningPlans.Should()
.BeEquivalentTo(new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata));
}
[Test]
public void ExistingMovieFile_WithoutNfo_WithNewPoster(
[Values("", "test (2021)-")]
string basePosterName,
[Values("jpg", "jpeg", "png", "gif", "tbn")]
string posterExtension)
{
// new movie file without nfo and without poster should have statistics and fallback metadata
var movieMediaItem = new MediaItem
{
Metadata = new MediaMetadata { Source = MetadataSource.Fallback },
Path = "/movies/test (2021)/test (2021).mkv"
};
var posterFileName = $"/movies/test (2021)/{basePosterName}poster.{posterExtension}";
string[] fileNames = { movieMediaItem.Path, posterFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsRight.Should().BeTrue();
source.RightToSeq().Should().BeEquivalentTo(movieMediaItem);
itemScanningPlans.Should()
.BeEquivalentTo(new ItemScanningPlan(posterFileName, ScanningAction.Poster));
}
[Test]
public void ExistingMovieFile_WithNewNfo_WithNewPoster(
[Values("test (2021).nfo", "movie.nfo")]
string nfoFile,
[Values("", "test (2021)-")]
string basePosterName,
[Values("jpg", "jpeg", "png", "gif", "tbn")]
string posterExtension)
{
// new movie file without nfo and without poster should have statistics and fallback metadata
var movieMediaItem = new MediaItem
{
Metadata = new MediaMetadata { Source = MetadataSource.Fallback },
Path = "/movies/test (2021)/test (2021).mkv"
};
var nfoFileName = $"/movies/test (2021)/{nfoFile}";
var posterFileName = $"/movies/test (2021)/{basePosterName}poster.{posterExtension}";
string[] fileNames = { movieMediaItem.Path, nfoFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsRight.Should().BeTrue();
source.RightToSeq().Should().BeEquivalentTo(movieMediaItem);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata),
new ItemScanningPlan(posterFileName, ScanningAction.Poster));
}
}
}

26
ErsatzTV.Core/Metadata/TestMediaScanner.cs

@ -24,12 +24,12 @@ namespace ErsatzTV.Core.Metadata @@ -24,12 +24,12 @@ namespace ErsatzTV.Core.Metadata
Seq<string> files)
{
var results = new IntermediateResults();
var videoFiles = files.Filter(f => VideoFileExtensions.Contains(Path.GetExtension(f)));
Seq<string> videoFiles = files.Filter(f => VideoFileExtensions.Contains(Path.GetExtension(f)));
(Seq<string> newFiles, Seq<MediaItem> existingMediaItems) = videoFiles.Map(
s => mediaItems.Find(i => i.Path == s).ToEither(s))
.Partition();
// new files
foreach (string file in newFiles)
{
@ -44,8 +44,26 @@ namespace ErsatzTV.Core.Metadata @@ -44,8 +44,26 @@ namespace ErsatzTV.Core.Metadata
maybePoster.IfSome(
posterFile => results.Add(file, new ItemScanningPlan(posterFile, ScanningAction.Poster)));
}
// existing media items
foreach (MediaItem mediaItem in existingMediaItems)
{
if (mediaItem.Metadata == null || mediaItem.Metadata.Source == MetadataSource.Fallback)
{
Option<string> maybeNfoFile = LocateNfoFile(mediaType, files, mediaItem.Path);
maybeNfoFile.IfSome(
nfoFile => results.Add(
mediaItem,
new ItemScanningPlan(nfoFile, ScanningAction.SidecarMetadata)));
}
if (string.IsNullOrWhiteSpace(mediaItem.Poster))
{
Option<string> maybePoster = LocatePoster(mediaType, files, mediaItem.Path);
maybePoster.IfSome(
posterFile => results.Add(mediaItem, new ItemScanningPlan(posterFile, ScanningAction.Poster)));
}
}
return results.Summarize();
}
@ -68,7 +86,7 @@ namespace ErsatzTV.Core.Metadata @@ -68,7 +86,7 @@ namespace ErsatzTV.Core.Metadata
private static Option<string> LocatePoster(MediaType mediaType, Seq<string> files, string file)
{
string folder = Path.GetDirectoryName(file) ?? string.Empty;
switch (mediaType)
{
case MediaType.Movie:

Loading…
Cancel
Save