From c831ad2ab949ab3c65815ce239bf54779983e289 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Mon, 19 Aug 2024 16:30:53 -0700 Subject: [PATCH] Added ISO --- .vscode/.UserSecrets/file-watcher.json | 4 +++ File-Watcher.csproj | 43 +++++++++++++------------- Helpers/HelperISO.cs | 40 ++++++++++++++++++++++++ Models/AppSettings.cs | 9 +++--- Models/Binder/AppSettings.cs | 19 +++++++----- Models/IsoConfiguration.cs | 22 +++++++++++++ Worker.cs | 1 + 7 files changed, 105 insertions(+), 33 deletions(-) create mode 100644 Helpers/HelperISO.cs create mode 100644 Models/IsoConfiguration.cs diff --git a/.vscode/.UserSecrets/file-watcher.json b/.vscode/.UserSecrets/file-watcher.json index cbf5f64..ceeda04 100644 --- a/.vscode/.UserSecrets/file-watcher.json +++ b/.vscode/.UserSecrets/file-watcher.json @@ -32,6 +32,10 @@ "TNSX": "(description=(address_list=(address=(protocol=tcp)(host=fimesp-db.mes.infineon.com)(port=7002)))(connect_data=(sid=fimesp)))", "UserName": "edastag" }, + "IsoConfiguration": { + "DestinationDirectory": "D:/EAF/drssdv702.eu.infineon.com-eafdev-DeliveredPackages-IFX.EAF Kernel SEMI/v2.57.0.0", + "SourceDirectory": "\\\\eafdev.drs.infineon.com\\eafdev\\DeliveredPackages\\IFX.EAF Kernel SEMI\\v2.57.0.0\\EAF v2.57.0.0 API\\complete_with_adaptations" + }, "MetrologyConfiguration": { "DeleteOlderThanWeeks": 16, "DirectoriesBack": 2, diff --git a/File-Watcher.csproj b/File-Watcher.csproj index 920cfce..17fc4d9 100644 --- a/File-Watcher.csproj +++ b/File-Watcher.csproj @@ -10,34 +10,35 @@ 6062c774-99a9-4f4a-b42d-a9cb7fcbd8be - + + - - + + - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + \ No newline at end of file diff --git a/Helpers/HelperISO.cs b/Helpers/HelperISO.cs new file mode 100644 index 0000000..2983b45 --- /dev/null +++ b/Helpers/HelperISO.cs @@ -0,0 +1,40 @@ +using DiscUtils.Iso9660; +using File_Watcher.Models; + +namespace File_Watcher.Helpers; + +internal static partial class HelperISO +{ + + private static void DirectoryToISO(ILogger logger, string destinationDirectory, bool mapOnly, string directory) + { + byte[] bytes = []; + string relativePath; + string directoryName = Path.GetFileName(directory); + CDBuilder builder = new() { UseJoliet = true, VolumeIdentifier = directoryName.Length < 25 ? directoryName : directoryName[..25] }; + IEnumerable files = Directory.EnumerateFiles(directory, "*", new EnumerationOptions { IgnoreInaccessible = true, RecurseSubdirectories = true }); + foreach (string file in files) + { + relativePath = Path.GetRelativePath(directory, file).Replace(';', '_'); + if (!mapOnly) + _ = builder.AddFile(relativePath, file); + else + _ = builder.AddFile(relativePath, bytes); + } + logger.LogInformation(destinationDirectory); + builder.Build(Path.Combine(destinationDirectory, $"{directoryName}.iso")); + logger.LogInformation(directoryName); + } + + internal static bool DirectoryToISO(AppSettings appSettings, ILogger logger) + { + IsoConfiguration isoConfiguration = appSettings.IsoConfiguration; + logger.LogInformation(isoConfiguration.SourceDirectory); + bool mapOnly = isoConfiguration.SourceDirectory.Length == 2; + if (!Directory.Exists(isoConfiguration.DestinationDirectory)) + _ = Directory.CreateDirectory(isoConfiguration.DestinationDirectory); + DirectoryToISO(logger, isoConfiguration.DestinationDirectory, mapOnly, isoConfiguration.SourceDirectory); + return true; + } + +} \ No newline at end of file diff --git a/Models/AppSettings.cs b/Models/AppSettings.cs index 2c69925..4b45c61 100644 --- a/Models/AppSettings.cs +++ b/Models/AppSettings.cs @@ -3,13 +3,14 @@ using System.Text.Json.Serialization; namespace File_Watcher.Models; -public record AppSettings(EAFLogConfiguration EAFLogConfiguration, +public record AppSettings(CompassConfiguration CompassConfiguration, + DriveConfiguration DriveConfiguration, + EAFLogConfiguration EAFLogConfiguration, EAFProgramDataConfiguration EAFProgramDataConfiguration, EDADatabaseConfiguration EDADatabaseConfiguration, - CompassConfiguration CompassConfiguration, - DriveConfiguration DriveConfiguration, - NugetConfiguration NugetConfiguration, + IsoConfiguration IsoConfiguration, MetrologyConfiguration MetrologyConfiguration, + NugetConfiguration NugetConfiguration, SerialConfiguration SerialConfiguration, StratusConfiguration StratusConfiguration, TransmissionControlProtocolConfiguration TransmissionControlProtocolConfiguration, diff --git a/Models/Binder/AppSettings.cs b/Models/Binder/AppSettings.cs index 8cae893..a9dd5a2 100644 --- a/Models/Binder/AppSettings.cs +++ b/Models/Binder/AppSettings.cs @@ -44,13 +44,14 @@ public class AppSettings } private static Models.AppSettings Get(AppSettings? appSettings, - DriveConfiguration driveConfiguration, CompassConfiguration compassConfiguration, + DriveConfiguration driveConfiguration, EAFLogConfiguration eafLogConfiguration, EAFProgramDataConfiguration eafProgramDataConfiguration, EDADatabaseConfiguration edaDatabaseConfiguration, - NugetConfiguration nugetConfiguration, + IsoConfiguration isoConfiguration, MetrologyConfiguration metrologyConfiguration, + NugetConfiguration nugetConfiguration, SerialConfiguration serialConfiguration, StratusConfiguration stratusConfiguration, TransmissionControlProtocolConfiguration transmissionControlProtocolConfiguration, @@ -65,13 +66,14 @@ public class AppSettings if (appSettings.MillisecondsDelay is null) throw new NullReferenceException(nameof(MillisecondsDelay)); if (appSettings.WatchDirectory is null) throw new NullReferenceException(nameof(WatchDirectory)); Verify(appSettings); - result = new(eafLogConfiguration, + result = new(compassConfiguration, + driveConfiguration, + eafLogConfiguration, eafProgramDataConfiguration, edaDatabaseConfiguration, - compassConfiguration, - driveConfiguration, - nugetConfiguration, + isoConfiguration, metrologyConfiguration, + nugetConfiguration, serialConfiguration, stratusConfiguration, transmissionControlProtocolConfiguration, @@ -110,13 +112,14 @@ public class AppSettings results = (string.IsNullOrEmpty(json) ? null : results = JsonSerializer.Deserialize(json, AppSettingsSourceGenerationContext.Default.AppSettings)) ?? throw new NullReferenceException(nameof(Models.AppSettings)); results = Get(appSettings, - results.DriveConfiguration, results.CompassConfiguration, + results.DriveConfiguration, results.EAFLogConfiguration, results.EAFProgramDataConfiguration, results.EDADatabaseConfiguration, - results.NugetConfiguration, + results.IsoConfiguration, results.MetrologyConfiguration, + results.NugetConfiguration, results.SerialConfiguration, results.StratusConfiguration, results.TransmissionControlProtocolConfiguration, diff --git a/Models/IsoConfiguration.cs b/Models/IsoConfiguration.cs new file mode 100644 index 0000000..0ee6c49 --- /dev/null +++ b/Models/IsoConfiguration.cs @@ -0,0 +1,22 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace File_Watcher.Models; + +public record IsoConfiguration(string DestinationDirectory, + string SourceDirectory) +{ + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, IsoConfigurationSourceGenerationContext.Default.IsoConfiguration); + return result; + } + +} + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(IsoConfiguration))] +internal partial class IsoConfigurationSourceGenerationContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/Worker.cs b/Worker.cs index 26500e6..f96f2c4 100644 --- a/Worker.cs +++ b/Worker.cs @@ -33,6 +33,7 @@ public partial class Worker : BackgroundService { nameof(Helpers.HelperNuget) => Helpers.HelperNuget.Sync(_AppSettings, _Logger), nameof(Helpers.HelperTCP) => Helpers.HelperTCP.ReadWrite(_AppSettings, _Logger), + nameof(Helpers.HelperISO) => Helpers.HelperISO.DirectoryToISO(_AppSettings, _Logger), nameof(Helpers.HelperCompass) => Helpers.HelperCompass.CopyFile(_AppSettings, _Logger), nameof(Helpers.HelperStratus) => Helpers.HelperStratus.MoveFile(_AppSettings, _Logger), nameof(Helpers.HelperEAFLog) => Helpers.HelperEAFLog.DeleteFiles(_AppSettings, _Logger),