Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save AaronSadlerUK/fef427aae2503b6cbcc0b90ecd823324 to your computer and use it in GitHub Desktop.
Save AaronSadlerUK/fef427aae2503b6cbcc0b90ecd823324 to your computer and use it in GitHub Desktop.
IntFriendlyMediaPickerValueConverter
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.PropertyEditors.ValueConverters;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Composing;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Services;
public class IntFriendlyMediaPickerValueConverter : MediaPickerValueConverter
{
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
private readonly IMediaService _mediaService;
public IntFriendlyMediaPickerValueConverter(IPublishedSnapshotAccessor publishedSnapshotAccessor, IPublishedModelFactory publishedModelFactory, IMediaService mediaService)
: base(publishedSnapshotAccessor, publishedModelFactory)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;
_mediaService = mediaService;
}
public override object? ConvertSourceToIntermediate(IPublishedElement owner, IPublishedPropertyType propertyType, object? source, bool preview)
{
if (source == null)
{
return null;
}
var udiList = new List<Udi>();
var ids = source.ToString()?.Split(Constants.CharArrays.Comma, StringSplitOptions.RemoveEmptyEntries);
if (ids != null)
{
foreach (var id in ids)
{
if (int.TryParse(id, out var integerId))
{
var hasPublishedSnapshot =
_publishedSnapshotAccessor.TryGetPublishedSnapshot(out var publishedSnapshot);
if (hasPublishedSnapshot)
{
var item = publishedSnapshot.Media.GetById(integerId);
if (item != null)
{
udiList.Add(new GuidUdi(Constants.UdiEntityType.Media, item.Key));
}
else
{
var contentItem = _mediaService.GetById(integerId);
if (contentItem != null)
{
udiList.Add(new GuidUdi(Constants.UdiEntityType.Media, contentItem.Key));
}
}
}
}
else
{
return base.ConvertSourceToIntermediate(owner, propertyType, source, preview);
}
}
}
return udiList.ToArray();
}
public class MyComposer : IComposer
{
public void Compose(IUmbracoBuilder builder)
{
builder.PropertyValueConverters().InsertBefore(typeof(MediaPickerValueConverter),
typeof(IntFriendlyMediaPickerValueConverter));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment