49 lines
1.2 KiB
Nim
49 lines
1.2 KiB
Nim
import asynchttpserver, asyncdispatch, httpclient
|
|
import os, osproc, strutils, parseopt
|
|
|
|
import jester
|
|
|
|
proc getContent(pad:string, etherpadUrl:string):string =
|
|
var client = newHTTPClient()
|
|
result = client.getContent(etherpadUrl & "p/" & pad & "/export/txt")
|
|
|
|
|
|
when isMainModule:
|
|
var
|
|
p = initOptParser()
|
|
port = 8080
|
|
etherpadUrl = "http://localhost:9001/"
|
|
|
|
router main:
|
|
get "/@pad":
|
|
let
|
|
pad = @"pad"
|
|
content = getContent(pad, etherpadUrl)
|
|
texFile = open(pad & ".tex", fmWrite)
|
|
|
|
texFile.write(content)
|
|
texFile.close()
|
|
|
|
let (output, exitCode) = execCmdEx(quoteShellCommand(["pdflatex", "-halt-on-error", pad & ".tex"]))
|
|
if exitCode == 0:
|
|
resp(Http200, readFile(pad & ".pdf"), contentType = "application/pdf")
|
|
else:
|
|
resp output
|
|
|
|
# Parse command-line args
|
|
while true:
|
|
p.next()
|
|
case p.kind
|
|
of cmdEnd: break
|
|
of cmdShortOption, cmdLongOption:
|
|
case p.key
|
|
of "p", "port":
|
|
port = p.val.parseInt
|
|
of "a", "etherpad-address":
|
|
etherpadUrl = p.val
|
|
else: discard
|
|
of cmdArgument: continue
|
|
|
|
let s = newSettings(port=Port(port))
|
|
var j = initJester(main, settings=s)
|
|
j.serve()
|