2023-09-16 09:06:56 +00:00
|
|
|
using System.Collections;
|
|
|
|
|
using Elsa.Http.Abstractions;
|
|
|
|
|
using Elsa.Http.Contexts;
|
|
|
|
|
using Elsa.Http.Models;
|
|
|
|
|
|
2023-09-17 20:35:13 +00:00
|
|
|
namespace Elsa.Http.DownloadableContentHandlers;
|
2023-09-16 09:06:56 +00:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Handles content that represents a list of downloadable objects.
|
|
|
|
|
/// </summary>
|
2023-09-17 20:35:13 +00:00
|
|
|
public class MultiDownloadableContentHandler : DownloadableContentHandlerBase
|
2023-09-16 09:06:56 +00:00
|
|
|
{
|
|
|
|
|
/// <inheritdoc />
|
2024-06-14 20:46:47 +00:00
|
|
|
public override bool GetSupportsContent(object content) => content is IEnumerable and not string and not byte[];
|
2023-09-16 09:06:56 +00:00
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
2023-09-17 20:35:13 +00:00
|
|
|
protected override IEnumerable<Func<ValueTask<Downloadable>>> GetDownloadablesAsync(DownloadableContext context)
|
2023-09-16 09:06:56 +00:00
|
|
|
{
|
2023-09-17 20:35:13 +00:00
|
|
|
var collectedDownloadables = new List<Func<ValueTask<Downloadable>>>();
|
2023-09-16 09:06:56 +00:00
|
|
|
var content = context.Content;
|
|
|
|
|
var enumerable = (IEnumerable) content;
|
|
|
|
|
var manager = context.Manager;
|
|
|
|
|
|
|
|
|
|
foreach (var item in enumerable)
|
|
|
|
|
{
|
2023-09-17 20:35:13 +00:00
|
|
|
var downloadables = manager.GetDownloadablesAsync(item, context.Options, context.CancellationToken);
|
2023-09-16 09:06:56 +00:00
|
|
|
collectedDownloadables.AddRange(downloadables);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return collectedDownloadables;
|
|
|
|
|
}
|
|
|
|
|
}
|