diff options
Diffstat (limited to 'MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs')
| -rw-r--r-- | MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs | 86 |
1 files changed, 38 insertions, 48 deletions
diff --git a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs index 31475e22f..894aebed4 100644 --- a/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs +++ b/MediaBrowser.LocalMetadata/Images/LocalImageProvider.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; +using Jellyfin.Extensions; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; @@ -60,8 +61,6 @@ namespace MediaBrowser.LocalMetadata.Images private readonly IFileSystem _fileSystem; - private readonly CultureInfo _usCulture = new CultureInfo("en-US"); - /// <summary> /// Initializes a new instance of the <see cref="LocalImageProvider"/> class. /// </summary> @@ -95,7 +94,7 @@ namespace MediaBrowser.LocalMetadata.Images { var season = item as Season; var series = season?.Series; - if (series != null && series.IsFileProtocol) + if (series is not null && series.IsFileProtocol) { return true; } @@ -119,16 +118,10 @@ namespace MediaBrowser.LocalMetadata.Images return Enumerable.Empty<FileSystemMetadata>(); } - if (includeDirectories) - { - return directoryService.GetFileSystemEntries(path) - .Where(i => BaseItem.SupportedImageExtensions.Contains(i.Extension, StringComparer.OrdinalIgnoreCase) || i.IsDirectory) - - .OrderBy(i => Array.IndexOf(BaseItem.SupportedImageExtensions, i.Extension ?? string.Empty)); - } - - return directoryService.GetFiles(path) - .Where(i => BaseItem.SupportedImageExtensions.Contains(i.Extension, StringComparer.OrdinalIgnoreCase)) + return directoryService.GetFileSystemEntries(path) + .Where(i => + (includeDirectories && i.IsDirectory) + || BaseItem.SupportedImageExtensions.Contains(i.Extension, StringComparison.OrdinalIgnoreCase)) .OrderBy(i => Array.IndexOf(BaseItem.SupportedImageExtensions, i.Extension ?? string.Empty)); } @@ -203,7 +196,7 @@ namespace MediaBrowser.LocalMetadata.Images added = AddImage(files, images, "logo", imagePrefix, isInMixedFolder, ImageType.Logo); if (!added) { - added = AddImage(files, images, "clearlogo", imagePrefix, isInMixedFolder, ImageType.Logo); + AddImage(files, images, "clearlogo", imagePrefix, isInMixedFolder, ImageType.Logo); } } @@ -220,7 +213,7 @@ namespace MediaBrowser.LocalMetadata.Images if (!added) { - added = AddImage(files, images, "disc", imagePrefix, isInMixedFolder, ImageType.Disc); + AddImage(files, images, "disc", imagePrefix, isInMixedFolder, ImageType.Disc); } } else if (item is Video || item is BoxSet) @@ -234,7 +227,7 @@ namespace MediaBrowser.LocalMetadata.Images if (!added) { - added = AddImage(files, images, "discart", imagePrefix, isInMixedFolder, ImageType.Disc); + AddImage(files, images, "discart", imagePrefix, isInMixedFolder, ImageType.Disc); } } @@ -250,7 +243,7 @@ namespace MediaBrowser.LocalMetadata.Images added = AddImage(files, images, "landscape", imagePrefix, isInMixedFolder, ImageType.Thumb); if (!added) { - added = AddImage(files, images, "thumb", imagePrefix, isInMixedFolder, ImageType.Thumb); + AddImage(files, images, "thumb", imagePrefix, isInMixedFolder, ImageType.Thumb); } } @@ -258,11 +251,6 @@ namespace MediaBrowser.LocalMetadata.Images { PopulateBackdrops(item, images, files, imagePrefix, isInMixedFolder); } - - if (item is IHasScreenshots) - { - PopulateScreenshots(images, files, imagePrefix, isInMixedFolder); - } } private void PopulatePrimaryImages(BaseItem item, List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder) @@ -283,7 +271,7 @@ namespace MediaBrowser.LocalMetadata.Images { imageFileNames = _seriesImageFileNames; } - else if (item is Video && !(item is Episode)) + else if (item is Video && item is not Episode) { imageFileNames = _videoImageFileNames; } @@ -303,7 +291,7 @@ namespace MediaBrowser.LocalMetadata.Images foreach (var name in imageFileNames) { - if (AddImage(files, images, imagePrefix + name, ImageType.Primary)) + if (AddImage(files, images, name, ImageType.Primary, imagePrefix)) { return; } @@ -329,7 +317,7 @@ namespace MediaBrowser.LocalMetadata.Images if (!string.IsNullOrEmpty(name)) { - AddImage(files, images, imagePrefix + name + "-fanart", ImageType.Backdrop); + AddImage(files, images, name + "-fanart", ImageType.Backdrop, imagePrefix); // Support without the prefix if it's in it's own folder if (!isInMixedFolder) @@ -346,7 +334,7 @@ namespace MediaBrowser.LocalMetadata.Images var extraFanartFolder = files .FirstOrDefault(i => string.Equals(i.Name, "extrafanart", StringComparison.OrdinalIgnoreCase)); - if (extraFanartFolder != null) + if (extraFanartFolder is not null) { PopulateBackdropsFromExtraFanart(extraFanartFolder.FullName, images); } @@ -365,11 +353,6 @@ namespace MediaBrowser.LocalMetadata.Images })); } - private void PopulateScreenshots(List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, bool isInMixedFolder) - { - PopulateBackdrops(images, files, imagePrefix, "screenshot", "screenshot", isInMixedFolder, ImageType.Screenshot); - } - private void PopulateBackdrops(List<LocalImageInfo> images, List<FileSystemMetadata> files, string imagePrefix, string firstFileName, string subsequentFileNamePrefix, bool isInMixedFolder, ImageType type) { AddImage(files, images, imagePrefix + firstFileName, type); @@ -434,7 +417,7 @@ namespace MediaBrowser.LocalMetadata.Images var seasonMarker = seasonNumber.Value == 0 ? "-specials" - : seasonNumber.Value.ToString("00", _usCulture); + : seasonNumber.Value.ToString("00", CultureInfo.InvariantCulture); // Get this one directly from the file system since we have to go up a level if (!string.Equals(prefix, seasonMarker, StringComparison.OrdinalIgnoreCase)) @@ -453,7 +436,7 @@ namespace MediaBrowser.LocalMetadata.Images private bool AddImage(List<FileSystemMetadata> files, List<LocalImageInfo> images, string name, string imagePrefix, bool isInMixedFolder, ImageType type) { - var added = AddImage(files, images, imagePrefix + name, type); + var added = AddImage(files, images, name, type, imagePrefix); if (!isInMixedFolder) { @@ -466,32 +449,39 @@ namespace MediaBrowser.LocalMetadata.Images return added; } - private bool AddImage(List<FileSystemMetadata> files, List<LocalImageInfo> images, string name, ImageType type) + private static bool AddImage(IReadOnlyList<FileSystemMetadata> files, List<LocalImageInfo> images, string name, ImageType type, string? prefix = null) { - var image = GetImage(files, name); + var image = GetImage(files, name, prefix); - if (image != null) + if (image is null) { - images.Add(new LocalImageInfo - { - FileInfo = image, - Type = type - }); - - return true; + return false; } - return false; + images.Add(new LocalImageInfo + { + FileInfo = image, + Type = type + }); + + return true; } - private static FileSystemMetadata? GetImage(IReadOnlyList<FileSystemMetadata> files, string name) + private static FileSystemMetadata? GetImage(IReadOnlyList<FileSystemMetadata> files, string name, string? prefix = null) { + var fileNameLength = name.Length + (prefix?.Length ?? 0); for (var i = 0; i < files.Count; i++) { var file = files[i]; - if (!file.IsDirectory - && file.Length > 0 - && Path.GetFileNameWithoutExtension(file.FullName.AsSpan()).Equals(name, StringComparison.OrdinalIgnoreCase)) + if (file.IsDirectory || file.Length <= 0) + { + continue; + } + + var fileName = Path.GetFileNameWithoutExtension(file.FullName.AsSpan()); + if (fileName.Length == fileNameLength + && fileName.StartsWith(prefix, StringComparison.OrdinalIgnoreCase) + && fileName.EndsWith(name, StringComparison.OrdinalIgnoreCase)) { return file; } |
