functions/public/Remove-KlippyPrintHistory.ps1
|
function Remove-KlippyPrintHistory { <# .SYNOPSIS Removes print history entries from a Klipper printer. .DESCRIPTION Deletes print history records. Can delete specific jobs by ID, all history, or entries before a specific time. .PARAMETER Id The unique identifier of the printer. .PARAMETER PrinterName The friendly name of the printer. .PARAMETER InputObject A printer object from pipeline input. .PARAMETER JobId The specific job ID(s) to delete. .PARAMETER All Delete all print history. .PARAMETER Before Delete entries before this Unix timestamp. .PARAMETER Force Skip confirmation prompt. .EXAMPLE Remove-KlippyPrintHistory -JobId "000001" Removes a specific print history entry. .EXAMPLE Remove-KlippyPrintHistory -All -Force Removes all print history without confirmation. .EXAMPLE Get-KlippyPrintHistory | Where-Object Status -eq 'cancelled' | Remove-KlippyPrintHistory Removes all cancelled print entries. .OUTPUTS None. #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High', DefaultParameterSetName = 'ByJobId')] param( [Parameter(ParameterSetName = 'ById')] [Parameter(ParameterSetName = 'ByIdAll')] [ValidateNotNullOrEmpty()] [string]$Id, [Parameter(ParameterSetName = 'ByName')] [Parameter(ParameterSetName = 'ByNameAll')] [ValidateNotNullOrEmpty()] [string]$PrinterName, [Parameter(ParameterSetName = 'ByObject', ValueFromPipeline = $true)] [Parameter(ParameterSetName = 'ByObjectAll', ValueFromPipeline = $true)] [PSCustomObject]$InputObject, [Parameter(Mandatory = $true, ParameterSetName = 'ById')] [Parameter(Mandatory = $true, ParameterSetName = 'ByName')] [Parameter(ParameterSetName = 'ByObject', ValueFromPipelineByPropertyName = $true)] [string[]]$JobId, [Parameter(Mandatory = $true, ParameterSetName = 'ByIdAll')] [Parameter(Mandatory = $true, ParameterSetName = 'ByNameAll')] [Parameter(Mandatory = $true, ParameterSetName = 'ByObjectAll')] [switch]$All, [Parameter()] [long]$Before, [Parameter()] [switch]$Force ) begin { $jobsToDelete = [System.Collections.Generic.List[string]]::new() $printer = $null } process { # Resolve printer $resolveParams = @{} if ($Id) { $resolveParams['Id'] = $Id } elseif ($PrinterName) { $resolveParams['PrinterName'] = $PrinterName } elseif ($InputObject) { if ($InputObject.PSTypeName -eq 'KlippyCLI.PrintHistory') { $resolveParams['Id'] = $InputObject.PrinterId if ($InputObject.JobId -and -not $All) { $jobsToDelete.Add($InputObject.JobId) } } else { $resolveParams['InputObject'] = $InputObject } } if (-not $printer) { $printer = Resolve-KlippyPrinterTarget @resolveParams } # Collect job IDs from parameter if ($JobId) { foreach ($jid in $JobId) { $jobsToDelete.Add($jid) } } } end { if (-not $printer) { Write-Error "No printer specified." return } try { if ($All) { $action = "Delete ALL print history" if ($Force -or $PSCmdlet.ShouldProcess($printer.PrinterName, $action)) { $endpoint = "server/history/delete_all" $null = Invoke-KlippyJsonRpc -Printer $printer -Method $endpoint Write-Host "All print history deleted from '$($printer.PrinterName)'." -ForegroundColor Green } } elseif ($jobsToDelete.Count -gt 0) { $action = "Delete $($jobsToDelete.Count) print history entry(s)" if ($Force -or $PSCmdlet.ShouldProcess($printer.PrinterName, $action)) { foreach ($jid in $jobsToDelete) { $endpoint = "server/history/delete_job?uid=$jid" $null = Invoke-KlippyJsonRpc -Printer $printer -Method $endpoint Write-Verbose "Deleted job: $jid" } Write-Host "Deleted $($jobsToDelete.Count) print history entry(s)." -ForegroundColor Green } } else { Write-Warning "No jobs specified to delete. Use -JobId or -All." } } catch { Write-Error "Failed to delete print history from '$($printer.PrinterName)': $_" } } } |