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