fix trash display for certain episodes (#1184)
* fix trash display for certain episodes * fix multi-episode fallback metadata
This commit is contained in:
@@ -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)]
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user