Browse Source

update statistics when primary video file is updated

pull/25/head
Jason Dove 6 years ago
parent
commit
225460455a
  1. 210
      ErsatzTV.Core.Tests/Metadata/TestMediaScannerTests.cs
  2. 14
      ErsatzTV.Core/Metadata/LocalMediaScanner.cs
  3. 5
      ErsatzTV.Core/Metadata/TestMediaScanner.cs

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

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Metadata;
using ErsatzTV.Core.Metadata;
@ -18,19 +19,20 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -18,19 +19,20 @@ namespace ErsatzTV.Core.Tests.Metadata
"m4p", "m4v", "avi", "wmv", "mov", "mkv", "ts"
};
private static TestMediaScanner ScannerForFiles(IEnumerable<string> fileNames)
{
var localFileSystem = new FakeLocalFileSystem(fileNames);
return new TestMediaScanner(localFileSystem);
}
private static IEnumerable<FakeFileSystemEntry> OldEntriesFor(params string[] fileNames) =>
fileNames.Map(f => new FakeFileSystemEntry(f, DateTime.MinValue));
private static TestMediaScanner ScannerForNewFiles(IEnumerable<string> fileNames)
{
IEnumerable<FakeFileSystemEntry> fakeFiles =
fileNames.Map(f => new FakeFileSystemEntry(f, DateTime.MaxValue));
var localFileSystem = new FakeLocalFileSystem(fakeFiles);
return new TestMediaScanner(localFileSystem);
}
private static IEnumerable<FakeFileSystemEntry> NewEntriesFor(params string[] fileNames) =>
fileNames.Map(f => new FakeFileSystemEntry(f, DateTime.MaxValue));
private static TestMediaScanner ScannerForOldFiles(params string[] fileNames)
=> new(new FakeLocalFileSystem(OldEntriesFor(fileNames)));
private static TestMediaScanner ScannerForNewFiles(params string[] fileNames)
=> new(new FakeLocalFileSystem(NewEntriesFor(fileNames)));
private static TestMediaScanner ScannerFor(IEnumerable<FakeFileSystemEntry> entries)
=> new(new FakeLocalFileSystem(entries));
[TestFixture]
public class NewMovieTests
@ -43,7 +45,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -43,7 +45,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var movieFileName = $"/movies/test (2021)/test (2021).{extension}";
string[] fileNames = { movieFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
@ -69,7 +71,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -69,7 +71,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var nfoFileName = $"/movies/test (2021)/{nfoFile}";
string[] fileNames = { movieFileName, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
@ -98,7 +100,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -98,7 +100,7 @@ namespace ErsatzTV.Core.Tests.Metadata
string[] fileNames = { movieFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
@ -131,7 +133,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -131,7 +133,7 @@ namespace ErsatzTV.Core.Tests.Metadata
string[] fileNames = { movieFileName, nfoFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
@ -151,6 +153,53 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -151,6 +153,53 @@ namespace ErsatzTV.Core.Tests.Metadata
[TestFixture]
public class ExistingMovieTests
{
[Test]
public void Old_File_Should_Do_Nothing(
[ValueSource(typeof(TestMediaScannerTests), nameof(VideoFileExtensions))]
string extension)
{
var movieMediaItem = new MediaItem
{
Metadata = new MediaMetadata { Source = MetadataSource.Fallback },
Path = $"/movies/test (2021)/test (2021).{extension}"
};
string[] fileNames = { movieMediaItem.Path };
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(0);
}
[Test]
public void Updated_File_Should_Refresh_Statistics(
[ValueSource(typeof(TestMediaScannerTests), nameof(VideoFileExtensions))]
string extension)
{
var movieMediaItem = new MediaItem
{
Metadata = new MediaMetadata { Source = MetadataSource.Fallback },
Path = $"/movies/test (2021)/test (2021).{extension}"
};
string[] fileNames = { movieMediaItem.Path };
Seq<LocalMediaItemScanningPlan> result = ScannerForNewFiles(fileNames).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(movieMediaItem.Path, ScanningAction.Statistics));
}
[Test]
public void Fallback_WithNewNfo_WithoutPoster(
[ValueSource(typeof(TestMediaScannerTests), nameof(VideoFileExtensions))]
@ -167,7 +216,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -167,7 +216,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var nfoFileName = $"/movies/test (2021)/{nfoFile}";
string[] fileNames = { movieMediaItem.Path, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
@ -197,7 +246,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -197,7 +246,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var nfoFileName = $"/movies/test (2021)/{nfoFile}";
string[] fileNames = { movieMediaItem.Path, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
@ -221,10 +270,12 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -221,10 +270,12 @@ namespace ErsatzTV.Core.Tests.Metadata
var nfoFileName = $"/movies/test (2021)/{nfoFile}";
string[] fileNames = { movieMediaItem.Path, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForNewFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
Seq<LocalMediaItemScanningPlan> result =
ScannerFor(OldEntriesFor(movieMediaItem.Path).Concat(NewEntriesFor(nfoFileName)))
.DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
@ -253,7 +304,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -253,7 +304,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var posterFileName = $"/movies/test (2021)/{basePosterName}poster.{posterExtension}";
string[] fileNames = { movieMediaItem.Path, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
@ -286,7 +337,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -286,7 +337,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var posterFileName = $"/movies/test (2021)/{basePosterName}poster.{posterExtension}";
string[] fileNames = { movieMediaItem.Path, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
@ -314,10 +365,12 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -314,10 +365,12 @@ namespace ErsatzTV.Core.Tests.Metadata
var posterFileName = $"/movies/test (2021)/{basePosterName}poster.{posterExtension}";
string[] fileNames = { movieMediaItem.Path, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForNewFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
Seq<LocalMediaItemScanningPlan> result =
ScannerFor(OldEntriesFor(movieMediaItem.Path).Concat(NewEntriesFor(posterFileName)))
.DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
@ -348,7 +401,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -348,7 +401,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var posterFileName = $"/movies/test (2021)/{basePosterName}poster.{posterExtension}";
string[] fileNames = { movieMediaItem.Path, nfoFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem),
fileNames.ToSeq());
@ -375,7 +428,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -375,7 +428,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var episodeFileName = $"/tv/test (2021)/season 01/test (2021) - s01e03.{extension}";
string[] fileNames = { episodeFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
@ -399,7 +452,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -399,7 +452,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var nfoFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.nfo";
string[] fileNames = { episodeFileName, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
@ -426,7 +479,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -426,7 +479,7 @@ namespace ErsatzTV.Core.Tests.Metadata
string[] fileNames = { episodeFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
@ -455,7 +508,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -455,7 +508,7 @@ namespace ErsatzTV.Core.Tests.Metadata
string[] fileNames = { episodeFileName, nfoFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
@ -475,6 +528,53 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -475,6 +528,53 @@ namespace ErsatzTV.Core.Tests.Metadata
[TestFixture]
public class ExistingEpisodeTests
{
[Test]
public void Old_File_Should_Do_Nothing(
[ValueSource(typeof(TestMediaScannerTests), nameof(VideoFileExtensions))]
string extension)
{
var episodeMediaItem = new MediaItem
{
Metadata = new MediaMetadata { Source = MetadataSource.Fallback },
Path = $"/tv/test (2021)/season 01/test (2021) - s01e03.{extension}"
};
string[] fileNames = { episodeMediaItem.Path };
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(0);
}
[Test]
public void Updated_File_Should_Refresh_Statistics(
[ValueSource(typeof(TestMediaScannerTests), nameof(VideoFileExtensions))]
string extension)
{
var episodeMediaItem = new MediaItem
{
Metadata = new MediaMetadata { Source = MetadataSource.Fallback },
Path = $"/tv/test (2021)/season 01/test (2021) - s01e03.{extension}"
};
string[] fileNames = { episodeMediaItem.Path };
Seq<LocalMediaItemScanningPlan> result = ScannerForNewFiles(fileNames).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(episodeMediaItem.Path, ScanningAction.Statistics));
}
[Test]
public void Fallback_WithNewNfo_WithoutPoster(
[ValueSource(typeof(TestMediaScannerTests), nameof(VideoFileExtensions))]
@ -489,7 +589,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -489,7 +589,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var nfoFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.nfo";
string[] fileNames = { episodeMediaItem.Path, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
@ -517,7 +617,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -517,7 +617,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var nfoFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.nfo";
string[] fileNames = { episodeMediaItem.Path, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
@ -539,10 +639,12 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -539,10 +639,12 @@ namespace ErsatzTV.Core.Tests.Metadata
var nfoFileName = "/tv/test (2021)/season 01/test (2021) - s01e03.nfo";
string[] fileNames = { episodeMediaItem.Path, nfoFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForNewFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
Seq<LocalMediaItemScanningPlan> result =
ScannerFor(OldEntriesFor(episodeMediaItem.Path).Concat(NewEntriesFor(nfoFileName)))
.DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
@ -569,7 +671,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -569,7 +671,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var posterFileName = $"/tv/test (2021)/poster.{posterExtension}";
string[] fileNames = { episodeMediaItem.Path, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
@ -600,7 +702,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -600,7 +702,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var posterFileName = $"/tv/test (2021)/poster.{posterExtension}";
string[] fileNames = { episodeMediaItem.Path, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
@ -626,10 +728,12 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -626,10 +728,12 @@ namespace ErsatzTV.Core.Tests.Metadata
var posterFileName = $"/tv/test (2021)/poster.{posterExtension}";
string[] fileNames = { episodeMediaItem.Path, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForNewFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
Seq<LocalMediaItemScanningPlan> result =
ScannerFor(OldEntriesFor(episodeMediaItem.Path).Concat(NewEntriesFor(posterFileName)))
.DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
result.Count.Should().Be(1);
(Either<string, MediaItem> source, List<ItemScanningPlan> itemScanningPlans) = result.Head();
@ -656,7 +760,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -656,7 +760,7 @@ namespace ErsatzTV.Core.Tests.Metadata
var posterFileName = $"/tv/test (2021)/poster.{posterExtension}";
string[] fileNames = { episodeMediaItem.Path, nfoFileName, posterFileName };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq.create(episodeMediaItem),
fileNames.ToSeq());
@ -673,9 +777,9 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -673,9 +777,9 @@ namespace ErsatzTV.Core.Tests.Metadata
}
[Test]
public void Movies_Should_Ignore_ExtraFolders(
[Values("/movies/test (2021)/Behind The Scenes/test (2021)",
[Values(
"/movies/test (2021)/Behind The Scenes/test (2021)",
"/movies/test (2021)/Deleted Scenes/test (2021)",
"/movies/test (2021)/Featurettes/test (2021)",
"/movies/test (2021)/Interviews/test (2021)",
@ -689,7 +793,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -689,7 +793,7 @@ namespace ErsatzTV.Core.Tests.Metadata
{
string[] fileNames = { $"{baseFileName}.{extension}" };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
@ -714,7 +818,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -714,7 +818,7 @@ namespace ErsatzTV.Core.Tests.Metadata
{
string[] fileNames = { $"{baseFileName}.{extension}" };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq<MediaItem>.Empty,
fileNames.ToSeq());
@ -745,7 +849,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -745,7 +849,7 @@ namespace ErsatzTV.Core.Tests.Metadata
string[] fileNames = { "anything" };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.Movie,
Seq.create(movieMediaItem, movieMediaItem2),
fileNames.ToSeq());
@ -764,7 +868,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -764,7 +868,7 @@ namespace ErsatzTV.Core.Tests.Metadata
itemScanningPlans2.Should().BeEquivalentTo(
new ItemScanningPlan(movieMediaItem2.Path, ScanningAction.Remove));
}
[Test]
public void Episodes_Should_Remove_Missing_MediaItems(
[ValueSource(typeof(TestMediaScannerTests), nameof(VideoFileExtensions))]
@ -784,7 +888,7 @@ namespace ErsatzTV.Core.Tests.Metadata @@ -784,7 +888,7 @@ namespace ErsatzTV.Core.Tests.Metadata
string[] fileNames = { "anything" };
Seq<LocalMediaItemScanningPlan> result = ScannerForFiles(fileNames).DetermineActions(
Seq<LocalMediaItemScanningPlan> result = ScannerForOldFiles(fileNames).DetermineActions(
MediaType.TvShow,
Seq.create(movieMediaItem, movieMediaItem2),
fileNames.ToSeq());

14
ErsatzTV.Core/Metadata/LocalMediaScanner.cs

@ -70,16 +70,18 @@ namespace ErsatzTV.Core.Metadata @@ -70,16 +70,18 @@ namespace ErsatzTV.Core.Metadata
knownMediaItems.ToSeq(),
FindAllFiles(localMediaSource));
foreach (var action in actions)
foreach (LocalMediaItemScanningPlan action in actions)
{
foreach (var plan in action.ActionPlans)
foreach (ItemScanningPlan plan in action.ActionPlans)
{
string sourcePath = action.Source.Match(
Right: mediaItem => mediaItem.Path,
Left: path => path);
_logger.LogDebug(
"Action Plan: {Source} / {File} => {Action}",
action.Source.Match(
Right: mediaItem => Path.GetFileName(mediaItem.Path),
Left: Path.GetFileName),
plan.TargetPath,
Path.GetFileName(sourcePath),
Path.GetRelativePath(Path.GetDirectoryName(sourcePath) ?? string.Empty, plan.TargetPath),
plan.TargetAction);
}
}

5
ErsatzTV.Core/Metadata/TestMediaScanner.cs

@ -48,6 +48,11 @@ namespace ErsatzTV.Core.Metadata @@ -48,6 +48,11 @@ namespace ErsatzTV.Core.Metadata
// existing media items
foreach (MediaItem mediaItem in existingMediaItems)
{
if ((mediaItem.LastWriteTime ?? DateTime.MinValue) < _localFileSystem.GetLastWriteTime(mediaItem.Path))
{
results.Add(mediaItem, new ItemScanningPlan(mediaItem.Path, ScanningAction.Statistics));
}
Option<string> maybeNfoFile = LocateNfoFile(mediaType, files, mediaItem.Path);
maybeNfoFile.IfSome(
nfoFile =>

Loading…
Cancel
Save