diff --git a/src/TaskManager/Plug-ins/Email/EmailPlugin.cs b/src/TaskManager/Plug-ins/Email/EmailPlugin.cs index 3a47d10a8..5396609c4 100644 --- a/src/TaskManager/Plug-ins/Email/EmailPlugin.cs +++ b/src/TaskManager/Plug-ins/Email/EmailPlugin.cs @@ -126,8 +126,10 @@ public override async Task ExecuteTask(CancellationToken cancel var metadata = new Dictionary(); if (Event.Inputs.Any()) { - // only process the first input for now - metadata = await GetRawMetaFromFile($"{Event.Inputs.First().RelativeRootPath}/{Event.Inputs.First().Name}", Event.Inputs.First().Bucket); + foreach (var input in Event.Inputs) + { + metadata = await AddRawMetaFromFile(metadata, $"{input.RelativeRootPath}", input.Bucket); + } } var emailRequest = GenerateEmailRequestEventMessage(metadata); @@ -143,39 +145,53 @@ public override async Task ExecuteTask(CancellationToken cancel } } - private async Task?> GetRawMetaFromFile(string path, string bucketName) + private async Task> AddRawMetaFromFile(Dictionary metadata, string path, string bucketName) { if (_includeMetadata is null || _includeMetadata.Count() == 0) { _logger.NoMetaDataRequested(); - return null; + return metadata; } - // load file from Minio ! - Guard.Against.NullOrWhiteSpace(bucketName); - Guard.Against.NullOrWhiteSpace(path); - var fileStream = await _storageService.GetObjectAsync(bucketName, path); - var dcmFile = DicomFile.Open(fileStream); - - var output = new Dictionary(); - foreach (var item in _includeMetadata) + var allFiles = await _storageService.ListObjectsAsync(bucketName, path, true); + foreach (var file in allFiles) { - DicomTag tag; + if (file.FilePath.EndsWith(".json", StringComparison.InvariantCultureIgnoreCase)) continue; + Guard.Against.NullOrWhiteSpace(bucketName); + Guard.Against.NullOrWhiteSpace(path); + + // load file from Minio ! + var fileStream = await _storageService.GetObjectAsync(bucketName, $"{file.FilePath}"); try { - tag = DicomDictionary.Default[item]; - } - catch (Exception) - { - tag = DicomTag.Parse(item); + var dcmFile = DicomFile.Open(fileStream); + + foreach (var item in _includeMetadata) + { + if (metadata.ContainsKey(item)) continue; + + DicomTag tag; + try + { + tag = DicomDictionary.Default[item]; + } + catch (Exception) + { + tag = DicomTag.Parse(item); + } + if (tag is not null) + { + metadata.Add(item, dcmFile.Dataset.GetString(tag)); + } + } } - if (tag is not null) + catch (Exception ex) { - output.Add(item, dcmFile.Dataset.GetString(tag)); + _logger?.ErrorGettingMetaData($"{file.FilePath}/{file.Filename}", ex.Message); } } - return output; + return metadata; } private JsonMessage GenerateEmailRequestEventMessage(Dictionary? metadata) diff --git a/src/TaskManager/Plug-ins/Email/Log.cs b/src/TaskManager/Plug-ins/Email/Log.cs index 9913c89af..db5121589 100644 --- a/src/TaskManager/Plug-ins/Email/Log.cs +++ b/src/TaskManager/Plug-ins/Email/Log.cs @@ -39,5 +39,8 @@ public static partial class Log [LoggerMessage(EventId = 6, Level = LogLevel.Debug, Message = "No Metadata requested in event")] public static partial void NoMetaDataRequested(this ILogger logger); + + [LoggerMessage(EventId = 7, Level = LogLevel.Debug, Message = "Error Getting Metadata requested for file: {fileName} message:{message} ")] + public static partial void ErrorGettingMetaData(this ILogger logger, string fileName, string message); } }