mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-10-31 10:37:22 -04:00 
			
		
		
		
	* Add analyzers to MediaBrowser.XbmcMetadata * Enable TreatWarningsAsErrors for MediaBrowser.XbmcMetadata * Add analyzers to MediaBrowser.WebDashboard * Enable TreatWarningsAsErrors for MediaBrowser.WebDashboard * Disable SA1600 in favor of CS1591
		
			
				
	
	
		
			115 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| #pragma warning disable CS1591
 | |
| 
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.IO;
 | |
| using System.Linq;
 | |
| using MediaBrowser.Controller.Drawing;
 | |
| using MediaBrowser.Controller.Entities;
 | |
| using MediaBrowser.Controller.Library;
 | |
| using MediaBrowser.Model.Entities;
 | |
| 
 | |
| namespace Emby.Server.Implementations.Library.Resolvers
 | |
| {
 | |
|     public class PhotoResolver : ItemResolver<Photo>
 | |
|     {
 | |
|         private readonly IImageProcessor _imageProcessor;
 | |
|         private readonly ILibraryManager _libraryManager;
 | |
|         private static readonly HashSet<string> _ignoreFiles = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
 | |
|         {
 | |
|             "folder",
 | |
|             "thumb",
 | |
|             "landscape",
 | |
|             "fanart",
 | |
|             "backdrop",
 | |
|             "poster",
 | |
|             "cover",
 | |
|             "logo",
 | |
|             "default"
 | |
|         };
 | |
| 
 | |
|         public PhotoResolver(IImageProcessor imageProcessor, ILibraryManager libraryManager)
 | |
|         {
 | |
|             _imageProcessor = imageProcessor;
 | |
|             _libraryManager = libraryManager;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Resolves the specified args.
 | |
|         /// </summary>
 | |
|         /// <param name="args">The args.</param>
 | |
|         /// <returns>Trailer.</returns>
 | |
|         protected override Photo Resolve(ItemResolveArgs args)
 | |
|         {
 | |
|             if (!args.IsDirectory)
 | |
|             {
 | |
|                 // Must be an image file within a photo collection
 | |
|                 var collectionType = args.CollectionType;
 | |
| 
 | |
|                 if (string.Equals(collectionType, CollectionType.Photos, StringComparison.OrdinalIgnoreCase)
 | |
|                     || (string.Equals(collectionType, CollectionType.HomeVideos, StringComparison.OrdinalIgnoreCase) && args.GetLibraryOptions().EnablePhotos))
 | |
|                 {
 | |
|                     if (IsImageFile(args.Path, _imageProcessor))
 | |
|                     {
 | |
|                         var filename = Path.GetFileNameWithoutExtension(args.Path);
 | |
| 
 | |
|                         // Make sure the image doesn't belong to a video file
 | |
|                         var files = args.DirectoryService.GetFiles(Path.GetDirectoryName(args.Path));
 | |
| 
 | |
|                         foreach (var file in files)
 | |
|                         {
 | |
|                             if (IsOwnedByMedia(_libraryManager, file.FullName, filename))
 | |
|                             {
 | |
|                                 return null;
 | |
|                             }
 | |
|                         }
 | |
| 
 | |
|                         return new Photo
 | |
|                         {
 | |
|                             Path = args.Path
 | |
|                         };
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         internal static bool IsOwnedByMedia(ILibraryManager libraryManager, string file, string imageFilename)
 | |
|         {
 | |
|             if (libraryManager.IsVideoFile(file))
 | |
|             {
 | |
|                 return IsOwnedByResolvedMedia(libraryManager, file, imageFilename);
 | |
|             }
 | |
| 
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         internal static bool IsOwnedByResolvedMedia(ILibraryManager libraryManager, string file, string imageFilename)
 | |
|             => imageFilename.StartsWith(Path.GetFileNameWithoutExtension(file), StringComparison.OrdinalIgnoreCase);
 | |
| 
 | |
|         internal static bool IsImageFile(string path, IImageProcessor imageProcessor)
 | |
|         {
 | |
|             if (path == null)
 | |
|             {
 | |
|                 throw new ArgumentNullException(nameof(path));
 | |
|             }
 | |
| 
 | |
|             var filename = Path.GetFileNameWithoutExtension(path);
 | |
| 
 | |
|             if (_ignoreFiles.Contains(filename))
 | |
|             {
 | |
|                 return false;
 | |
|             }
 | |
| 
 | |
|             if (_ignoreFiles.Any(i => filename.IndexOf(i, StringComparison.OrdinalIgnoreCase) != -1))
 | |
|             {
 | |
|                 return false;
 | |
|             }
 | |
| 
 | |
|             string extension = Path.GetExtension(path).TrimStart('.');
 | |
|             return imageProcessor.SupportedInputFormats.Contains(extension, StringComparer.OrdinalIgnoreCase);
 | |
|         }
 | |
|     }
 | |
| }
 |