mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-16 15:22:27 +02:00
56 lines
1.5 KiB
C#
56 lines
1.5 KiB
C#
namespace Robust.Packaging.AssetProcessing.Passes;
|
|
|
|
/// <summary>
|
|
/// Pipes through any files it receives without modifying them.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This can be used to codify standard "ports" on asset graphs.
|
|
/// </remarks>
|
|
public sealed class AssetPassPipe : AssetPass
|
|
{
|
|
private readonly HashSet<string> _passedAssetNames = new();
|
|
|
|
/// <summary>
|
|
/// Whether to use <see cref="AssetPass.RunJob"/> to send every file. Parallelizing files at the "start"
|
|
/// </summary>
|
|
public bool Parallelize { get; set; }
|
|
|
|
/// <summary>
|
|
/// If set, this pass will drop files with a duplicate path that pass through it.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This is always considered an error, even when this flag is not set.
|
|
/// This flag is simply to avoid the overhead by default.
|
|
/// </remarks>
|
|
public bool CheckDuplicates { get; set; }
|
|
|
|
protected override AssetFileAcceptResult AcceptFile(AssetFile file)
|
|
{
|
|
if (CheckDuplicates)
|
|
{
|
|
bool added;
|
|
lock (_passedAssetNames)
|
|
{
|
|
added = _passedAssetNames.Add(file.Path);
|
|
}
|
|
|
|
if (!added)
|
|
{
|
|
Logger?.Error($"{Name}: Duplicate file detected, will be skipped: '{file.Path}'");
|
|
return AssetFileAcceptResult.Consumed;
|
|
}
|
|
}
|
|
|
|
if (Parallelize)
|
|
{
|
|
RunJob(() => SendFile(file));
|
|
}
|
|
else
|
|
{
|
|
SendFile(file);
|
|
}
|
|
|
|
return AssetFileAcceptResult.Consumed;
|
|
}
|
|
}
|