Private/Set-YtmConfiguration.ps1
|
function Set-YtmConfiguration { <# .SYNOPSIS Writes the YouTubeMusicPS configuration file. .DESCRIPTION Saves the configuration to the JSON config file. Creates the file if it doesn't exist. .PARAMETER Configuration The configuration object to save .EXAMPLE $configuration = Get-YtmConfiguration $configuration.auth = [PSCustomObject]@{ cookies = 'SAPISID=xxx' } Set-YtmConfiguration -Configuration $configuration #> [CmdletBinding(SupportsShouldProcess)] param ( [Parameter(Mandatory = $true)] [ValidateNotNull()] [PSCustomObject] $Configuration ) $configurationPath = Get-YtmConfigurationPath if (-not $PSCmdlet.ShouldProcess($configurationPath, 'Write configuration')) { return } try { # Validate required properties if (-not $Configuration.PSObject.Properties['version']) { throw "Configuration missing 'version' property" } # Convert to JSON with proper formatting $json = $Configuration | ConvertTo-Json -Depth 10 -ErrorAction Stop # Ensure directory exists $configurationDirectory = Split-Path $configurationPath -Parent if (-not (Test-Path $configurationDirectory)) { New-Item -Path $configurationDirectory -ItemType Directory -Force -ErrorAction Stop | Out-Null } # Write file with UTF-8 encoding (no BOM) [IO.File]::WriteAllText($configurationPath, $json, [System.Text.UTF8Encoding]::new($false)) } catch { throw "Failed to write configuration: $($_.Exception.Message)" } } |