Public/Start-JVGui.ps1

function Start-JVGui {
    [CmdletBinding()]
    param (
        [Parameter(Position = 0)]
        [ValidateRange(0, 65353)]
        [Int]$Port = 8600
    )

    $jvModulePath = (Get-InstalledModule -Name Javinizer).InstalledLocation
    $jvPsuPath = Join-Path -Path $jvModulePath -ChildPath 'GUI'
    $jvPsuExePath = Join-Path -Path $jvPsuPath -ChildPath 'Universal.Server.exe'
    $jvPsuSettingsPath = Join-Path -Path $jvPsuPath -ChildPath 'appsettings.json'
    $jvPsuRepositoryPath = Join-Path -Path $jvModulePath -ChildPath 'Universal' -AdditionalChildPath 'Repository'
    $jvDashboardPath = Join-Path -Path $jvPsuRepositoryPath -ChildPath 'javinizergui.ps1'
    $jvPsuDatabasePath = Join-Path -Path $jvModulePath -ChildPath 'Universal' -AdditionalChildPath 'database.db'
    $jvPsuAssetsFolderPath = Join-Path -Path $jvModulePath -ChildPath 'Universal' -AdditionalChildPath 'Dashboard'

    # Check if the dashboard file is valid
    $dashboardContent = Get-Content -Path $jvDashboardPath -Raw

    if ($dashboardContent -notmatch 'Javinizer Web') {
        Write-Warning "Javinizer dashboard content is invalid, redownloading..."
        try {
            $origDashboardContent = Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/jvlflame/Javinizer/master/src/Javinizer/Universal/Repository/javinizergui.ps1' -Verbose:$false
            Set-Content -Path $jvDashboardPath -Value $origDashboardContent -Force -
        } catch {
            Write-Error "Error occurred when resetting Javinizer dashboard: $PSItem"
        }
    }

    # Customize the default appsettings.json for Javinizer specific usage
    $jvPsuSettings = Get-Content -Path $jvPsuSettingsPath | ConvertFrom-Json -Depth 32
    $jvPsuSettings.Kestrel.Endpoints.HTTP.Url = "http://*:$Port"
    $jvPSuSettings.Data.RepositoryPath = $jvPsuRepositoryPath
    $jvPsuSettings.Data.ConnectionString = $jvPsuDatabasePath
    $jvPsuSettings.UniversalDashboard.AssetsFolder = $jvPsuAssetsFolderPath

    # Write settings back to appsettings.json
    $jvPsuSettings | ConvertTo-Json -Depth 32 | Out-File -FilePath $jvPsuSettingsPath -Force

    try {
        Start-Process -FilePath $jvPsuExePath -Verb RunAs
    } catch {
        Write-Error "Error starting Javinizer PowerShell Universal client: $PSItem" -ErrorAction Stop
    }

    Start-Process "http://localhost:$Port/dashboard"
}