diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaPartHandler.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaPartHandler.cs index 0376feca3..2e73d8209 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaPartHandler.cs @@ -1,25 +1,40 @@ using System; -using Orchard.ContentManagement.Handlers; -using Orchard.Data; -using Orchard.MediaLibrary.Services; -using Orchard.MediaLibrary.Models; using System.IO; -using Orchard.FileSystems.Media; +using System.Linq; using Orchard.ContentManagement; +using Orchard.ContentManagement.Handlers; +using Orchard.ContentManagement.MetaData; +using Orchard.Core.Title.Models; +using Orchard.Data; +using Orchard.FileSystems.Media; +using Orchard.MediaLibrary.Models; +using Orchard.MediaLibrary.Services; namespace Orchard.MediaLibrary.Handlers { public class MediaPartHandler : ContentHandler { private readonly IMediaLibraryService _mediaLibraryService; private readonly IStorageProvider _storageProvider; + private readonly IContentDefinitionManager _contentDefinitionManager; public MediaPartHandler( IStorageProvider storageProvider, IMediaLibraryService mediaLibraryService, - IRepository repository) { + IRepository repository, + IContentDefinitionManager contentDefinitionManager) { _storageProvider = storageProvider; _mediaLibraryService = mediaLibraryService; + _contentDefinitionManager = contentDefinitionManager; Filters.Add(StorageFilter.For(repository)); + Filters.Add(new ActivatingFilter(contentType => { + var typeDefinition = _contentDefinitionManager.GetTypeDefinition(contentType); + // To avoid NRE when the handler runs for ad-hoc content types, e.g. MediaLibraryExplorer. + return typeDefinition == null ? + false : + typeDefinition.Parts.Any(contentTypePartDefinition => + contentTypePartDefinition.PartDefinition.Name == typeof(MediaPart).Name); + })); + OnRemoving((context, part) => RemoveMedia(part)); OnLoaded((context, part) => { if (!String.IsNullOrEmpty(part.FileName)) { diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Models/MediaPart.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Models/MediaPart.cs index 38647a55c..b8cef2b4a 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Models/MediaPart.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Models/MediaPart.cs @@ -1,8 +1,10 @@ using System; using Orchard.ContentManagement; using Orchard.ContentManagement.FieldStorage.InfosetStorage; +using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.Utilities; using Orchard.Core.Title.Models; +using Orchard.MediaLibrary.Handlers; namespace Orchard.MediaLibrary.Models { public class MediaPart : ContentPart { @@ -11,6 +13,8 @@ namespace Orchard.MediaLibrary.Models { /// /// Gets or sets the title of the media. + /// This adds an implicit dependency on which will be resolved by an + /// in the . /// public string Title { get { return ContentItem.As().Title; } @@ -63,7 +67,7 @@ namespace Orchard.MediaLibrary.Models { /// Gets the public Url of the media if stored locally. /// public string MediaUrl { - get { return _publicUrl.Value; } + get { return _publicUrl.Value; } } ///