Artem Semenovykh 415abbc47b import jabref
2024-11-16 11:43:42 +01:00

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()
}