Functions/GenXdev.AI.Queries/Add-ImageDirectory.ps1
################################################################################ <# .SYNOPSIS Adds directories to the configured image directories for GenXdev.AI operations. .DESCRIPTION This function adds one or more directory paths to the existing image directories configuration used by the GenXdev.AI module. It updates both the global variable and the module's preference storage to persist the configuration across sessions. Duplicate directories are automatically filtered out to prevent configuration redundancy. Paths are expanded to handle relative paths and environment variables automatically. .PARAMETER ImageDirectories An array of directory paths to add to the existing image directories configuration. Paths can be relative or absolute and will be expanded automatically. Duplicates are filtered out using case-insensitive comparison. .EXAMPLE Add-ImageDirectory -ImageDirectories @("C:\NewPhotos", "D:\MoreImages") Adds the specified directories to the existing image directories configuration using full parameter names. .EXAMPLE addimgdir @("C:\Temp\Photos", "E:\Backup\Images") Uses alias to add multiple directories to the configuration with positional parameters. #> function Add-ImageDirectory { [CmdletBinding(SupportsShouldProcess)] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidGlobalVars', '')] [Alias("addimgdir")] param( ############################################################################### [Parameter( Mandatory = $true, Position = 0, ValueFromPipeline = $true, HelpMessage = "Array of directory paths to add to image directories" )] [string[]] $ImageDirectories ############################################################################### ) begin { # retrieve current image directories configuration $currentConfig = GenXdev.AI\Get-ImageDirectories # initialize new collection to store all directories including existing ones $newDirectories = [System.Collections.Generic.List[string]]::new() # populate collection with existing directories to preserve them foreach ($dir in $currentConfig.ImageDirectories) { $newDirectories.Add($dir) } # output current configuration state for debugging purposes Microsoft.PowerShell.Utility\Write-Verbose ( "Current image directories: " + "[$($currentConfig.ImageDirectories -join ', ')]" ) } process { # iterate through each provided directory path for processing foreach ($directory in $ImageDirectories) { # expand path to resolve relative paths and environment variables $expandedPath = GenXdev.FileSystem\Expand-Path $directory # search for existing directory using case-insensitive comparison $existingDir = $newDirectories | Microsoft.PowerShell.Core\Where-Object { $_.ToLower() -eq $expandedPath.ToLower() } # add directory only if it doesn't already exist in collection if (-not $existingDir) { $newDirectories.Add($expandedPath) # output verbose message about successful addition Microsoft.PowerShell.Utility\Write-Verbose ( "Adding directory: $expandedPath" ) } else { # output verbose message about duplicate directory skip Microsoft.PowerShell.Utility\Write-Verbose ( "Directory already exists: $expandedPath" ) } } } end { # convert list collection to array for function call compatibility $finalDirectories = $newDirectories.ToArray() # request user confirmation before modifying configuration if ($PSCmdlet.ShouldProcess( "GenXdev.AI Module Configuration", ("Add directories to image directories: " + "[$($ImageDirectories -join ', ')]") )) { # update configuration using the dedicated setter function GenXdev.AI\Set-ImageDirectories ` -ImageDirectories $finalDirectories ` -Language $currentConfig.Language # display success confirmation to user with statistics Microsoft.PowerShell.Utility\Write-Host ( "Added $($ImageDirectories.Count) directories to image " + "directories configuration. Total directories: " + "$($finalDirectories.Count)" ) -ForegroundColor Green } } } ################################################################################ |