fix trash display for certain episodes (#1184)

* fix trash display for certain episodes

* fix multi-episode fallback metadata
This commit is contained in:
Jason Dove
2023-02-28 09:37:30 -06:00
committed by GitHub
parent 4d57ece30d
commit 581aa51792
5 changed files with 63 additions and 30 deletions
+1
View File
@@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Align default docker image (no acceleration) with new images from [ErsatzTV-ffmpeg](https://github.com/jasongdove/ErsatzTV-ffmpeg)
- Fix some transcoding pipelines that use software decoders
- Improve VAAPI encoder capability detection on newer hardware
- Fix trash page to properly display episodes with missing metadata or titles
### Changed
- Plex, Jellyfin and Emby libraries now retrieve all metadata and statistics from the media server
@@ -71,6 +71,30 @@ public class FallbackMetadataProviderTests
metadata.Head().EpisodeNumber.Should().Be(episode);
}
[TestCase("Awesome Show - S01_BLAH.mkv", 0)]
[TestCase("Awesome Show - NO_EPISODE_NUMBER_HERE.mkv", 0)]
public void GetFallbackMetadata_ShouldHandleNonEpisodes(string path, int episode)
{
List<EpisodeMetadata> metadata = _fallbackMetadataProvider.GetFallbackMetadata(
new Episode
{
LibraryPath = new LibraryPath(),
MediaVersions = new List<MediaVersion>
{
new()
{
MediaFiles = new List<MediaFile>
{
new() { Path = path }
}
}
}
});
metadata.Count.Should().Be(1);
metadata.Head().EpisodeNumber.Should().Be(episode);
}
[Test]
[TestCase("Awesome Show - s01e02-s01e03.mkv", 1, 2, 3)]
[TestCase("Awesome Show - s01e02-whatever-s01e03-whatever2.mkv", 1, 2, 3)]
+1 -1
View File
@@ -2,7 +2,7 @@
namespace ErsatzTV.Core.Domain;
[DebuggerDisplay("{EpisodeMetadata[0].Title ?? \"[unknown episode]\"}")]
[DebuggerDisplay("{EpisodeMetadata != null && EpisodeMetadata.Count > 0 ? EpisodeMetadata[0].Title : \"[unknown episode]\"}")]
public class Episode : MediaItem
{
public int SeasonId { get; set; }
@@ -127,7 +127,7 @@ public class FallbackMetadataProvider : IFallbackMetadataProvider
private List<EpisodeMetadata> GetEpisodeMetadata(string fileName, EpisodeMetadata baseMetadata)
{
var result = new List<EpisodeMetadata>();
var result = new List<EpisodeMetadata> { baseMetadata };
try
{
@@ -141,38 +141,46 @@ public class FallbackMetadataProvider : IFallbackMetadataProvider
if (matches.Count > 0)
{
foreach (Match match in matches)
var episodeNumbers = matches.Bind(
m => m.Groups[1].Value
.Replace('e', '-')
.Split('-')
.Bind(ep => int.TryParse(ep, out int num) ? Some(num) : Option<int>.None))
.ToList();
switch (episodeNumbers.Count)
{
string[] split = match.Groups[1].Value.Replace('e', '-').Split('-');
foreach (string ep in split)
{
if (!int.TryParse(ep, out int episodeNumber))
case 0:
break;
case 1:
baseMetadata.EpisodeNumber = episodeNumbers.Head();
break;
default:
result.Clear();
foreach (int episodeNumber in episodeNumbers)
{
continue;
var metadata = new EpisodeMetadata
{
MetadataKind = MetadataKind.Fallback,
EpisodeNumber = episodeNumber,
DateAdded = baseMetadata.DateAdded,
DateUpdated = baseMetadata.DateAdded,
Title = baseMetadata.Title,
Actors = new List<Actor>(),
Artwork = new List<Artwork>(),
Directors = new List<Director>(),
Genres = new List<Genre>(),
Guids = new List<MetadataGuid>(),
Studios = new List<Studio>(),
Tags = new List<Tag>(),
Writers = new List<Writer>()
};
result.Add(metadata);
}
var metadata = new EpisodeMetadata
{
MetadataKind = MetadataKind.Fallback,
EpisodeNumber = episodeNumber,
DateAdded = baseMetadata.DateAdded,
DateUpdated = baseMetadata.DateAdded,
Title = baseMetadata.Title,
Actors = new List<Actor>(),
Artwork = new List<Artwork>(),
Directors = new List<Director>(),
Genres = new List<Genre>(),
Guids = new List<MetadataGuid>(),
Studios = new List<Studio>(),
Tags = new List<Tag>(),
Writers = new List<Writer>()
};
result.Add(metadata);
}
break;
}
return result;
}
}
catch (Exception ex)
@@ -1206,7 +1206,7 @@ public sealed class SearchIndex : ISearchIndex
};
private static string Title(Metadata metadata) =>
metadata.Title.Replace(' ', '_');
(metadata.Title ?? string.Empty).Replace(' ', '_');
private static string GetJumpLetter(Metadata metadata)
{