Private/Wizard/Write-CgrWizardActivityEvent.ps1

function Write-CgrWizardActivityEvent {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [psobject] $ActivityEvent
    )

    $state = $script:CgrWizardActivityPresentationState
    if ($null -eq $state) {
        return
    }

    if ($ActivityEvent.State -eq 'Started') {
        $state.StartedAt[$ActivityEvent.Name] = $ActivityEvent.Timestamp
        if ($state.Interactive) {
            $frame = $state.SpinnerFrames[$state.SpinnerIndex % $state.SpinnerFrames.Count]
            $state.SpinnerIndex++
            Write-Progress -Id $state.ProgressId -Activity 'Repository copy' -Status ("{0} {1}" -f $frame, $ActivityEvent.Message)
        }
        else {
            Write-CgrWizardMessage -Message $ActivityEvent.Message -Status Info
        }
        return
    }

    if ($ActivityEvent.State -eq 'Progress') {
        if ($state.Interactive) {
            $hasMeasure = $null -ne $ActivityEvent.Current -and $null -ne $ActivityEvent.Total -and $ActivityEvent.Total -gt 0
            if ($hasMeasure) {
                $percent = [Math]::Min(100, [Math]::Max(0, [int] [Math]::Floor(($ActivityEvent.Current / $ActivityEvent.Total) * 100)))
                Write-Progress -Id $state.ProgressId -Activity 'Repository copy' -Status $ActivityEvent.Message -PercentComplete $percent
            }
            else {
                $frame = $state.SpinnerFrames[$state.SpinnerIndex % $state.SpinnerFrames.Count]
                $state.SpinnerIndex++
                Write-Progress -Id $state.ProgressId -Activity 'Repository copy' -Status ("{0} {1}" -f $frame, $ActivityEvent.Message)
            }
        }
        return
    }

    if ($state.Interactive) {
        Write-Progress -Id $state.ProgressId -Activity 'Repository copy' -Completed
    }

    $elapsedSuffix = ''
    if ($state.StartedAt.ContainsKey($ActivityEvent.Name)) {
        $elapsed = $ActivityEvent.Timestamp - $state.StartedAt[$ActivityEvent.Name]
        $elapsedSuffix = ' ({0:N1}s)' -f [Math]::Max(0, $elapsed.TotalSeconds)
        $state.StartedAt.Remove($ActivityEvent.Name)
    }

    $message = "{0}{1}" -f $ActivityEvent.Message, $elapsedSuffix
    switch ($ActivityEvent.State) {
        'Completed' {
            Write-CgrWizardMessage -Message $message -Status Success
        }
        'Info' {
            Write-CgrWizardMessage -Message $message -Status Info
        }
        'Warning' {
            Write-CgrWizardMessage -Message $message -Status Warning
        }
        'Failed' {
            Write-CgrWizardMessage -Message $message -Status Error
        }
    }
}