using System; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using CommonIO; using MediaBrowser.Controller.Library; namespace MediaBrowser.Controller.Entities { public interface IHasImages : IHasProviderIds, IHasId { /// /// Gets the name. /// /// The name. string Name { get; set; } /// /// Gets the path. /// /// The path. string Path { get; set; } /// /// Gets the file name without extension. /// /// The file name without extension. string FileNameWithoutExtension { get; } /// /// Gets the type of the location. /// /// The type of the location. LocationType LocationType { get; } /// /// Gets the locked fields. /// /// The locked fields. List LockedFields { get; } /// /// Gets the images. /// /// Type of the image. /// IEnumerable{ItemImageInfo}. IEnumerable GetImages(ImageType imageType); /// /// Gets the image path. /// /// Type of the image. /// Index of the image. /// System.String. string GetImagePath(ImageType imageType, int imageIndex); /// /// Gets the image information. /// /// Type of the image. /// Index of the image. /// ItemImageInfo. ItemImageInfo GetImageInfo(ImageType imageType, int imageIndex); /// /// Sets the image. /// /// The type. /// The index. /// The file. void SetImagePath(ImageType type, int index, FileSystemMetadata file); /// /// Determines whether the specified type has image. /// /// The type. /// Index of the image. /// true if the specified type has image; otherwise, false. bool HasImage(ImageType type, int imageIndex); /// /// Allowses the multiple images. /// /// The type. /// true if XXXX, false otherwise. bool AllowsMultipleImages(ImageType type); /// /// Swaps the images. /// /// The type. /// The index1. /// The index2. /// Task. Task SwapImages(ImageType type, int index1, int index2); /// /// Gets the display type of the media. /// /// The display type of the media. string DisplayMediaType { get; set; } /// /// Gets or sets the primary image path. /// /// The primary image path. string PrimaryImagePath { get; } /// /// Gets the preferred metadata language. /// /// System.String. string GetPreferredMetadataLanguage(); /// /// Validates the images and returns true or false indicating if any were removed. /// bool ValidateImages(IDirectoryService directoryService); /// /// Gets a value indicating whether this instance is owned item. /// /// true if this instance is owned item; otherwise, false. bool IsOwnedItem { get; } /// /// Gets the containing folder path. /// /// The containing folder path. string ContainingFolderPath { get; } /// /// Adds the images. /// /// Type of the image. /// The images. /// true if XXXX, false otherwise. bool AddImages(ImageType imageType, List images); /// /// Determines whether [is save local metadata enabled]. /// /// true if [is save local metadata enabled]; otherwise, false. bool IsSaveLocalMetadataEnabled(); /// /// Gets a value indicating whether [supports local metadata]. /// /// true if [supports local metadata]; otherwise, false. bool SupportsLocalMetadata { get; } /// /// Gets a value indicating whether this instance is in mixed folder. /// /// true if this instance is in mixed folder; otherwise, false. bool IsInMixedFolder { get; } /// /// Gets a value indicating whether this instance is locked. /// /// true if this instance is locked; otherwise, false. bool IsLocked { get; } /// /// Gets a value indicating whether [supports remote image downloading]. /// /// true if [supports remote image downloading]; otherwise, false. bool SupportsRemoteImageDownloading { get; } /// /// Gets the internal metadata path. /// /// System.String. string GetInternalMetadataPath(); /// /// Gets a value indicating whether [always scan internal metadata path]. /// /// true if [always scan internal metadata path]; otherwise, false. bool AlwaysScanInternalMetadataPath { get; } /// /// Determines whether [is internet metadata enabled]. /// /// true if [is internet metadata enabled]; otherwise, false. bool IsInternetMetadataEnabled(); /// /// Removes the image. /// /// The image. void RemoveImage(ItemImageInfo image); /// /// Updates to repository. /// /// The update reason. /// The cancellation token. /// Task. Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken); /// /// Sets the image. /// /// The image. /// The index. void SetImage(ItemImageInfo image, int index); } public static class HasImagesExtensions { /// /// Gets the image path. /// /// The item. /// Type of the image. /// System.String. public static string GetImagePath(this IHasImages item, ImageType imageType) { return item.GetImagePath(imageType, 0); } public static bool HasImage(this IHasImages item, ImageType imageType) { return item.HasImage(imageType, 0); } /// /// Sets the image path. /// /// The item. /// Type of the image. /// The file. public static void SetImagePath(this IHasImages item, ImageType imageType, FileSystemMetadata file) { item.SetImagePath(imageType, 0, file); } /// /// Sets the image path. /// /// The item. /// Type of the image. /// The file. public static void SetImagePath(this IHasImages item, ImageType imageType, string file) { if (file.StartsWith("http", System.StringComparison.OrdinalIgnoreCase)) { item.SetImage(new ItemImageInfo { Path = file, Type = imageType }, 0); } else { item.SetImagePath(imageType, BaseItem.FileSystem.GetFileInfo(file)); } } } }