From 9d362344c94407f28a77eb7285be25d79fd71d55 Mon Sep 17 00:00:00 2001 From: joachimschmidt557 Date: Thu, 25 Jul 2019 15:32:39 +0200 Subject: [PATCH] Rewrite using jester --- etherpad2latex.nimble | 1 + src/etherpad2latex.nim | 44 ++++++++++++++++++++++++++---------------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/etherpad2latex.nimble b/etherpad2latex.nimble index 91ccd6e..a5b3477 100644 --- a/etherpad2latex.nimble +++ b/etherpad2latex.nimble @@ -12,3 +12,4 @@ bin = @["etherpad2latex"] # Dependencies requires "nim >= 0.20.0" +requires "jester >= 0.4.1" diff --git a/src/etherpad2latex.nim b/src/etherpad2latex.nim index 8bcf21e..96a487c 100644 --- a/src/etherpad2latex.nim +++ b/src/etherpad2latex.nim @@ -1,26 +1,34 @@ import asynchttpserver, asyncdispatch, httpclient -import osproc, strutils, parseopt +import os, osproc, strutils, parseopt -proc getContent(pad:string):string = - discard +import jester + +proc getContent(pad:string, etherpadUrl:string):string = + var client = newHTTPClient() + result = client.getContent(etherpadUrl & "pad/p/" & pad & "/export/txt") -proc requestHandler(req:Request) {.async.} = - let - padName = req.url.path - content = getContent(padName) - let (output, exitCode) = execCmdEx("make") - let headers = if exitCode == 0: newHttpHeaders([("Content-Type","application/pdf")]) - else: newHttpHeaders([("Content-Type","text/plain")]) - let pdf = if exitCode == 0: readFile("Abgabe.pdf") - else: output - await req.respond(Http200, pdf, headers) when isMainModule: var p = initOptParser() port = 8080 - etherpadAddress = "http://localhost:9001/" - server = newAsyncHttpServer() + etherpadUrl = "http://localhost:9001/" + + router main: + get "/@pad": + let + pad = @"pad" + content = getContent(pad, etherpadUrl) + texFile = open("etherpad.tex", fmWrite) + + texFile.write(content) + texFile.close() + + let (output, exitCode) = execCmdEx(quoteShellCommand(["pdflatex", "-halt-on-error", "etherpad.tex"])) + if exitCode == 0: + sendFile("etherpad.pdf") + else: + resp output # Parse command-line args while true: @@ -32,8 +40,10 @@ when isMainModule: of "p", "port": port = p.val.parseInt of "a", "etherpad-address": - etherpadAddress = p.val + etherpadUrl = p.val else: discard of cmdArgument: continue - waitFor server.serve(Port(port), requestHandler) + let s = newSettings(port=Port(port)) + var j = initJester(main, settings=s) + j.serve()