From d577e1c7b01c45bca49cb47a1af3697f904f9e4d Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 16 Oct 2015 13:06:31 -0400 Subject: support image stubbing --- MediaBrowser.Controller/Drawing/IImageProcessor.cs | 7 --- MediaBrowser.Controller/Entities/BaseItem.cs | 62 +++++++++++++++++----- MediaBrowser.Controller/Entities/IHasImages.cs | 17 ++++++ MediaBrowser.Controller/Entities/IHasMetadata.cs | 8 --- MediaBrowser.Controller/Entities/ItemImageInfo.cs | 7 +++ MediaBrowser.Controller/Library/ILibraryManager.cs | 9 ++++ .../Providers/DynamicImageResponse.cs | 2 + 7 files changed, 83 insertions(+), 29 deletions(-) (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Drawing/IImageProcessor.cs b/MediaBrowser.Controller/Drawing/IImageProcessor.cs index aeb8173921..838dfc9fb2 100644 --- a/MediaBrowser.Controller/Drawing/IImageProcessor.cs +++ b/MediaBrowser.Controller/Drawing/IImageProcessor.cs @@ -25,13 +25,6 @@ namespace MediaBrowser.Controller.Drawing /// The image enhancers. IEnumerable ImageEnhancers { get; } - /// - /// Gets the size of the image. - /// - /// The path. - /// ImageSize. - ImageSize GetImageSize(string path); - /// /// Gets the size of the image. /// diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 22ca607ba0..0595473f2c 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1432,6 +1432,23 @@ namespace MediaBrowser.Controller.Entities return GetImageInfo(type, imageIndex) != null; } + public void SetImage(ItemImageInfo image, int index) + { + if (image.Type == ImageType.Chapter) + { + throw new ArgumentException("Cannot set chapter images using SetImagePath"); + } + + var existingImage = GetImageInfo(image.Type, index); + + if (existingImage != null) + { + ImageInfos.Remove(existingImage); + } + + ImageInfos.Add(image); + } + public void SetImagePath(ImageType type, int index, FileSystemMetadata file) { if (type == ImageType.Chapter) @@ -1473,18 +1490,21 @@ namespace MediaBrowser.Controller.Entities // Remove it from the item RemoveImage(info); - // Delete the source file - var currentFile = new FileInfo(info.Path); - - // Deletion will fail if the file is hidden so remove the attribute first - if (currentFile.Exists) + if (info.IsLocalFile) { - if ((currentFile.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) + // Delete the source file + var currentFile = new FileInfo(info.Path); + + // Deletion will fail if the file is hidden so remove the attribute first + if (currentFile.Exists) { - currentFile.Attributes &= ~FileAttributes.Hidden; - } + if ((currentFile.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) + { + currentFile.Attributes &= ~FileAttributes.Hidden; + } - FileSystem.DeleteFile(currentFile.FullName); + FileSystem.DeleteFile(currentFile.FullName); + } } return UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None); @@ -1505,11 +1525,16 @@ namespace MediaBrowser.Controller.Entities /// public bool ValidateImages(IDirectoryService directoryService) { - var allDirectories = ImageInfos.Select(i => System.IO.Path.GetDirectoryName(i.Path)).Distinct(StringComparer.OrdinalIgnoreCase).ToList(); - var allFiles = allDirectories.SelectMany(directoryService.GetFiles).Select(i => i.FullName).ToList(); + var allFiles = ImageInfos + .Where(i => i.IsLocalFile) + .Select(i => System.IO.Path.GetDirectoryName(i.Path)) + .Distinct(StringComparer.OrdinalIgnoreCase) + .SelectMany(directoryService.GetFiles) + .Select(i => i.FullName) + .ToList(); var deletedImages = ImageInfos - .Where(image => !allFiles.Contains(image.Path, StringComparer.OrdinalIgnoreCase)) + .Where(image => image.IsLocalFile && !allFiles.Contains(image.Path, StringComparer.OrdinalIgnoreCase)) .ToList(); if (deletedImages.Count > 0) @@ -1619,7 +1644,10 @@ namespace MediaBrowser.Controller.Entities } else { - existing.DateModified = FileSystem.GetLastWriteTimeUtc(newImage); + if (existing.IsLocalFile) + { + existing.DateModified = FileSystem.GetLastWriteTimeUtc(newImage); + } } } @@ -1628,7 +1656,7 @@ namespace MediaBrowser.Controller.Entities var newImagePaths = images.Select(i => i.FullName).ToList(); var deleted = existingImages - .Where(i => !newImagePaths.Contains(i.Path, StringComparer.OrdinalIgnoreCase) && !FileSystem.FileExists(i.Path)) + .Where(i => i.IsLocalFile && !newImagePaths.Contains(i.Path, StringComparer.OrdinalIgnoreCase) && !FileSystem.FileExists(i.Path)) .ToList(); ImageInfos = ImageInfos.Except(deleted).ToList(); @@ -1679,6 +1707,12 @@ namespace MediaBrowser.Controller.Entities return Task.FromResult(true); } + if (!info1.IsLocalFile || !info2.IsLocalFile) + { + // TODO: Not supported yet + return Task.FromResult(true); + } + var path1 = info1.Path; var path2 = info2.Path; diff --git a/MediaBrowser.Controller/Entities/IHasImages.cs b/MediaBrowser.Controller/Entities/IHasImages.cs index ef478c516a..da729176d2 100644 --- a/MediaBrowser.Controller/Entities/IHasImages.cs +++ b/MediaBrowser.Controller/Entities/IHasImages.cs @@ -2,9 +2,11 @@ using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.IO; +using System.Threading; using System.Threading.Tasks; using CommonIO; using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Library; namespace MediaBrowser.Controller.Entities { @@ -191,6 +193,21 @@ namespace MediaBrowser.Controller.Entities /// /// 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 diff --git a/MediaBrowser.Controller/Entities/IHasMetadata.cs b/MediaBrowser.Controller/Entities/IHasMetadata.cs index 4eb25718e3..473ee120ea 100644 --- a/MediaBrowser.Controller/Entities/IHasMetadata.cs +++ b/MediaBrowser.Controller/Entities/IHasMetadata.cs @@ -36,14 +36,6 @@ namespace MediaBrowser.Controller.Entities /// The date last refreshed. DateTime DateLastRefreshed { get; set; } - /// - /// Updates to repository. - /// - /// The update reason. - /// The cancellation token. - /// Task. - Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken); - /// /// This is called before any metadata refresh and returns true or false indicating if changes were made /// diff --git a/MediaBrowser.Controller/Entities/ItemImageInfo.cs b/MediaBrowser.Controller/Entities/ItemImageInfo.cs index 9f3074c5e6..bb113e596d 100644 --- a/MediaBrowser.Controller/Entities/ItemImageInfo.cs +++ b/MediaBrowser.Controller/Entities/ItemImageInfo.cs @@ -29,6 +29,13 @@ namespace MediaBrowser.Controller.Entities { get { + if (Path != null) + { + if (Path.StartsWith("http", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + } return true; } } diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs index 980a3bbb53..c7ab88524f 100644 --- a/MediaBrowser.Controller/Library/ILibraryManager.cs +++ b/MediaBrowser.Controller/Library/ILibraryManager.cs @@ -534,5 +534,14 @@ namespace MediaBrowser.Controller.Library /// To. /// System.String. string SubstitutePath(string path, string from, string to); + + /// + /// Converts the image to local. + /// + /// The item. + /// The image. + /// Index of the image. + /// Task. + Task ConvertImageToLocal(IHasImages item, ItemImageInfo image, int imageIndex); } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/DynamicImageResponse.cs b/MediaBrowser.Controller/Providers/DynamicImageResponse.cs index 71a937cd9d..fdd1891ed6 100644 --- a/MediaBrowser.Controller/Providers/DynamicImageResponse.cs +++ b/MediaBrowser.Controller/Providers/DynamicImageResponse.cs @@ -1,12 +1,14 @@ using System; using System.IO; using MediaBrowser.Model.Drawing; +using MediaBrowser.Model.MediaInfo; namespace MediaBrowser.Controller.Providers { public class DynamicImageResponse { public string Path { get; set; } + public MediaProtocol Protocol { get; set; } public Stream Stream { get; set; } public ImageFormat Format { get; set; } public bool HasImage { get; set; } -- cgit v1.2.3