55 lines
2.0 KiB
PowerShell
55 lines
2.0 KiB
PowerShell
function Respond($response) {
|
|
$jsonResponse = $response | ConvertTo-Json
|
|
|
|
try {
|
|
$writer = New-Object System.IO.BinaryWriter([System.Console]::OpenStandardOutput())
|
|
$writer.Write([int]$jsonResponse.Length)
|
|
$writer.Write([System.Text.Encoding]::UTF8.GetBytes($jsonResponse))
|
|
$writer.Close()
|
|
} finally {
|
|
$writer.Dispose()
|
|
}
|
|
}
|
|
|
|
$jabRefExe = [System.IO.Path]::Combine($PSScriptRoot, "runtime\\bin\\JabRef.bat")
|
|
|
|
try {
|
|
$reader = New-Object System.IO.BinaryReader([System.Console]::OpenStandardInput())
|
|
$length = $reader.ReadInt32()
|
|
$messageRaw = [System.Text.Encoding]::UTF8.GetString($reader.ReadBytes($length))
|
|
$message = $messageRaw | ConvertFrom-Json
|
|
|
|
if ($message.Status -eq "validate") {
|
|
if (-not (Test-Path $jabRefExe)) {
|
|
return Respond @{message="jarNotFound";path=$jabRefExe}
|
|
} else {
|
|
return Respond @{message="jarFound"}
|
|
}
|
|
}
|
|
|
|
if (-not (Test-Path $jabRefExe)) {
|
|
return Respond @{message="jarNotFound"; output="Unable to locate '$jabRefExe'."}
|
|
}
|
|
|
|
$messageText = $message.Text.replace("`n"," ").replace("`r"," ")
|
|
$tempfile = New-TemporaryFile
|
|
# WriteAllLines should write the file as UTF-8 without BOM
|
|
# unlike Out-File which writes UTF-16 with BOM in ps5.1
|
|
[IO.File]::WriteAllLines($tempfile, $messageText)
|
|
$output = & $jabRefExe -importToOpen $tempfile *>&1
|
|
Remove-Item $tempfile *>$null
|
|
# For debugging: uncomment the following lines to get the output of JabRef be displayed as a popup
|
|
#$wshell = New-Object -ComObject Wscript.Shell
|
|
#$wshell.Popup("Input: $messageText; Output: $output", 0, "JabRef", 0x0 + 0x30)
|
|
return Respond @{message="ok"; output="$output"}
|
|
}
|
|
catch {
|
|
$err = $PSItem
|
|
Respond @{message="error"; output="$($err.Exception.Message)"; stacktrace="$($err.ScriptStackTrace)"}
|
|
# Still print the error to the console so that it is picked up by the browser in addition
|
|
throw $err
|
|
}
|
|
finally {
|
|
$reader.Dispose()
|
|
}
|