Browse Source

add tv show metadata and posters

pull/25/head
Jason Dove 6 years ago
parent
commit
7a37fc8d7a
  1. 571
      ErsatzTV.Core.Tests/Metadata/TestMediaScannerTests.cs
  2. 15
      ErsatzTV.Core/Metadata/TestMediaScanner.cs

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

@ -10,209 +10,404 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -10,209 +10,404 @@ namespace ErsatzTV.Core.Tests.Metadata
[TestFixture]
public class TestMediaScannerTests
{
private readonly TestMediaScanner _scanner = new();
[Test]
public void NewMovieFile_WithoutNfo_WithoutPoster()
[TestFixture]
public class NewMovieTests
{
// new movie file without nfo and without poster should have statistics and fallback metadata
var movieFileName = "/movies/test (2021)/test (2021).mkv";
string[] fileNames = { movieFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(movieFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(movieFileName, ScanningAction.Statistics),
new ItemScanningPlan(movieFileName, ScanningAction.FallbackMetadata),
new ItemScanningPlan(movieFileName, ScanningAction.Collections));
}
private readonly TestMediaScanner _scanner = new();
[Test]
public void NewMovieFile_WithNfo_WithoutPoster(
[Values("test (2021).nfo", "movie.nfo")]
string nfoFile)
{
// new movie file without nfo and without poster should have statistics and fallback metadata
var movieFileName = "/movies/test (2021)/test (2021).mkv";
var nfoFileName = $"/movies/test (2021)/{nfoFile}";
string[] fileNames = { movieFileName, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(movieFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(movieFileName, ScanningAction.Statistics),
new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata),
new ItemScanningPlan(movieFileName, ScanningAction.Collections));
}
[Test]
public void WithoutNfo_WithoutPoster()
{
var movieFileName = "/movies/test (2021)/test (2021).mkv";
string[] fileNames = { movieFileName };
[Test]
public void NewMovieFile_WithoutNfo_WithPoster(
[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 movieFileName = "/movies/test (2021)/test (2021).mkv";
var posterFileName = $"/movies/test (2021)/{basePosterName}poster.{posterExtension}";
string[] fileNames = { movieFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(movieFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(movieFileName, ScanningAction.Statistics),
new ItemScanningPlan(movieFileName, ScanningAction.FallbackMetadata),
new ItemScanningPlan(posterFileName, ScanningAction.Poster),
new ItemScanningPlan(movieFileName, ScanningAction.Collections));
}
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
[Test]
public void NewMovieFile_WithNfo_WithPoster(
[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 movieFileName = "/movies/test (2021)/test (2021).mkv";
var nfoFileName = $"/movies/test (2021)/{nfoFile}";
var posterFileName = $"/movies/test (2021)/{basePosterName}poster.{posterExtension}";
string[] fileNames = { movieFileName, nfoFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(movieFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(movieFileName, ScanningAction.Statistics),
new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata),
new ItemScanningPlan(posterFileName, ScanningAction.Poster),
new ItemScanningPlan(movieFileName, ScanningAction.Collections));
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(movieFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(movieFileName, ScanningAction.Statistics),
new ItemScanningPlan(movieFileName, ScanningAction.FallbackMetadata),
new ItemScanningPlan(movieFileName, ScanningAction.Collections));
}
[Test]
public void WithNfo_WithoutPoster(
[Values("test (2021).nfo", "movie.nfo")]
string nfoFile)
{
var movieFileName = "/movies/test (2021)/test (2021).mkv";
var nfoFileName = $"/movies/test (2021)/{nfoFile}";
string[] fileNames = { movieFileName, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(movieFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(movieFileName, ScanningAction.Statistics),
new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata),
new ItemScanningPlan(movieFileName, ScanningAction.Collections));
}
[Test]
public void WithoutNfo_WithPoster(
[Values("", "test (2021)-")]
string basePosterName,
[Values("jpg", "jpeg", "png", "gif", "tbn")]
string posterExtension)
{
var movieFileName = "/movies/test (2021)/test (2021).mkv";
var posterFileName = $"/movies/test (2021)/{basePosterName}poster.{posterExtension}";
string[] fileNames = { movieFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(movieFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(movieFileName, ScanningAction.Statistics),
new ItemScanningPlan(movieFileName, ScanningAction.FallbackMetadata),
new ItemScanningPlan(posterFileName, ScanningAction.Poster),
new ItemScanningPlan(movieFileName, ScanningAction.Collections));
}
[Test]
public void WithNfo_WithPoster(
[Values("test (2021).nfo", "movie.nfo")]
string nfoFile,
[Values("", "test (2021)-")]
string basePosterName,
[Values("jpg", "jpeg", "png", "gif", "tbn")]
string posterExtension)
{
var movieFileName = "/movies/test (2021)/test (2021).mkv";
var nfoFileName = $"/movies/test (2021)/{nfoFile}";
var posterFileName = $"/movies/test (2021)/{basePosterName}poster.{posterExtension}";
string[] fileNames = { movieFileName, nfoFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(movieFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(movieFileName, ScanningAction.Statistics),
new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata),
new ItemScanningPlan(posterFileName, ScanningAction.Poster),
new ItemScanningPlan(movieFileName, ScanningAction.Collections));
}
}
// TODO: mtime should affect this
[Test]
public void ExistingMovieFile_WithNewNfo_WithoutPoster(
[Values("test (2021).nfo", "movie.nfo")]
string nfoFile)
[TestFixture]
public class ExistingMovieTests
{
// new movie file without nfo and without poster should have statistics and fallback metadata
var movieMediaItem = new MediaItem
private readonly TestMediaScanner _scanner = new();
// TODO: mtime should affect this
[Test]
public void WithNewNfo_WithoutPoster(
[Values("test (2021).nfo", "movie.nfo")]
string nfoFile)
{
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),
new ItemScanningPlan(movieMediaItem.Path, ScanningAction.Collections));
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),
new ItemScanningPlan(movieMediaItem.Path, ScanningAction.Collections));
}
[Test]
public void WithoutNfo_WithNewPoster(
[Values("", "test (2021)-")]
string basePosterName,
[Values("jpg", "jpeg", "png", "gif", "tbn")]
string posterExtension)
{
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 WithNewNfo_WithNewPoster(
[Values("test (2021).nfo", "movie.nfo")]
string nfoFile,
[Values("", "test (2021)-")]
string basePosterName,
[Values("jpg", "jpeg", "png", "gif", "tbn")]
string posterExtension)
{
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),
new ItemScanningPlan(movieMediaItem.Path, ScanningAction.Collections));
}
}
[Test]
public void ExistingMovieFile_WithoutNfo_WithNewPoster(
[Values("", "test (2021)-")]
string basePosterName,
[Values("jpg", "jpeg", "png", "gif", "tbn")]
string posterExtension)
[TestFixture]
public class NewEpisodeTests
{
// new movie file without nfo and without poster should have statistics and fallback metadata
var movieMediaItem = new MediaItem
private readonly TestMediaScanner _scanner = new();
[Test]
public void WithoutNfo_WithoutPoster()
{
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));
}
var episodeFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.mkv";
string[] fileNames = { episodeFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.TvShow,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(episodeFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(episodeFileName, ScanningAction.Statistics),
new ItemScanningPlan(episodeFileName, ScanningAction.FallbackMetadata),
new ItemScanningPlan(episodeFileName, ScanningAction.Collections));
}
[Test]
public void WithNfo_WithoutPoster()
{
var episodeFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.mkv";
var nfoFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.nfo";
string[] fileNames = { episodeFileName, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.TvShow,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(episodeFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(episodeFileName, ScanningAction.Statistics),
new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata),
new ItemScanningPlan(episodeFileName, ScanningAction.Collections));
}
[Test]
public void WithoutNfo_WithPoster(
[Values("jpg", "jpeg", "png", "gif", "tbn")]
string posterExtension)
{
var episodeFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.mkv";
var posterFileName = $"/tv/test (2021)/poster.{posterExtension}";
string[] fileNames = { episodeFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.TvShow,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(episodeFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(episodeFileName, ScanningAction.Statistics),
new ItemScanningPlan(episodeFileName, ScanningAction.FallbackMetadata),
new ItemScanningPlan(posterFileName, ScanningAction.Poster),
new ItemScanningPlan(episodeFileName, ScanningAction.Collections));
}
[Test]
public void WithNfo_WithPoster(
[Values("jpg", "jpeg", "png", "gif", "tbn")]
string posterExtension)
{
var episodeFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.mkv";
var nfoFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.nfo";
var posterFileName = $"/tv/test (2021)/poster.{posterExtension}";
[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)
string[] fileNames = { episodeFileName, nfoFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.TvShow,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsLeft.Should().BeTrue();
source.LeftToSeq().Should().BeEquivalentTo(episodeFileName);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(episodeFileName, ScanningAction.Statistics),
new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata),
new ItemScanningPlan(posterFileName, ScanningAction.Poster),
new ItemScanningPlan(episodeFileName, ScanningAction.Collections));
}
}
[TestFixture]
public class ExistingEpisodeTests
{
// new movie file without nfo and without poster should have statistics and fallback metadata
var movieMediaItem = new MediaItem
private readonly TestMediaScanner _scanner = new();
// TODO: mtime should affect this
[Test]
public void WithNewNfo_WithoutPoster()
{
var episodeMediaItem = new MediaItem
{
Metadata = new MediaMetadata { Source = MetadataSource.Fallback },
Path = "/tv/test (2021)/season 01/test (2021) - s01e03.mkv"
};
var nfoFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.nfo";
string[] fileNames = { episodeMediaItem.Path, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsRight.Should().BeTrue();
source.RightToSeq().Should().BeEquivalentTo(episodeMediaItem);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata),
new ItemScanningPlan(episodeMediaItem.Path, ScanningAction.Collections));
}
[Test]
public void WithoutNfo_WithNewPoster(
[Values("jpg", "jpeg", "png", "gif", "tbn")]
string posterExtension)
{
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),
new ItemScanningPlan(movieMediaItem.Path, ScanningAction.Collections));
var episodeMediaItem = new MediaItem
{
Metadata = new MediaMetadata { Source = MetadataSource.Fallback },
Path = "/tv/test (2021)/season 01/test (2021) - s01e03.mkv"
};
var posterFileName = $"/tv/test (2021)/poster.{posterExtension}";
string[] fileNames = { episodeMediaItem.Path, posterFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsRight.Should().BeTrue();
source.RightToSeq().Should().BeEquivalentTo(episodeMediaItem);
itemScanningPlans.Should()
.BeEquivalentTo(new ItemScanningPlan(posterFileName, ScanningAction.Poster));
}
[Test]
public void WithNewNfo_WithNewPoster(
[Values("jpg", "jpeg", "png", "gif", "tbn")]
string posterExtension)
{
var episodeMediaItem = new MediaItem
{
Metadata = new MediaMetadata { Source = MetadataSource.Fallback },
Path = "/tv/test (2021)/season 01/test (2021) - s01e03.mkv"
};
var nfoFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.nfo";
var posterFileName = $"/tv/test (2021)/poster.{posterExtension}";
string[] fileNames = { episodeMediaItem.Path, nfoFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = _scanner.DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
source.IsRight.Should().BeTrue();
source.RightToSeq().Should().BeEquivalentTo(episodeMediaItem);
itemScanningPlans.Should().BeEquivalentTo(
new ItemScanningPlan(nfoFileName, ScanningAction.SidecarMetadata),
new ItemScanningPlan(posterFileName, ScanningAction.Poster),
new ItemScanningPlan(episodeMediaItem.Path, ScanningAction.Collections));
}
}
}
}

15
ErsatzTV.Core/Metadata/TestMediaScanner.cs

@ -81,6 +81,11 @@ namespace ErsatzTV.Core.Metadata @@ -81,6 +81,11 @@ namespace ErsatzTV.Core.Metadata
return Seq(movieAsNfo, movieNfo)
.Filter(s => files.Contains(s))
.HeadOrNone();
case MediaType.TvShow:
string episodeAsNfo = Path.ChangeExtension(file, "nfo");
return Optional(episodeAsNfo)
.Filter(s => files.Contains(s))
.HeadOrNone();
}
return None;
@ -93,10 +98,16 @@ namespace ErsatzTV.Core.Metadata @@ -93,10 +98,16 @@ namespace ErsatzTV.Core.Metadata
switch (mediaType)
{
case MediaType.Movie:
IEnumerable<string> possiblePosters = ImageFileExtensions.Collect(
IEnumerable<string> possibleMoviePosters = ImageFileExtensions.Collect(
ext => new[] { $"poster.{ext}", Path.GetFileNameWithoutExtension(file) + $"-poster.{ext}" })
.Map(f => Path.Combine(folder, f));
return possiblePosters.Filter(s => files.Contains(s)).HeadOrNone();
return possibleMoviePosters.Filter(p => files.Contains(p)).HeadOrNone();
case MediaType.TvShow:
string parentFolder = Directory.GetParent(folder)?.FullName ?? string.Empty;
IEnumerable<string> possibleTvPosters = ImageFileExtensions
.Collect(ext => new[] { $"poster.{ext}" })
.Map(f => Path.Combine(parentFolder, f));
return possibleTvPosters.Filter(p => files.Contains(p)).HeadOrNone();
}
return None;

Loading…
Cancel
Save