diff --git a/CHANGELOG.md b/CHANGELOG.md index b2c29f151..569ffc9df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Test QSV acceleration if configured, and fallback to software mode if test fails - Detect QSV capabilities on Linux (supported decoders, encoders) - Use hardware acceleration for error messages/offline messages +- Try to parse season number from season folder when Jellyfin does not provide season number + - This *may* fix issues where Jellyfin libraries show all season numbers as 0 (specials) ## [0.8.2-beta] - 2023-09-14 ### Added diff --git a/ErsatzTV.Infrastructure/Jellyfin/JellyfinApiClient.cs b/ErsatzTV.Infrastructure/Jellyfin/JellyfinApiClient.cs index 1066f065b..cf8bb9b5f 100644 --- a/ErsatzTV.Infrastructure/Jellyfin/JellyfinApiClient.cs +++ b/ErsatzTV.Infrastructure/Jellyfin/JellyfinApiClient.cs @@ -2,6 +2,7 @@ using ErsatzTV.Core; using ErsatzTV.Core.Domain; using ErsatzTV.Core.Interfaces.Jellyfin; +using ErsatzTV.Core.Interfaces.Metadata; using ErsatzTV.Core.Jellyfin; using ErsatzTV.Core.Metadata; using ErsatzTV.Infrastructure.Jellyfin.Models; @@ -14,16 +15,19 @@ namespace ErsatzTV.Infrastructure.Jellyfin; public class JellyfinApiClient : IJellyfinApiClient { private readonly IJellyfinPathReplacementService _jellyfinPathReplacementService; + private readonly IFallbackMetadataProvider _fallbackMetadataProvider; private readonly ILogger _logger; private readonly IMemoryCache _memoryCache; public JellyfinApiClient( IMemoryCache memoryCache, IJellyfinPathReplacementService jellyfinPathReplacementService, + IFallbackMetadataProvider fallbackMetadataProvider, ILogger logger) { _memoryCache = memoryCache; _jellyfinPathReplacementService = jellyfinPathReplacementService; + _fallbackMetadataProvider = fallbackMetadataProvider; _logger = logger; } @@ -721,6 +725,16 @@ public class JellyfinApiClient : IJellyfinApiClient { season.SeasonNumber = item.IndexNumber.Value; } + else + { + Option maybeSeasonNumber = + _fallbackMetadataProvider.GetSeasonNumberForFolder(item.Path ?? string.Empty); + + foreach (int seasonNumber in maybeSeasonNumber) + { + season.SeasonNumber = seasonNumber; + } + } return season; }