Browse Source

improve fallback metadata parsing, add tests

pull/3/head
Jason Dove 6 years ago
parent
commit
3f4b1b60be
  1. 1
      ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsServiceTests.cs
  2. 38
      ErsatzTV.Core.Tests/Metadata/FallbackMetadataProviderTests.cs
  3. 1
      ErsatzTV.Core.Tests/Scheduling/ChronologicalContentTests.cs
  4. 1
      ErsatzTV.Core.Tests/Scheduling/PlayoutBuilderTests.cs
  5. 1
      ErsatzTV.Core.Tests/Scheduling/RandomizedContentTests.cs
  6. 1
      ErsatzTV.Core.Tests/Scheduling/ShuffledContentTests.cs
  7. 30
      ErsatzTV.Core/Metadata/FallbackMetadataProvider.cs
  8. 24
      ErsatzTV.Core/Metadata/LocalMetadataProvider.cs

1
ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsServiceTests.cs

@ -6,6 +6,7 @@ using NUnit.Framework; @@ -6,6 +6,7 @@ using NUnit.Framework;
namespace ErsatzTV.Core.Tests.FFmpeg
{
[TestFixture]
public class FFmpegPlaybackSettingsCalculatorTests
{
public class CalculateSettings

38
ErsatzTV.Core.Tests/Metadata/FallbackMetadataProviderTests.cs

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Metadata;
using FluentAssertions;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Metadata
{
[TestFixture]
public class FallbackMetadataProviderTests
{
[Test]
[TestCase("Awesome Show - s01e02.mkv", "Awesome Show", 1, 2)]
[TestCase("Awesome Show - S01E02.mkv", "Awesome Show", 1, 2)]
[TestCase("Awesome Show - s1e2.mkv", "Awesome Show", 1, 2)]
[TestCase("Awesome Show - S1E2.mkv", "Awesome Show", 1, 2)]
[TestCase("Awesome Show - s01e02 - Episode Title.mkv", "Awesome Show", 1, 2)]
[TestCase("Awesome Show - S01E02 - Episode Title.mkv", "Awesome Show", 1, 2)]
[TestCase("Awesome Show - s1e2 - Episode Title.mkv", "Awesome Show", 1, 2)]
[TestCase("Awesome Show - S1E2 - Episode Title.mkv", "Awesome Show", 1, 2)]
[TestCase("Awesome Show (2021) - s01e02 - Episode Title.mkv", "Awesome Show (2021)", 1, 2)]
[TestCase("Awesome Show (2021) - S01E02 - Episode Title.mkv", "Awesome Show (2021)", 1, 2)]
[TestCase("Awesome Show (2021) - s1e2 - Episode Title.mkv", "Awesome Show (2021)", 1, 2)]
[TestCase("Awesome Show (2021) - S1E2 - Episode Title.mkv", "Awesome Show (2021)", 1, 2)]
[TestCase("Awesome Show - s01e02 - Episode Title-720p.mkv", "Awesome Show", 1, 2)]
[TestCase("Awesome Show - S01E02 - Episode Title-720p.mkv", "Awesome Show", 1, 2)]
[TestCase("Awesome Show - s1e2 - Episode Title-720p.mkv", "Awesome Show", 1, 2)]
[TestCase("Awesome Show - S1E2 - Episode Title-720p.mkv", "Awesome Show", 1, 2)]
public void GetFallbackMetadata_ShouldHandleVariousFormats(string path, string title, int season, int episode)
{
var metadata = FallbackMetadataProvider.GetFallbackMetadata(path);
metadata.MediaType.Should().Be(MediaType.TvShow);
metadata.Title.Should().Be(title);
metadata.SeasonNumber.Should().Be(season);
metadata.EpisodeNumber.Should().Be(episode);
}
}
}

1
ErsatzTV.Core.Tests/Scheduling/ChronologicalContentTests.cs

@ -9,6 +9,7 @@ using static LanguageExt.Prelude; @@ -9,6 +9,7 @@ using static LanguageExt.Prelude;
namespace ErsatzTV.Core.Tests.Scheduling
{
[TestFixture]
public class ChronologicalContentTests
{
[Test]

1
ErsatzTV.Core.Tests/Scheduling/PlayoutBuilderTests.cs

@ -14,6 +14,7 @@ using static LanguageExt.Prelude; @@ -14,6 +14,7 @@ using static LanguageExt.Prelude;
namespace ErsatzTV.Core.Tests.Scheduling
{
[TestFixture]
public class PlayoutBuilderTests
{
private readonly ILogger<PlayoutBuilder> _logger;

1
ErsatzTV.Core.Tests/Scheduling/RandomizedContentTests.cs

@ -9,6 +9,7 @@ using static LanguageExt.Prelude; @@ -9,6 +9,7 @@ using static LanguageExt.Prelude;
namespace ErsatzTV.Core.Tests.Scheduling
{
[TestFixture]
public class RandomizedContentTests
{
private const int KnownSeed = 22295;

1
ErsatzTV.Core.Tests/Scheduling/ShuffledContentTests.cs

@ -9,6 +9,7 @@ using static LanguageExt.Prelude; @@ -9,6 +9,7 @@ using static LanguageExt.Prelude;
namespace ErsatzTV.Core.Tests.Scheduling
{
[TestFixture]
public class ShuffledContentTests
{
// this seed will produce (shuffle) 1-10 in order

30
ErsatzTV.Core/Metadata/FallbackMetadataProvider.cs

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
using System.IO;
using System.Text.RegularExpressions;
using ErsatzTV.Core.Domain;
namespace ErsatzTV.Core.Metadata
{
public static class FallbackMetadataProvider
{
public static MediaMetadata GetFallbackMetadata(string path)
{
string fileName = Path.GetFileName(path);
var metadata = new MediaMetadata { Title = fileName ?? path };
if (fileName != null)
{
const string PATTERN = @"^(.*?)[\s-]+[sS](\d+)[eE](\d+).*\.\w+$";
Match match = Regex.Match(fileName, PATTERN);
if (match.Success)
{
metadata.MediaType = MediaType.TvShow;
metadata.Title = match.Groups[1].Value;
metadata.SeasonNumber = int.Parse(match.Groups[2].Value);
metadata.EpisodeNumber = int.Parse(match.Groups[3].Value);
}
}
return metadata;
}
}
}

24
ErsatzTV.Core/Metadata/LocalMetadataProvider.cs

@ -21,7 +21,8 @@ namespace ErsatzTV.Core.Metadata @@ -21,7 +21,8 @@ namespace ErsatzTV.Core.Metadata
public async Task RefreshMetadata(MediaItem mediaItem)
{
Option<MediaMetadata> maybeMetadata = await LoadMetadata(mediaItem);
MediaMetadata metadata = maybeMetadata.IfNone(() => GetFallbackMetadata(mediaItem));
MediaMetadata metadata =
maybeMetadata.IfNone(() => FallbackMetadataProvider.GetFallbackMetadata(mediaItem.Path));
await ApplyMetadataUpdate(mediaItem, metadata);
}
@ -99,27 +100,6 @@ namespace ErsatzTV.Core.Metadata @@ -99,27 +100,6 @@ namespace ErsatzTV.Core.Metadata
None);
}
private MediaMetadata GetFallbackMetadata(MediaItem mediaItem)
{
string fileName = Path.GetFileName(mediaItem.Path);
var metadata = new MediaMetadata { Title = fileName ?? mediaItem.Path };
if (fileName != null)
{
const string PATTERN = @"^(.*?)[\s-]+[sS](\d+)[eE](\d+)\.\w+$";
Match match = Regex.Match(fileName, PATTERN);
if (match.Success)
{
metadata.MediaType = MediaType.TvShow;
metadata.Title = match.Groups[1].Value;
metadata.SeasonNumber = int.Parse(match.Groups[2].Value);
metadata.EpisodeNumber = int.Parse(match.Groups[3].Value);
}
}
return metadata;
}
private static DateTime? GetAired(string aired)
{
if (string.IsNullOrWhiteSpace(aired))

Loading…
Cancel
Save